内存取证练习
以OtterCTF题目为例,Volatility为辅,进行内存取证方面应用的模拟和练习。
题目文件下载链接:
https://pan.baidu.com/s/1QVCp4a45sFQUkrX-D4fvUw
做题之前简单介绍下Volatility
这个工具——
一款开源的内存取证分析工具,Python编写,兼容各系统,可通过插件来拓展功能。Kali-Linux下集成了该工具,命令行中输入volatility来使用,功能可在源码或直接-h查看。
附:关于如何给volatility添加组件。
【在Python源码https://github.com/volatilityfoundation/
中,将目标文件(如:mimikatz. py)移入volatility-master\volatility\plugins
目录下即可。】
1-9、
1- What the password? 100
you got a sample of rick’s PC’s memory. can you get his user password?
第一步,先查看imageinfo
之后Volatility会给出几个建议的Profile值,用以指定内存的系统信息来精确的“对症下药”。(通常需要爆破出正确的Profile)
第二步,利用插件mimikatz拓展功能(mimikatz:一个法国人写的,用来抓Windows明文密码的工具。此处为插件mimikatz.py
)获得password
2- General Info 75
Let’s start easy - whats the PC’s name and IP address?
先说IP地址,直接netscan即可扫出:
得到:192.168.202.131
之后看注册表:(hivelist)
然后去printkey
中间略,一层一层目录查看即可,最终:
3-Play Time 50
Rick just loves to play some good old videogames. can you tell which game is he playing? What’s the IP address of the server?
回去找netscan,在进程中发现:
LunarMS:(游戏实锤)
故:LunarMS IP为:77.102.199.102
4-Name Game 100
We know that the account was logged in to a channel called Lunar-3. what is the account name?
这道题目很简单,既然说了Lunar-3,那就去找就是了,顺便看一下前后的五行。
答案:0tt3r8r33z3
5- Name Game 2 150
From a little research we found that the username of the logged on character is always after this signature: 0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2} What’s rick’s character’s name?
再次回到netscan的界面,把那个游戏LunarMS.exe(pid=708那个)给dump下来,因为题目文件是vmem文件么,所以memdump就好了
接下来就去找0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2}这串东西,可以辨认出来的是:
d @ Z三个字符,然而尝试strings之后。。
失败了,还是去查看hex,选择已知相邻最长的0x5a 0x0c 0x00吧:
得到:M0rtyL0L(可能还有更好的匹配搜索办法)
6- Silly Rick 100
Silly rick always forgets his email’s password, so he uses a Stored Password Services online to store his password. He always copy and paste the password so he will not get it wrong. whats rick’s email password?
直接去看剪切板(clipboard):
M@il_Pr0vid0rs
7- Hide And Seek 100
The reason that we took rick’s PC memory dump is because there was a malware infection. Please find the malware process name (including the extension)
BEAWARE! There are only 3 attempts to get the right flag!
去看进程树吧(pstree):
出现了一个新的值–PPid,解释起来很简单:
先说Pid(Process ID)–程序被操作系统加载到内存成为进程后动态分配的资源。注意动态一词,Pid在每次重新加载程序的时候都是不同的。(一个Pid标识一个进程,所以它也是唯一的)
而PPid(Parent Process ID)–是程序的父进程ID。
然后,就可以看题了,需要找出恶意软件进程的名字。
…还是再举个例子稍微解释一下
从进程树里随便截取了一段,首先看到init。
推测为第一个进程,跟着序列号走:336→396,396→492,注意到后面有两次变动,492→1428,和492→808的时候,序列1428,808的进程又作为父进程,产生了1428→3916和808→960。之后又回到了492的主干,一片和谐。
了解这个过程之后就可以做题了。最开始,第三个进程就出现了问题:
Pid比PPid还要小,而且序列变化明显的异常,估计不会错了。
然后分析这个前后进程吧,dlllist:
锁定了,Temp目录下执行,恶意进程实锤:vmware-tray.exe
8- Path To Glory 150
How did the malware got to rick’s PC? It must be one of rick old illigal habits…
malware-恶意软件,不过并不知道怎么看出来,这个问题我们后面再讨论吧(先贴个网址在这儿:https://www.freebuf.com/articles/system/104899.html ),不过匹配Rick和exe肯定没有错,filescan之:
这个地方比较懵,不过根据推测,rwd:读取写入即时同步,于是dump出RWD—模式的文件来看看:
9- Path To Glory 200
Continue the search after the the way that malware got in.
接着上面那个题的,找出恶意软件之后来分析它,这个很暴力,dump下Chrome的进程然后匹配即可(比较耗时):