原题如下:本关考验你内存取证本领,请考生携带好文具(kali 虚拟机和 Volatility2),做好准备,迎接挑战。
本题的 FLAG 由多个问题的答案组成,使用下划线 _ 将答案各部分连接,就能得到 FLAG:
恶意进程的外联 ip:port
恶意进程所在的文件夹名称
用户的主机登录密码
电脑主机的名称
涉及字母的部分统一小写,题目附件包含 FLAG 的举例。
题目附件已上传至本站,提取密码: 1145,可供大伙自行复现题目。
关于VMware虚拟机和kali Linux的安装在此不作赘述,网上有足够多的教程,此处仅记录一下最基本的内存取证思路。
一、初识内存取证与工具
内存取证,简单来说就是分析电脑关机前的内存镜像文件,把当时电脑运行的进程、网络连接、用户账号密码、计算机名称等隐藏线索全部挖出来。
本次做题只用两个核心条件:
- 取证工具:Volatility 2.6
- 题目附件:
hellohacker.raw内存镜像文件
题目的要求很明确:FLAG 由四个部分用下划线拼接而成,分别是恶意进程外联 IP 端口、恶意进程所在文件夹名、主机登录密码、电脑主机名,且字母统一小写。
二、新手完整取证流程复盘
第一步:识别内存镜像系统版本
拿到 raw 镜像第一件事,必须先确定系统版本,后续所有分析命令都要依赖对应profile配置。
使用命令:
volatility -f hellohacker.raw imageinfo
得到
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/home/kali/Desktop/hellohacker.raw)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf8000403e120L
Number of Processors : 2
Image Type (Service Pack) : 1
KPCR for CPU 0 : 0xfffff80004040000L
KPCR for CPU 1 : 0xfffff88004500000L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2025-09-30 11:32:54 UTC+0000
Image local date and time : 2025-09-30 19:32:54 +0800
工具自动识别出推荐配置 Win7SP1x64,后续所有命令都带上这个配置参数,这是所有取证操作的基础,新手切记不能跳过这一步。
第二步:查找恶意进程外联 IP:PORT
想要找恶意木马的外联地址,用netscan扫描内存中所有网络连接:
volatility -f hellohacker.raw --profile=Win7SP1x64 netscan
着重看Foreign Address列,发现一个特殊的ip:
0x7fe07560 UDPv4 0.0.0.0:3702 *:* 1304 svchost.exe 2025-09-30 11:28:21 UTC+0000
0x7fd69ac0 TCPv4 192.168.20.131:49158 125.216.248.74:11451 ESTABLISHED 2864 svchost.exe
恶意外联:125.216.248.74:11451,对应的进程PID为2864.
第三步:定位恶意进程所在文件夹
记下恶意进程 PID=2864,用cmdline插件查看进程完整启动路径:
volatility -f hellohacker.raw --profile=Win7SP1x64 cmdline -p 2864
得到:
svchost.exe pid: 2864
Command line : "C:\Windows\Temp\svchost.exe"
所以文件夹:Temp。
第四步:提取系统用户登录密码
用hashdump抓取系统所有用户的 NTLM 密码哈希:
volatility -f hellohacker.raw --profile=Win7SP1x64 hashdump
得到
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
JustAGuestAwA:1000:aad3b435b51404eeaad3b435b51404ee:3008c87294511142799dca1191e69a0f:::
输出格式为用户名:RID:LM哈希:NTLM哈希:::。RID是系统分配的身份编号,一般500指的是系统默认管理员,501指的是来宾账号,其余为自建。而LM 哈希是Windows 很早的老旧加密算法,安全性极差。从 Win7 开始默认直接禁用,所以你看到所有人的 LM 哈希都是同一个固定值。只有NTLM哈希是密码的加密值。截取NTLM哈希并在互联网(cmd5.com等网站)上找碰撞。Administrator和Guest均无密码,JustAGuestAwA为admin123。
所以密码:admin123
第五步:读取注册表获取主机名
计算机名称存放在系统注册表中,分两步读取:
先用hivelist找到 SYSTEM 注册表虚拟地址:
volatility -f hellohacker.raw --profile=Win7SP1x64 hivelist | grep SYSTEM
得到:
0xfffff8a000024010 0x000000002c5cc010 \REGISTRY\MACHINE\SYSTEM
分别为虚拟地址,物理地址和注册表路径。带入地址使用下一步:
volatility -f hellohacker.raw --profile=Win7SP1x64 printkey -o 地址 -K "ControlSet001\Control\ComputerName\ComputerName"
返回:
Legend: (S) = Stable (V) = Volatile
----------------------------
Registry: \REGISTRY\MACHINE\SYSTEM
Key name: ComputerName (S)
Last updated: 2025-09-30 09:17:16 UTC+0000
Subkeys:
Values:
REG_SZ : (S) mnmsrvc
REG_SZ ComputerName : (S) ARISAMIK
输出有两个注册表值,无名称默认值为系统无关参数,带ComputerName标识的才是真实主机名ARISAMIK。
最终flag{125.216.248.74:11451_temp_admin123_arisamik}
借用AI做个总结:内存取证并不是靠高深知识死磕,而是固定工具 + 固定流程的套路化解题。从识别镜像、扫描网络、查进程路径,到抓取密码哈希、读取注册表,每一步都有对应的 Volatility 插件。对于 CTF 新手来说,不用害怕内存取证,从这类基础 MISC 题目入手,熟记常用命令、理清排查逻辑,就能轻松入门,慢慢解锁更多进阶取证题型。
要是真有这么轻松就好了
附个依旧是AI总结出来的Volatility命令集:
通用格式:volatility -f 内存镜像 --profile=系统配置 插件名
你这道题的固定配置:--profile=Win7SP1x64
一、基础必用(第一步必执行)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
volatility -f xxx.raw imageinfo |
识别内存镜像的系统版本 | 所有操作的前提,获取profile |
volatility -f xxx.raw kdbgscan |
辅助识别系统配置 | imageinfo 识别失败时用 |
二、进程分析(找恶意程序 / 木马)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
pslist |
列出所有运行的进程 | 查看 PID、进程名、父进程 |
psscan |
扫描隐藏进程 | 排查被木马隐藏的恶意进程 |
cmdline -p PID |
查看进程完整路径 / 启动命令 | 本题用它找到恶意程序在Temp文件夹 |
dlllist -p PID |
查看进程加载的动态库 | 排查恶意 DLL 注入 |
三、网络分析(找外联 IP / 端口,本题核心)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
netscan |
扫描所有网络连接 | 本题用它找到125.216.248.74:11451 |
connections |
查看 TCP 活跃连接 | 仅支持旧版 Windows |
connscan |
扫描已断开的网络连接 | 补全 netscan 遗漏的连接 |
四、文件扫描(找隐藏文件)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
filescan |
扫描内存中所有文件 | CTF 高频,过滤 flag/txt/exe 文件 |
dumpfiles -Q 地址 -D ./ |
提取内存中的文件 | 把扫描到的文件导出到本地 |
五、注册表分析(找主机名 / 系统配置)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
hivelist |
列出所有注册表配置单元 | 本题用它找 SYSTEM 注册表地址 |
printkey -o 地址 -K 注册表路径 |
读取注册表键值 | 本题用它获取主机名ARISAMIK |
六、密码取证(本题核心考点)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
hashdump |
提取系统用户密码哈希 | 本题用它拿到管理员密码哈希 |
lsadump |
提取 LSA 存储的密码 | 查看系统明文密码 / 密钥 |
cachedump |
提取域缓存密码 | 域环境取证常用 |
七、命令行历史(找 flag 高频)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
consoles |
提取 CMD 命令行完整记录 | 很多题 flag 直接藏在这里 |
cmdscan |
扫描命令行操作历史 | 补充 consoles 的内容 |
八、内存 / 进程提取(进阶)
| 命令 | 核心作用 | 新手备注 |
|---|---|---|
memdump -p PID -D ./ |
导出指定进程的内存 | 用strings搜索关键词 |
procdump -p PID -D ./ |
导出进程的可执行程序 | 把木马程序导出分析 |
