内存取证-金砖技能大赛

内存取证-金砖技能大赛
At4ckxu环境
金砖技能大赛-应急响应-内存镜像分析、46届世界技能大赛湖北省选拔赛-数字取证
你作为 A 公司的应急响应人员,请分析提供的内存文件按照下面的要求找到 相关关键信息,完成应急响应事件。 |
1、从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password} 形式提交(密码为 6 位);
拉取镜像,获取操作系统信息
python2 vol.py -f worldskills3.vmem imageinfo |
接下来就是–profile=Win7SP1x64
查看密码
python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 hashdunp |
此时的密码是hash加密的
解密admin密码发现为空密码
第一个空密码,第二个NTML解不出来
lsadump 从注册表中提取LSA密钥信息(已解密) |
使用lsadump查看LSA密钥
hashdump抓取系统SAM中用户信息
lsadump抓取系统中LSA Secret信息,而LSA Secret存储的是系统中自动登录的用户的明文密码,而该系统中自动登录用户仅有admin,则抓取结果就为admin用户明文密码
lsadump抓取的为admin用户的明文密码,flag{406990ff88f13dac3c9debbc0769588c}进行NTML加密后即为heapdump的admin的密码
2、获取当前系统 ip 地址及主机名,以 Flag{ip:主机名}形式提交
查看ip
python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 netscan |
查看主机名
python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName" |
3、获取当前系统浏览器搜索过的关键词,作为 Flag 提交;
python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 iehistory |
4、当前系统中存在挖矿进程,请获取指向的矿池地址,以 Flag{ip:端口}形式 提交;
netscan 关注正在外链的进程
这为一种判断思路
54.36.109.161:2222 为外链的矿池地址
psscan 有,但 pslist 没有→ 高危可疑进程
python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 pstree
重点看:
explorer.exe 下有没有奇怪程序
services.exe 下出现非服务类程序
svchost.exe 启动了 GUI 程序 ❌拼写相似:
svch0st.exeexpl0rer.exe不合理位置:
svchost.exe不在System32iexplore.exe在Temp
python2 vol.py ... dlllist -p PID 查看进程路径(先通过pslist确定可疑进程pid)
主要关注非system32目录中的
5、恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交。
已经确定了恶意进程,pid为2588,查看该进程的服务
该进程无服务
查看该进程的父进程
pslist -p 2588 |
查找父进程的服务
svcscan | grep "3036" -A 10 |
grep "3036" -A 10 |
PID 3036(父进程)是真正“运行服务”的进程
PID 2588(子进程)不是服务进程
3036 (父,有 ServiceName)
└── 2588 (子,无 ServiceName)
答案
| 题目 | 答案 |
|---|---|
| 1、从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password} 形式提交(密码为 6 位); | Flag{admin,dfsddew} |
| 2、获取当前系统 ip 地址及主机名,以 Flag{ip:主机名}形式提交; | Flag{192.168.85.129:WIN-9FBAEH4UV8C} |
| 3、获取当前系统浏览器搜索过的关键词,作为 Flag 提交; | Flag{admin@file:///C:/Users/admin/Desktop/flag.txt} |
| 4、当前系统中存在挖矿进程,请获取指向的矿池地址,以 Flag{ip:端口}形式 提交; | Flag{54.36.109.161:2222} |
| 5、恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交。 | Flag{VMnetDHCP} |
Q&A
为什么第五题查找服务时,查找的是父进程的服务,而非当前子进程的服务,如果有多个子进程,会不会在其他子进程中运行了服务
我们查找当前子进程服务,发现子进程并没有服务,是因为子进程只是执行恶意逻辑
| 角色 | 作用 |
|---|---|
| 3036(父进程) | ✔ 注册服务 ✔ 被 SCM 识别 ✔ 有 ServiceName |
| 2588(子进程) | ✔ 执行恶意逻辑 ✘ 没有服务身份 |
SCM 只关心 3036,完全不关心 2588
而svcscan是查看服务信息,因为2588子进程没有服务身份,所以他的结果为空
如果“父进程有多个子进程”怎么办?
不会“跑到别的子进程里当服务”。
真正运行服务的进程,永远只有 svcscan 中那一个 PID。
服务 ≠ 任意子进程
- SCM 不会:
- 把服务名绑定到多个 PID
- 在子进程之间来回切换
所以:
- 不管父进程拉起多少子进程
- 只有一个进程是“服务进程”
子进程通常是:
| 子进程类型 | 作用 |
|---|---|
| Worker | 执行恶意任务 |
| Loader | 注入、反射 DLL |
| Payload | 实际木马 |
但它们 没有 ServiceName
模型一:独立服务进程(子是服务)
dropper.exe |
模型二:svchost 托管
恶意 DLL |
模型三:服务壳 + 子进程(你这题)
service.exe ← 服务(父) |





















