您现在的位置是:首页 >技术杂谈 >OtterCTF---Memory Forensics内存取证(1-13)网站首页技术杂谈
OtterCTF---Memory Forensics内存取证(1-13)
一.OtterCTF 内存取证
CTF地址:
国产化一下:
注册一下 登录就可以 (注:因为邮箱不验证,随意搞个就可以):
1 - What the password?
第一题:
国产化:
下载OtterCTF.7z的压缩包:
是OtterCTF.vmem镜像文件
volatility介绍
Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家合作开发的一套工具, 可以用于windows,linux,mac osx,android等系统内存取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
volatility工具的基本使用
命令格式
volatility -f [image] --profile=[profile] [plugin]
在分析之前,需要先判断当前的镜像信息,分析出是哪个操作系统
volatility -f xxx.vmem imageinfo
如果操作系统错误,是无法正确读取内存信息的,知道镜像后,就可以在--profile=中带上对应的操作系统
常用插件
下列命令以windows内存文件举例
查看用户名密码信息
volatility -f 1.vmem --profile=Win7SP1x64 hashdump
查看进程
volatility -f 1.vmem --profile=Win7SP1x64 pslist
查看服务
volatility -f 1.vmem --profile=Win7SP1x64 svcscan
查看浏览器历史记录
volatility -f 1.vmem --profile=Win7SP1x64 iehistory
查看网络连接
volatility -f 1.vmem --profile=Win7SP1x64 netscan
查看命令行操作
volatility -f 1.vmem --profile=Win7SP1x64 cmdscan
查看文件
volatility -f 1.vmem --profile=Win7SP1x64 filescan
查看文件内容
volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./
查看当前展示的notepad内容
volatility -f 1.vmem --profile=Win7SP1x64 notepad
提取进程
volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./
屏幕截图
volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./
查看注册表配置单元
volatility -f 1.vmem --profile=Win7SP1x64 hivelist
查看注册表键名
volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410
查看注册表键值
volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "xxxxxxx"
查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。
volatility -f 1.vmem --profile=Win7SP1x64 userassist
最大程序提取信息
volatility -f 1.vmem --profile=Win7SP1x64 timeliner
windows:
1.查看操作系统
volatility_2.6.exe -f OtterCTF.vmem imageinfo
2.查看密码
首先hash
volatility_2.6.exe -f OtterCTF.vmem --profile=Win7SP1x64 hashdump
518172d012f97d3a8fcc089615283940 这串哈希估计是解不出来,太复杂了。。。
换个方法: lsadump模块提取密码:
volatility_2.6.exe -f OtterCTF.vmem --profile=Win7SP1x64 lsadump
flag:CTF{MortyIsReallyAnOtter}
kali:同理:
系统信息
vol.py -f OtterCTF.vmem imageinfo
hash哈希
vol.py -f OtterCTF.vmem --profile Win7SP1x64 hashdump
lasdump密码
vol.py -f OtterCTF.vmem --profile Win7SP1x64 lsadump
mimikatz这个也可以查看明文,不过我没成功 ,不知道啥原因 可能是python2的问题。。。
提交flag:
2.General Info
国产化:
PC的ip和名称:
查看网络连接:
volatility_2.6.exe -f OtterCTF.vmem --profile=Win7SP1x64 netscan
kali:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 netscan
虽然IP挺多的,但ip应该是192.168.202.131(因为就这一个像)
CTF{192.168.202.131}
查看主机名称:
查看注册表:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 hivelist
看到system
主机名信息在system的那一条记录中
查看注册表键名
用-o + 地址 printkey
来查看指定的记录
vol.py -f OtterCTF.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey
然后就是步步跟进了:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001"
vol.py -f OtterCTF.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001Control"
vol.py -f OtterCTF.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001ControlComputerName"
vol.py -f OtterCTF.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001ControlComputerNameComputerName"
运气较好 第一个直接试出来:
CTF{WIN-LO6FAF3DTFE}
3.Play Time
国产化:
游戏名称和服务器ip:
查看进程:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 pslist
好多,盲猜吧。。。
LunarMS.exe,可以搜索一下,发现是个游戏。。。
用netscan查出ip地址
vol.py -f OtterCTF.vmem --profile Win7SP1x64 netscan
在这:
CTF{LunarMS}
CTF{77.102.199.102}
4. Name Game
国产化:
已知这个账户登录到称为Lunar-3的频道,找出账户名。
把OtterCTF.vmem搞到WinHex做分析:
先搜索Lunar-3
后面有一段字符串:
使用strings命令加上grep搜索,-C 5
表示查找前后5条记录,同样可以找到可疑字符串
strings OtterCTF.vmem|grep Lunar-3 -C 5
CTF{0tt3r8r33z3}
5.Name Game 2
看着还是围绕LunarMS这进程来的:
先提取进程:D保存当前目录就可以
vol.py -f OtterCTF.vmem --profile Win7SP1x64 memdump -p 708 -D ./
进程号PID可以看前面的pslist:
先分析题目十六进制数值:
0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2}
分析:0x 十六进制的标志 {6-8} {18} {2}间隔位数
64 ?? {6-8}未知 40 06 ?? {18} 5a 0c 00 {2}
只能搜索 5a 0c 00 好找一些
Winhex工具:
打开708.dmp 先搜索5a 0c 00
慢慢找。。。。。出来了M0rtyL0L
这里也能查出来M0rtyL0L 不过旁边十六进制与题目所给的对不起来。。。
kali同样也可以
hexdump命令:-A -B是指定列数
hexdump -C 708.dmp | grep "5a 0c 00" -A 3 -B 3
找到:
还有这:
CTF{M0rtyL0L}
6.Silly Rick
找rick的电子邮件密码 :
题目说他总是复制并粘贴密码
那我们就查看粘贴板:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 clipboard
CTF{M@il_Pr0vid0rs}
7.Hide And Seek
找到恶意软件进程名称(包括扩展名)
PID和PPID:
进程PID是当操作系统运行进程时系统自动为其分配的标识符,具有唯一性,且为非零整数。一个PID只会标识一个进程。
PPID代表的是父进程的PID,即父进程相应的进程号。当一个进程被创建时,创建它的那个进程会被称作为父进程,而子进程将以PPID指出它的父进程。
查看进程:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 pslist
查看进程发现一个名为Rick And Morty的进程与题目对应
而且vmware-tray.ex进程,PPID比PID还大 估计是。
查看cmd历史命令:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 cmdline
查看该进程的进程命令参数,发现Rick And Morty下载了vmware-tray.exe,默认下载路径在RarSFX目录下,并执行了它:
dlllist查看一下进程相关的dll文件列表
vol.py -f OtterCTF.vmem --profile Win7SP1x64 dlllist -p 3720
CTF{vmware-tray.exe}
8.Path To Glory
这题意有点不明确。。。
恶意软件是如何进入 rick 的 PC 的?应该是下载的某个文件。
filescan找一下这个文件
vol.py -f OtterCTF.vmem --profile Win7SP1x64 filescan|grep 'Rick And Morty'
一共三个exe和三个种子文件,我们要分析来源就要关注种子文件,里面可能放着地址信息:
先保存 在用strings命令 字符串查看文件:
可惜第一个和第二个都没有flag信息:
0x000000007dae9350 第二个 这个有信息:
//保存
vol.py -f OtterCTF.vmem --profile Win7SP1x64 dumpfiles -Q 0x000000007dae9350 -D ./
//查看
strings file.None.0xfffffa801b42c9e0.dat
CTF{M3an_T0rren7_4_R!ck}
9. Path To Glory 2
让我们继续。。。
没头绪了,看大佬的文章吧。
torrent文件是通过web浏览器下载的 先将所有的chrome进程转储下来:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 memdump -n chrome.exe -D ./chrome
strings ./chrome/* | grep 'Rick And Morty season 1 download.exe' -C 10
在这:
过程中发现了flag.txt 可能后面的关卡会用到
CTF{Hum@n_I5_Th3_Weak3s7_Link_In_Th3_Ch@in}
10.Bit 4 Bit
找攻击者的地址
两个方法:
vmware-tray.exe pid 3720
将恶意软件转储出来:
知识点: 要把内存中某个进程给dump出来,一般有两种方式
memdump:以dmp格式保存
procdump:直接提取
vol.py -f OtterCTF.vmem --profile Win7SP1x64 procdump -p 3720 -D ./kiss
使用IDA Pro进行分析 打开executable.3720.exe
方法二:
通过匹配
strings -e l OtterCTF.vmem | grep -i -A 5 "ransomware"
CTF{1MmpEmebJkqXG8nQv4cjJSmxZQFVmFo63M}
11.Graphic's For The Weak
分离文件:
foremost kiss/executable.3720.exe -v
foremost kiss/executable.3720.exe -o odic
-o 分离到odic目录
查看
CTF{S0_Just_M0v3_Socy}
12.Recovery
加密文件的随机密码:
IDA查看带有password的函数:
发现有computerName+"-"+userName+" "
,也就是WIN-LO6FAF3DTFE-Rick
strings命令查看:
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段
-f –print-file-name:在显示字符串前先显示文件名
-n –bytes=[number]:找到并且输出所有NUL终止符序列
- :设置显示的最少的字符数,默认是4个字符
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
-o :类似--radix=o
-T --target= :指定二进制文件格式
-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :读取中选项
还要带上参数-e
,要以16-bit
寻找,即-el
或-eb
,不然找不到。
strings -eb OtterCTF.vmem | grep WIN-LO6FAF3DTFE-Rick
CTF{aDOBofVYUNVnmp7}
13.Closure
最后一题了 解密rick的文件:
前面好像找到了一个flag.txt
在查找一下吧:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 filescan|grep -i 'flag'
应该是第二个 提取到kiss目录下:
vol.py -f OtterCTF.vmem --profile Win7SP1x64 dumpfiles -Q 0x000000007e410890 -D ./kiss
cat查看 被加密了
命令行把带有0字节的删除 然后保存到flag2.png.lockad
hexdump查看一下 还是没有发现flag
tr < file.None.0xfffffa801b0532e0.dat -d '