OtterCTF内存取证专项赛

前言

故事背景是一个叫Rick瑞克的喜欢玩老式游戏的人,而且这人吧还总喜欢用比特彗星下载盗版电影种子,游戏种子,有一天他边玩游戏边下东西,突然电脑中了勒索病毒,文件被锁了,所有后缀变成了.locked,然后取证分析人员拷贝了内存镜像文件,来看看你能从被锁的文件中获取什么信息?

0x01.What the password?

you got a sample of rick’s PC’s memory. can you get his user password?

此时题目告诉我们:你得到了瑞克电脑内存的样本,你能得到他的用户密码吗?
此时我们直接使用lsadump来实现对lsa缓存区的密码读取

或者此时我们可以使用Kit一把梭

flag{MortyIsReallyAnOtter}

0x02.General Info

whats the PC’s name and IP address?

此时要求我们获取使用IP地址和电脑主机全称
此时的ip地址我们直接使用命令netscan查看网络连接即可

然后此时的pc名字一般都是储存在注册表内的;所以用户的信息都会储存在注册表上面;所以此时我们使用命令hivelist获取内存镜像的注册表信息

此时的第一级只是发现了目录,而路径又是代表文件的位置;所以此时我们来翻看\REGISTRY\MACHINE\SYSTEM目录;使用命令进行翻看

1
vol.exe -f I:\Share\OtterCTF.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey


接下来我们继续深入探究路径;使用命令探究ControlSet001目录和ControlSet001下的Control目录;此时终于发现ComputerName的目录

1
vol.exe -f I:\Share\OtterCTF.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001\Control"


接下来直接读取ComputerName目录即可

或者此时我们通过百度得知主机名会出储存在\REGISTRY\MACHINE\SYSTEM中的ControlSet001\Control\ComputerName\ComputerName条目中;此时使用命令直接进行读取也行

1
vol.exe -f I:\Share\OtterCTF.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001\Control\ComputerName\ComputerName"

flag{WIN-LO6FAF3DTFE-192.168.202.131}

0x03.Play Time

Rick just loves to play some good old videogames. can you tell which game is he playing? whats the IP address of the server?

此时题目说内存正在运行什么游戏?游戏连接到哪个服务器?那么此时我们可以看一下它的进程使用命令pslist或者pstree;此时比较明白的进程的名字我们是可以知道的;那么此时我们就可以重点关注那些比较奇怪的进程名字;此时定位到一个叫LunarMs.exe的程序;通过搜索发现这是一款名为露娜的游戏

那么此时我们已经知道其pid=708;那么借助grep命令;此时我们使用netscan模块进行查看

此时已经成功获得其ip地址;所以flag{LunarMS-77.102.199.102}

0x04.Name Game

We know that the account was logged in to a channel called Lunar-3. what is the account name?

题目分析,题目说电脑的主人有一个游戏,在玩耍的频道中使用什么游戏用户名需要我们找到
分析一下要找了游戏频道,我们应该从刚才得到游戏进程看,那我们如何查看进程中可能包含的数据呢?因为如何用户登录到进程中的话,那么内存中应该有登陆用户名,登录信息这里用string 过滤指定的字符串,使用grep过滤了含有关键字Lunar-3频道的字符串。
此时利用strings的功能来匹配可疑字符串

1
strings '/home/wualal/桌面/Share/OtterCTF.vmem' | grep Lunar-3 -A 10 -B 10


flag{0tt3r8r33z3}

0x05.Name Game2

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?

题目说,0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2} 登录用户名的后面总有这么一串字符出现根据得到的信息,意思是用户名总在这个签名之后:0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2},所以使用的游戏角色叫什么?
那么此时我们先将该游戏的进程拷贝下来

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 memdump -p 708 -D ./

然后使用命令进行匹配,因为根据题意在游戏名字前有5a 0c 00这个三个字符;那么此时我们直接进行匹配

1
hexdump -C 708.dmp | grep "5a 0c 00" -A 3 -B 3


flag{M0rtyL0L}

0x06.Silly Rick

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?

题目给出电脑主人总是忘记他的密码,所以他所用在线存储密码服务,他总是复制和粘贴密码,这样他就不会弄错了,请问瑞克的电子邮件密码是什么?
此时题目说经常复制粘贴,那么我们直接看他的剪贴板

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 clipboard


flag{M@il_Pr0vid0rs}

0x07.Hide And Seek

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)

