简介:这份2021年全国职业院校技能大赛网络安全竞赛试题文档,面向备赛选手、指导教师及希望系统梳理竞赛考点的安全从业者,可用于模拟训练、教学拆解与自查补漏。压缩包内仅含1个docx文件,大小约119KB,内容围绕A、B模块组织,覆盖登录安全加固、数据库加固、流量完整性保护、事件监控、SSH/VSFTPD/IIS服务加固、防火墙策略,以及网络安全事件响应、数字取证调查和应用安全等任务,并列出Windows与Linux环境下的配置路径、命令示例和截图要求。文档以任务驱动方式呈现密码策略、远程会话超时、用户登录时间限制、MySQL权限收紧、HTTPS重定向、日志审核与端口封禁等检查项,便于对照实验环境逐条核验。该资料已有961人学习,适合按赛题任务复现实验、理解加固思路与取证分析流程,也可作为赛前集中复盘和团队分工训练的参考清单。
1. 一份加固清单能踩出多少坑:先说清这份赛题包到底是什么
带参赛队复盘时最扎心的不是不会做,而是六台靶机里有一半加固项评分脚本读不到——密码策略改了没生效、Banner 文件建了路径写错、iptables 规则加完自己先掉线。这套 2021 赛年的网络安全技能大赛试题包,价值就在于它把 Windows 与 Linux 双平台的账户加固、数据库降权、HTTPS 强制跳转、审核策略、防火墙收敛,以及内存取证、流量分析、MSF 渗透三条取证链路,压进了四十多个可打分的检查点。准备竞赛的人拿它练流程,刚接手安全整改的运维拿它逐条核自己的机器,都能对上位置。
2. 账户与登录面:密码策略、Banner 与会话超时的双平台落地
账户面是所有加固题的第一道关,也是最容易被“看起来改了”骗过去的一关。Windows 走的是本地安全策略加组策略两条线,Linux 走的是/etc/login.defs、PAM、sshd_config三个文件,两边都有一个共同特征:配置写进去了不等于策略生效,生效了不等于对存量账户生效。这一章按“密码长度 → 登录提示 → 会话超时 → 登录时段与访问来源”的顺序拆,每一步都给可抄的命令和该看的回显。
2.1 密码长度 16 位:Windows 与 Linux 各自的生效链路
Windows 侧最直接的是本地安全策略,图形路径为“管理工具 → 本地安全策略 → 账户策略 → 密码策略 → 最小密码长度”,改成 16 即可。批量或远程场景我一般用命令行,省得点错:
# 查看当前密码策略 net accounts # 最小密码长度改为 16 net accounts /minpwlen:16 # 复核:MinPasswordLength 一行应显示 16 net accounts | Select-String "密码长度|Minimum password length"net accounts改的是本机 SAM 的策略,等价于secedit里的MinimumPasswordLength。参数/minpwlen取值 0-14 是“允许”,14 以上才是强制长密码;注意这条命令只影响本地账户,域环境要走组策略的“默认域策略”,改完gpupdate /force再在域控上gpresult /h看结果。另一个细节:Windows 的密码策略对已存在的账户在下一次改密时才校验,想立刻验证就新建一个测试账户试设 8 位密码,被拒才算真的生效。
Linux 侧题面给的是改/etc/login.defs的PASS_MIN_LEN:
# 备份后修改 cp /etc/login.defs /etc/login.defs.bak sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN\t16/' /etc/login.defs grep -E '^PASS_(MIN|MAX)' /etc/login.defsPASS_MIN_LEN控制的是新建用户和改密时的最小长度,配套还有PASS_MAX_DAYS(最长有效期)、PASS_MIN_DAYS(两次改密间隔)、PASS_WARN_AGE(过期前提醒天数),做完整加固时一起设。这里有个高频翻车点:RHEL/CentOS 7 之后默认走pam_pwquality模块,login.defs里的PASS_MIN_LEN会被 PAM 的minlen覆盖,只改前者,passwd照样让你设 6 位密码。稳妥做法是两处都改:
# pwquality 侧同步收紧,minlen=16 且要求字符类别 sed -i 's/^#\?minlen.*/minlen = 16/' /etc/security/pwquality.conf grep -E 'minlen|minclass' /etc/security/pwquality.conf # 确认 PAM 栈里引用了 pwquality(Debian 系是 common-password) grep pwquality /etc/pam.d/system-auth /etc/pam.d/common-password 2>/dev/nullminlen是硬长度下限,minclass是字符类别数(大写、小写、数字、符号),两个参数配合才能挡住aaaaaaaaaaaaaaaa这种 16 位弱密码。改完用passwd testuser实测一次,比看配置文件可靠。
2.2 登录提示语与 SSH Banner:本地链路和远程链路要分开配
题面要求登录时出现“For authorized users only”,很多人只改了/etc/issue就交卷,结果远程 SSH 登录看不到提示,扣分。原因是本地 tty 登录读的是/etc/issue,SSH 登录读的是sshd_config里Banner指向的文件,两条链路互相独立。
# 1. 本地 tty 登录提示 echo "For authorized users only" > /etc/issue echo "For authorized users only" > /etc/issue.net # 2. SSH 登录提示 mkdir -p /etc/ssh echo "For authorized users only" > /etc/ssh/banner chmod 644 /etc/ssh/banner # 3. 在 sshd_config 中挂上 Banner,并做语法检查 sed -i 's|^#\?Banner.*|Banner /etc/ssh/banner|' /etc/ssh/sshd_config sshd -t && echo "config ok" systemctl restart sshd/etc/issue支持\r、\m、\n这类转义(分别代表系统版本、硬件架构、主机名),而issue.net和 Banner 文件不做转义,写了\m会原样打印出来。所以 Banner 文件内容建议纯文本,别从issue直接复制带转义的模板。chmod 644是防止某些发行版的 sshd 在权限过宽时告警。sshd -t是我每次改 sshd 配置都强制走的一步,它能提前抓出拼写错误和路径问题,避免重启失败把远程连接全断掉。
Windows 侧对应的是“本地安全策略 → 本地策略 → 安全选项”里的两条:交互式登录:试图登录的用户的消息标题和消息文本。题面原文写成“交换式登录”是错别字,实际条目名是“交互式登录”。标题填For authorized users only,文本可以写单位+用途说明。改完锁屏再登录一次验证,只改标题不改文本的话,登录框只会显示标题栏,正文区域仍是空白,评分脚本按文本匹配就会判失败。
2.3 会话超时 5 分钟:ClientAlive 计数与 RDP 空闲限制
远程会话超时这条,Linux 靠sshd_config的两个参数组合计算,Windows 靠 RDP 会话限制,两边的“5 分钟”落点不一样。
# SSH:每 60 秒探测一次,连续 5 次无响应即断开 = 300 秒 sed -i 's|^#\?ClientAliveInterval.*|ClientAliveInterval 60|' /etc/ssh/sshd_config sed -i 's|^#\?ClientAliveCountMax.*|ClientAliveCountMax 5|' /etc/ssh/sshd_config sshd -t && systemctl restart sshdClientAliveInterval是服务端向客户端发探测的间隔秒数,ClientAliveCountMax是允许无响应的次数,乘积就是实际超时时间。想设 5 分钟,60×5 和 300×1 都行,但后者只要一次网络抖动就断连,体验很差,我一般用 60×5。要注意这两个参数断开的是“客户端无响应”的会话,不是“用户没敲键盘”的会话——真按空闲算,得配合 shell 的TMOUT环境变量,但TMOUT会连本地终端一起踢,赛题环境一般不用。
Windows 侧走“管理工具 → 远程桌面服务 → 远程桌面会话主机配置 → RDP-Tcp 属性 → 会话”选项卡,把“空闲会话限制”设为 5 分钟。三个限制别搞混:活动会话限制是会话总时长,空闲会话限制才是题面要的非活动超时,结束已断开的会话管的是连接断开后会话保留多久。组策略路径在“计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 会话时间限制”,域环境优先走组策略,本地配置会被覆盖。
2.4 登录时段与网络访问权限:net user 和组策略的边界
限制 user1 只能在工作日 9:00-18:00 登录,单机用net user,域用户走账户属性里的“登录时间”对话框:
# 单机:周一至周五 9:00-18:00 允许登录,其余时段拒绝 net user user1 /time:M-F,9:00-18:00 # 复核 net user user1 | Select-String "允许登录时间|Logon hours"时间格式必须是英文逗号分隔天、英文连字符表示区间,M-F是周一到周五,9:00-18:00是 24 小时制;写成9am-6pm或中文逗号都会报“命令成功完成”但实际没设上,这是最阴的一类失败。域用户的最小时间粒度是 1 小时,9:00-18:00 刚好落在整点,不会有精度损失;要设 9:30 就得接受它被取整。改完让 user1 在非允许时段runas登录一次,能登进去说明策略没落到这台机器上(本地策略和域策略冲突时域策略赢)。
“只允许管理员账号从网络访问本机”在“计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 用户权限分配 → 从网络访问此计算机”里改,把Everyone、Users、Authenticated Users删掉,只留Administrators。这条的血泪教训是:删之前先开第二个 RDP 会话验证,因为不少环境里管理员的远程登录本身就依赖某个服务账户,一刀切完可能连自己都进不去。另外这个权限只管 SMB、RPC 这类网络登录,不影响本地交互式登录,别和“允许本地登录”搞混。
3. 数据库与服务面:MySQL 降权、改名和服务端口收敛
服务加固是这套题里分值密度最高的部分,MySQL 五条、SSH 两条、VSFTPD 两条、IIS 两条,每条都是一到两行配置。但恰恰是这种“看起来一行就能搞定”的题,藏了最多版本差异和语义陷阱——同一条 SQL 在 MySQL 5.7 能跑、8.0 直接报错,同一个超时参数题面给的值和实际语义对不上。这一章按服务维度拆,每个动作都标清楚适用版本和验证方式。
3.1 用普通账户跑 mysqld:my.cnf 的 user 参数与目录属主
让 MySQL 以普通账户运行,配置项只有一行,但要让它真的生效,得同时满足三个条件:配置文件里有user、系统里有这个用户、数据目录属主对得上。
# /etc/my.cnf [mysqld] user = mysql datadir = /var/lib/mysql# 确认 mysql 用户存在 id mysql # 数据目录属主必须是 mysql,否则启动报 Permission denied chown -R mysql:mysql /var/lib/mysql # 重启并确认进程属主 systemctl restart mysqld ps -o user,pid,cmd -C mysqlduser = mysql写在[mysqld]段下,不是[client];写错段落 MySQL 会忽略且不报错,这是隐性失败。重启后用ps看进程的 USER 列,显示mysql才算落地,只看配置文件不算数。如果启动报Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root,说明配置没被读到或者被命令行参数覆盖了,检查systemctl cat mysqld里的ExecStart有没有硬编码--user=root。另外数据目录属主错了会报Can't create/write to file,这类错误在/var/log/mysqld.log里能直接看到,别急着改配置,先看日志。
3.2 删默认库、改管理员名:两条 SQL 背后的 host 记录陷阱
删test库和把root改名成SuperRoot,题面各给了一行,实际执行要处理两个额外问题:test库的残留授权,以及root的多条 host 记录。
-- 删库(MySQL 8 默认没有 test 库,加 IF EXISTS 避免报错中断) DROP DATABASE IF EXISTS test; -- 清掉 mysql.db 里 test 相关的库级授权,否则授权表里还留着口子 DELETE FROM mysql.db WHERE Db IN ('test', 'test\_%'); -- 看清 root 到底有几条记录:localhost / 127.0.0.1 / ::1 往往同时存在 SELECT user, host FROM mysql.user WHERE user = 'root'; -- 5.7:逐条改名,漏一条就等于没改 UPDATE mysql.user SET user = 'SuperRoot' WHERE user = 'root'; FLUSH PRIVILEGES;mysql.user表的主键是(user, host)组合,root@localhost和root@127.0.0.1是两条独立记录。只改一条,另一个 host 上的 root 照样能登,评分脚本一查SELECT user FROM mysql.user WHERE user='root'还有结果,直接判失败。更稳的写法是用RENAME USER,它会同时处理授权表联动:
RENAME USER 'root'@'localhost' TO 'SuperRoot'@'localhost'; RENAME USER 'root'@'127.0.0.1' TO 'SuperRoot'@'127.0.0.1'; FLUSH PRIVILEGES;MySQL 8.0 起不能直接UPDATE mysql.user,会报The MySQL server is running with the --skip-grant-tables option或权限表只读类错误,必须走RENAME USER或ALTER USER ... RENAME TO。改完名先别关当前会话,新开一个窗口用SuperRoot登录验证,成功了再退——这是所有改认证信息的通用后悔药。
3.3 密码加密与最小权限:md5() 为什么不能用
题面写的是Update user set password=md5(password) where user="user1";,这行是伪代码,照抄会得到一个登不进去的账户。原因在于 MySQL 的认证串不是“密码的 MD5”,而是插件生成的特定格式哈希;MD5()函数把哈希再哈希一次存进authentication_string,认证时对不上。
-- 5.7 正确写法:PASSWORD() 生成 mysql_native_password 格式的认证串 UPDATE mysql.user SET authentication_string = PASSWORD('P@ssw0rd1!') WHERE user = 'user1' AND host = 'localhost'; FLUSH PRIVILEGES; -- 8.0 正确写法:直接 ALTER USER,默认插件即可 ALTER USER 'user1'@'localhost' IDENTIFIED BY 'P@ssw0rd1!'; -- 兼容老客户端(如 5.x 的 mysql 命令行)时显式指定插件 ALTER USER 'user1'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd1!';PASSWORD()在 5.7 里返回 41 位带*前缀的哈希,8.0 已移除该函数,所以版本判断必须先做:SELECT VERSION();。改完用mysql -uuser1 -p'P@ssw0rd1!'实登一次,能进才算数。另一个坑是user表里user1可能不存在,UPDATE影响 0 行且不报错,先SELECT确认,或者用CREATE USER IF NOT EXISTS兜底。
最小权限这条,GRANT之前要保证库和用户都存在:
CREATE DATABASE IF NOT EXISTS testdb; CREATE USER IF NOT EXISTS 'user1'@'localhost' IDENTIFIED BY 'P@ssw0rd1!'; -- 先收回多余权限,再授予四条 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user1'@'localhost'; GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'user1'@'localhost'; FLUSH PRIVILEGES; -- 复核:应只看到 USAGE 加四条 DML SHOW GRANTS FOR 'user1'@'localhost';USAGE是“无权限”的占位符,看到它别慌。REVOKE ALL要先执行,否则用户可能带着历史授权,SHOW GRANTS一看就露馅。库级授权testdb.*要求库已存在,MySQL 8 在不存在的库上GRANT会直接报Unknown database,所以CREATE DATABASE不能省。
3.4 SSH 与 VSFTPD:端口、root 登录、匿名上传和超时单位
SSH 两条改完必须做语法检查,否则一个缩进错误就能让 sshd 起不来:
# 端口 2222 + 禁止 root 远程登录 sed -i 's|^#\?Port .*|Port 2222|' /etc/ssh/sshd_config sed -i 's|^#\?PermitRootLogin.*|PermitRootLogin no|' /etc/ssh/sshd_config # 语法检查通过再重启 sshd -t && systemctl restart sshd # 防火墙与 SELinux 两处都要放行,否则新端口连不上 firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload semanage port -a -t ssh_port_t -p tcp 2222 2>/dev/null || \ semanage port -m -t ssh_port_t -p tcp 2222Port指令写多个就是监听多个端口,题面要求“改为 2222”,就把 22 那行注释掉或替换掉,别留两个。RHEL 系上 SELinux 默认只放行 22,改端口不放行ssh_port_t的话,sshd 起来了但连接被拒,ss -lntp | grep 2222能看到监听、curl却连不上,这个现象很容易误判成防火墙问题。PermitRootLogin no改完,root 用密钥也登不进,验证时用普通用户测,别拿 root 反复试把自己锁外面。
VSFTPD 两条:
# /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES # 主动模式连接超时(秒) connect_timeout=60 # 被动模式 accept 超时(秒) accept_timeout=60 # 数据连接无数据超时(秒) data_connection_timeout=300 # 无命令操作超时(秒),5 分钟 = 300 idle_session_timeout=300题面要求“无任何操作的超时时间为 5 分钟”,落点是idle_session_timeout,单位秒,写 300。原始材料里给的 600 是 10 分钟,和题面要求对不上,以 300 为准。connect_timeout和accept_timeout管的是数据连接的建立阶段,不是空闲阶段,别混用。anonymous_enable=NO之后如果还留着anon_upload_enable=YES,vsftpd 启动会告警但能跑,匿名登录被拒、上传自然也不通,验证时用ftp 127.0.0.1试anonymous登录,返回530 Permission denied就对了。
3.5 IIS:日志字段裁剪与并发连接数上限
IIS 日志要求 W3C 格式且只记录日期、时间、客户端 IP、用户名、方法五个字段,在“网站 → 日志 → 选择字段”里操作,对应字段名是date、time、c-ip、cs-username、cs-method,其余全部取消勾选。
# 导入 WebAdministration 模块后按站点配置 Import-Module WebAdministration # 日志格式设为 W3C Set-ItemProperty "IIS:\Sites\Default Web Site" -Name logFile.logFormat -Value "W3C" # 只保留五个字段 Set-ItemProperty "IIS:\Sites\Default Web Site" -Name logFile.logExtFileFlags ` -Value "Date,Time,ClientIP,UserName,Method" # 最大并发连接数 1000 Set-ItemProperty "IIS:\Sites\Default Web Site" -Name limits.maxConnections -Value 1000logExtFileFlags是逗号分隔的枚举字符串,字段名大小写不敏感但拼错会静默忽略,配完Get-ItemProperty回读一次。maxConnections的默认值是 4294967295(几乎不限),设 1000 后会限制同时处理的请求数,超出部分排队或拒绝,赛题环境里这是“减轻负载”的意思,生产上要配合队列长度一起评估,别单改这一个值。日志字段裁剪要注意:去掉cs-uri-stem之后就没法做 URL 级分析了,赛题要求是“只记录”,照做即可,真实环境里我会保留cs-uri-stem和sc-status。
4. 边界与取证面:HTTPS 强制跳转、审核策略、防火墙与三条取证链路
A 模块剩下的是边界类配置,B 模块整段是取证与应急响应。这两块在题里是分开的,但实操时经常串起来:先靠防火墙和日志把攻击面收窄,出事后再靠内存和流量还原现场。这一章按“先把门关好,再学怎么查”的顺序写,HTTPS 跳转、审核策略、防火墙三节属于前者,内存取证、流量分析、MSF 三节属于后者。
4.1 IIS URL 重写:把 80 的流量 301 到 443
强制 HTTPS 有两个前提:证书已绑定 443、80 站点还在监听。然后在站点根目录的web.config里加规则,或者用 IIS 管理器的“URL 重写”图形界面配置。
<configuration> <system.webServer> <rewrite> <rules> <rule name="Force HTTPS" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> </configuration>match url="(.*)"捕获全部路径,{R:1}在重定向目标里回填,保证深链接不丢。{HTTPS}变量值为ON或OFF,条件写成^OFF$才触发,写成ON就是死循环——浏览器报ERR_TOO_MANY_REDIRECTS基本都是这个原因。redirectType="Permanent"是 301,浏览器会缓存,调试阶段建议先写Found(302),确认无误再改 301,否则清缓存能烦死人。{HTTP_HOST}会带上请求的 Host 头,如果站点只绑了www前缀,用{HTTP_HOST}可能跳到未绑定域名,稳妥写法是硬编码目标域名。
前置条件容易被忽略:URL Rewrite 模块不是 IIS 默认组件,得单独装;站点必须同时有 80 和 443 绑定;证书的 CN 要和访问域名一致,题面里证书颁发给某个测试域名并通过带www的地址访问,说明证书得包含 SAN 或者用通配符,否则浏览器照样告警。验证时用curl -I http://<站点>看返回码是不是 301 且Location指向 https,再curl -kI https://<站点>看 200。
4.2 审核策略:四条子类别和 auditpol 的本地化坑
题面要求开启登录事件(成功/失败)、特权使用(成功)、策略更改(成功/失败)、进程跟踪(成功/失败)。图形路径是“本地安全策略 → 本地策略 → 审核策略”,命令行用auditpol:
# 先看本机子类别的本地化名称,中文系统里是“登录”不是“Logon” auditpol /list /subcategory:* /category:"登录/注销" # 按子类别逐条开启 auditpol /set /subcategory:"登录" /success:enable /failure:enable auditpol /set /subcategory:"特权使用" /success:enable /failure:disable auditpol /set /subcategory:"审核策略更改" /success:enable /failure:enable auditpol /set /subcategory:"进程跟踪" /success:enable /failure:enable # 复核全部子类别状态 auditpol /get /category:*中文版 Windows 的auditpol子类别名是本地化的,直接抄英文Logon会返回“参数错误 0x57”,这是最高频的坑。先auditpol /list /subcategory:*把名字打出来再粘贴。第二个坑是“审核策略”和“高级审核策略”两套机制并存:域环境里组策略的“高级审核策略配置”优先级高于本地“审核策略”,本地改完gpupdate一跑就被覆盖,auditpol /get看到的是最终生效值,以它为准。第三个坑是进程跟踪开启后事件量巨大,系统盘小的话几天就写满,赛题环境无所谓,真实机器上要配合日志大小和滚动策略。
4.3 防火墙与 iptables:445/23 封堵、禁 ping 和一条 ssh 白名单
Windows 侧封 445 和 23,用高级安全防火墙建两条入站阻止规则:
New-NetFirewallRule -DisplayName "Block-TCP-445" -Direction Inbound ` -Protocol TCP -LocalPort 445 -Action Block New-NetFirewallRule -DisplayName "Block-TCP-23" -Direction Inbound ` -Protocol TCP -LocalPort 23 -Action Block # 复核 Get-NetFirewallRule -DisplayName "Block-TCP-*" | Select-Object DisplayName, Enabled, Direction, Action-Direction Inbound只挡进来的流量,出站不受影响;如果写成Outbound,本机访问别人的共享反而断了。445 是 SMB,封了之后本机作为文件服务器对外提供共享也会失效,赛题环境是 Web 服务器所以无所谓,真实环境要先确认角色。
Linux 侧四条:
# 封 23 iptables -A INPUT -p tcp --dport 23 -j DROP # 禁 ping:1 才是禁止,0 是允许 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # 永久生效 echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf sysctl -p # 只允许指定源访问 22,其余拒绝:ACCEPT 必须排在 DROP 前面 iptables -A INPUT -s 172.16.1.1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROPicmp_echo_ignore_all的取值语义是反的:0表示响应 ping,1表示忽略。原始材料里临时方法写echo 0,实际是放开而不是禁止,这条要特别留意。禁 ping 只挡 ICMP type 8(echo request),路径 MTU 发现用的 type 3 和超时用的 type 11 仍然要放行,全禁 ICMP 会导致大包传输玄学故障。iptables规则默认追加到链尾,如果前面已有-j ACCEPT的兜底规则,你加的 DROP 永远不生效,用iptables -L INPUT -n --line-numbers看序号,必要时-I INPUT 1插到最前。规则改完必须持久化,否则重启就没了:
# RHEL 系 service iptables save # 或 iptables-save > /etc/sysconfig/iptables # Debian 系 netfilter-persistent save限制 22 端口那条最容易把自己踢下线。改之前先确认自己当前的源 IP 是不是白名单里那个,不是的话先加临时放行,或者用at挂一个 5 分钟后iptables-restore的后悔药任务:
# 5 分钟后自动还原(先备份) iptables-save > /tmp/iptables.bak echo "iptables-restore < /tmp/iptables.bak" | at now + 5 minutes4.4 内存取证:hashdump、netscan、svcscan 的取数顺序
B 模块的内存取证题给了五个问题,我一般按“先定 profile,再按问题找插件”的顺序做,避免反复重跑镜像。
# 1. 识别镜像类型,拿到 profile volatility -f server1.raw imageinfo # 2. 提取用户 hash,再离线破解 6 位密码 volatility -f server1.raw --profile=Win7SP1x64 hashdump # 3. 当前网络连接与主机名 volatility -f server1.raw --profile=Win7SP1x64 netscan volatility -f server1.raw --profile=Win7SP1x64 printkey \ -K "ControlSet001\Control\ComputerName\ComputerName" # 4. 浏览器搜索关键词 volatility -f server1.raw <p> <a href="https://download.csdn.net/download/hesysd/19087688" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>