MCCTF-re-取证复现
·
re
Ezhard_launcher
直接给源文件的re题一般没有难的…直接看逻辑,异或0不用管,直接拼接就行
(re就出一题还这么简单…有点难绷)
取证
1.1
【妙妙取证小工具 MemProcFS:
作用:把物理内存(RAM)映射为一个虚拟文件系统,用户可以像浏览普通文件夹一样,直接访问内存中的进程、模块、句柄、网络连接等信息。
用法:
(1)取证模式启动指令:
.\memprocfs.exe -device "<内存镜像文件(mem文件)>" -forensic 1
(2)分析进程信息:
mem
:进程内存空间
modules
:加载的 DLL 列表
handles
:句柄信息
threads
:线程堆栈】
【妙妙取证小工具 Volatility:
使用教程Volatility 3 — Volatility 3 2.26.2 文档
本题使用的插件:
1.windows.netscan(1.1、2.1使用)
主要功能:
- 枚举 TCP IPv4/IPv6 连接
- 枚举 UDP IPv4/IPv6 端点
- 列出 本地/远程 IP 与端口
- 显示 TCP 状态(LISTENING、ESTABLISHED、CLOSE_WAIT 等)
- 显示 所属进程(PID/进程名)
- 提取 时间戳(对象创建时间)
指令:
vol -f <内存镜像文件(mem文件)> windows.netscan [选项]
常用参数
-p PID
仅显示某个进程相关的网络对象。1
vol -f mem.img windows.netscan --pid 1234
--dump
部分版本支持将扫描到的对象导出(例如 PCAP、原始结构体),但标准版主要是显示表格。-r json
/-r csv
指定输出格式(renderer),方便后续处理:1
2vol -f mem.img -r json windows.netscan > netscan.json
vol -f mem.img -r csv windows.netscan > netscan.csv-o <目录>
指定输出目录(有的 renderer 或插件 dump 文件时需要)。-vv
打印更详细的调试信息。
2.windows.pslist(3.1、4.1、5.1使用)
主要功能:
- 列举 Windows 内存镜像中的所有进程 (processes)。
- 信息来源是 EPROCESS 链表(内核里维护的进程列表)。
- 输出表格包含进程的 PID、父进程、进程名、创建/退出时间、线程数、句柄数等。
常用用法
查看所有进程
1
vol -f mem.img windows.pslist
过滤特定进程(Windows)
1
vol -f mem.img windows.pslist | findstr notepad
输出为 JSON 或 CSV
1
2vol -f mem.img -r json windows.pslist > pslist.json
vol -f mem.img -r csv windows.pslist > pslist.csv结合其他插件
- 找到可疑进程 PID → 再用
windows.dlllist
查看加载的模块 - 再用
windows.memdump
或windows.memmap --dump
dump 内存
- 找到可疑进程 PID → 再用
3.windows.memmap(3.1使用)
插件作用:枚举并展示某个进程的虚拟内存空间映射情况。
用法示例
查看进程的内存映射
1
vol -f mem.img windows.memmap --pid 1234
输出类似:
1
2
3
4Virtual Physical Size File Protection Type
0x0000000140000000 0x0000000012345 0x1000 notepad.exe r-x Image
0x0000000140010000 0x0000000012350 0x2000 ntdll.dll r-- Mapped
0x0000000140030000 0x0000000012360 0x1000 - rw- Privatedump 进程的内存
1
vol -f mem.img windows.memmap --pid 1234 --dump -o dumps/
- 会把进程的虚拟内存区域导出到
dumps/
目录 - 文件名中会包含虚拟地址,方便后续逆向分析
- 会把进程的虚拟内存区域导出到
结合 strings/分析工具使用
dump 出的内存块可直接用strings
搜索敏感数据,或丢进 IDA/Ghidra 分析。
】
用Volatility跑出来windows.netscan
在 netscan.txt 里能看到多条对 10.10.0.133:80 的入站连接,来源就是 10.10.0.1(网关/反代的内侧地址),因此10.10.0.1就是攻击者ip地址。
2.1
同一份netscan.txt,有一条已建立过的对外会话:
0x3fc827a0 TCPv4 10.10.0.133 64999 66.240.205.34 9002 CLOSE_WAIT - - N/A
再加上word.exe 的字符串里也包含 66.240.205.34。所以推断攻击者外联 IP 和端口就是66.240.205.34:9002
3.1
在内存镜像里先定位进程:
1 |
|
dump 进程内存:
1 |
|
在 dumps/
目录里会生成一个 .dmp
文件,对应 notepad 的进程内存。
对 dump 出的进程镜像做字符串提取:
1 |
|
再搜索关键字,比如路径、后缀名、上传动作,这样就能找到上传路径:C:/phpstudy_pro/WWW/uploads/shell.php
4.1
根据notepad的进程内存中找到的勒索信内容,复制后上网检索,得知勒索病毒为LockBit 3.0
1 |
|
5.1
同上,可以看到域名:.onion
6.1
经过构建攻击路线,猜测黑客通过皮肤上传站上传shell.php,拿到shell后上传勒索病毒,所以加密器在C:/phpstudy_pro/WWW/uploads/LB3Decryptor.exe,且经过前几题排查确定为LockBit3.0勒索病毒,到github拉下来分析build脚本,调用 keygen 以生成公钥和私钥加密密钥。
由于猜测是利用webshell上传的勒索病毒,所以在内存中搜索shell.php,找到了上传文件的包。
1 |
|
然后找到公钥和私钥,用生成脚本生成出解密器,找到其解密日志文件即可
但是没有成功复现,回头复现好再补充吧()