我们提取了瑞克电脑内存镜像的原因是有一个恶意软件感染,请找到恶意软件的进程名称,包括恶意扩展名,为下一步分析加密密钥做准备。
注意这里我们使用plist是看不到恶意软件进程的,因为可能被合法进程隐藏了,使用命令pstree可以查看进程树,可以查看所有进程和依赖关系。
ps:
如何查找可疑的进程呢?这里发现最可疑的是PPID大于PID的进程,这里解释一下什么意思呢。PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。PID(进程控制符)英文全称为ProcessIdentifier。PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统分配的,并不代表专门的进程,PPID则代表当前进程的父进程ID

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 pstree

此时我们发现一个名为vmware-tray.exe的他的ppid大于pid

此时我们使用dlllist代表查看使用的动态链接库是否合法,-p指定pid号。

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 -dlllist -p 3720


有意思的是这个dll被我们发现是在temp目录下面进行的,后面path路径存在Rick用户名,所以我们推测就是这个的结果可能性很大,因为temp这是一个临时目录,如果不是的话,需要根据名字继续类似查找。
那么此时我们为了进一步验证其正确性我们可疑使用cmdline来看看它都调用了什么命令

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 cmdline -p 3820,3720


结合前面的pslist中的看似无害的vmware-tray.exe进程,他的父进程是Rick And Morty.exe,这是非常不对劲的,可以怀疑这个vmware-tray.exe进
程实际上是恶意软件释放出来的子进程。
flag{vmware-tray.exe}
后面我搜了一下Rick And Morty原来是漂亮国的动漫

0x08.Path To Glory

How did the malware got to rick’s PC? It must be one of rick old illegal habits…

恶意软件是如何到达rick的电脑的?这一定是一种古老的违法习惯。
此时我们根据上面调用cmdline可以知道,这么恶意软件是被下载下来的

那么此时我们直接在文件里面搜索有关于这个父进程的相关信息;此时果然发现了在cmdline框里面下载的东西

那么此时我们将其提取出来然后使用strings命令查看后发现是通过网站下载的

flag{M3an_T0rren7_4_R!cke}

0x09.Path To Glory

Continue the search after the way that malware got in.

恶意软件种子都是从哪里来的?torrent 文件从哪下载的,我们分析一下种子文件也有可能是游戏传播,不过我们在之间的进程list中发现,很多浏览器exe程序,有可能是从Chrome浏览器中下载的。考虑把所有的chrome进程转储下来,之后搜索关键字torret

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 memdump -n chrome(指定所有chrome进程) -D ./chromeps

搜索关键字torret

1
strings ./chromeps/* | grep "download.exe.torrent -A 10 -B 10"


flag{Hum@n_I5_Th3_Weak3s7_Link_In_Th3_Ch@inYear}

0x10.Bit 4 Bit

We’ve found out that the malware is a ransomware. Find the attacker’s bitcoin address.

此时我们将这个勒索文件转储成可执行文件然后在使用IDA进行反编译查看

1
python2 vol.py -f '/home/wualal/桌面/Share/OtterCTF.vmem' --profile=Win7SP1x64 procdump -p 3720 -D ./

ps:procdump代表存储为可执行文件
此时提取出来后咱们的电脑也是成功的报毒了

不要慌,我们把它丢到IDA里面看看

flag{1MmpEmebJkqXG8nQv4cjJSmxZQFVmFo63M}

0x11.Graphic’s For The Weak

There’s something fishy in the malware’s graphics

告诉我们恶意软件的图形中有一些可疑之处。直接上kali然后foremost得到一张图片;图片上面就有flag

0x12.Recovery

Rick got to have his files recovered! What is the random password used to encrypt the files?

此时需要获得加密的密钥;此时我们先对这个exe进行逆向看看;此时依旧是在IDA里面进行分析;找到一个 sendpassword 函数,用到了computername 和 username

把该段代码丢尽chatgpt得到
这个方法的目的是将一些字符串(computerName、”-“、userName、””和password)连接成一个字符串,然后将结果存储在V0局部变量中。实际上,它似乎是在构造一个发送密码的信息,其中包含计算机名、用户名和密码。
因为跟计算机名字进行了连接,那么此时我们直接在内存中匹配搜索WIN-LO6FAF3DTFE-Rick;使用命令strings和grep进行配合

1
strings -eb /home/wualal/桌面/Share/OtterCTF.vmem | grep WIN-LO6FAF3DTFE-Rick


flag{aDOBofVYUNVnmp7}

0x13.Closure

Now that you extracted the password from the memory, could you decrypt rick’s files?

此时需要我们恢复被勒索的文件;此时我们使用filescan模块配合grep来查找常见的文件后缀;此时发现一个flag.txt的文件多了后缀那么我们此时怀疑这个文件被加密了

因为先前我们已经获取了密钥;所以此时我们可以直接使用工具进行解密即可。用hidden-tear-decrypto工具选择文件夹,填入密码aDOBofVYUNVnmp7 ,点击Decrypt 解密即可获得flag