OtterCTF内存取证wp

前言

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

1 - What the password?

题目:你得到了瑞克电脑内存的样本,你能得到他的用户密码吗?

1
vol.py -f OtterCTF.vmem imageinfo

镜像版本为Win7SP1x64

1
vol.py -f OtterCTF.vmem --profile="Win7SP1x64" lsadump

这里发现我的kali在root模式运行这条指令会报错,用户模式就可以

lsadump可以强制显示密码

image-20231003165745271

flag{MortyIsReallyAnOtter}

2-General Info

题目:电脑主机全称和IP地址是什么?

通过网络连接查看ip地址

1
vol.py -f OtterCTF.vmem --profile="Win7SP1x64" netscan

image-20231003171518518

IP地址:192.168.202.131

1
vol.py -f OtterCTF.vmem --profile="Win7SP1x64" printkey -K "ControlSet001\Control\ComputerName\ComputerName"

image-20231003171816388

主机名:WIN-LO6FAF3DTFE,这是最直接的方法,还有一种就是,首先我们知道所有用户信息都会存储到注册表上,所以我们去查看注册表,找到注册表下的SYSTEM系统信息。

1
vol.py -f  OtterCTF.vmem --profile=Win7SP1x64 hivelist

hivelist: 列出所有的注册表项及其虚拟地址和物理地址(第一级)

image-20231003185737061

第一级发现只是目录,而文件的位置使用偏移量来表示,0x开头,使用参数-o,printkey打印出来

1
vol.py -f  OtterCTF.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey

image-20231003185936033

继续深入下一层路径,\REGISTRY\MACHINE\SYSTEM\ControlSet001,-K是大K代表指定路径的参数

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001"

最后到”ControlSet001\Control\ComputerName\ComputerName”路径找到主机名

3-Play Time

题目:瑞克只喜欢玩一些老式的电子游戏。你能看出他在玩什么游戏吗?服务器的ip地址是什么?

查看进程,寻找那个游戏的身影

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 pslist

image-20231003184645319

发现进程LunarMS.exe,pid=708

image-20231003195325365

image-20231003194853154

flag{LunarMS-77.102.199.102}

4-Name Game1

题目:我们知道账号登录到一个频道叫Lunar-3,这个账号名是?

分析:听名字就知道和刚才那个lunar游戏有关,所以我们先提取一下LunarMS.exe这个进程,然后配合strings命令查找关键词Lunar-3,并匹配上下10行,寻找疑似账号.

将进程提取出来,可以创个文件夹保存

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 memdump -p 708 -D ./dump

memdump:提取进程,需要指定进程-p 和输出目录 -D

1
strings ./dump/708.dmp | grep -C 10 "Lunar-3"

image-20231003200813332

linux strings命令:在对象文件或二进制文件中查找可打印的字符串

grep[选项] [模式] [文件名]

这一个也可以strings 708.dmp > 708.dmp.strings将708.dmp中的字符串输出到.strings文件中,然后grep -C 10 “Lunar-3” ./dump708.dmp.strings但是没有必要

在线linux命令查询:https://www.lzltool.com/LinuxCommand

flag{0tt3r8r33z3}

5-Name Game2

题目:通过一些研究,我们发现登录角色的用户名总是在这个签名之后:0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2},Rick的角色名字是什么?

分析:题目意思是16进制64后6-8位是16进制40 16进制06,再18位后是十六进制5a 十六进制0c 十六进制00。根据这个提示,我们可以将第四题dump下来的文件内容用grep进行筛选有十六进制5a 十六进制0c 十六进制00的片段,并往前进行确认,但这里需要用到kali自带的16进制查看器hexhump

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

image-20231003202031453

flag{M0rtyL0L}

6-Silly Rick

题目:傻瑞克总是忘记电子邮件的密码,所以他使用在线存储密码服务来存储他的密码。他总是复制和粘贴密码,这样他就不会出错。瑞克的邮箱密码是什么?

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 clipboard

image-20231003202519961

flag{M@il_Pr0vid0rs}

7-Hide And Seek

题目:我们提取了瑞克电脑内存镜像的原因是有一个恶意软件感染,请找到恶意软件的进程名称,包括恶意扩展名,为下一步分析加密密钥做准备。

使用命令pstree查看进程树,最可疑的是PPID大于PID的进程。PID指进程号,操作系统里每打开一个程序都会创建一个进程ID,即PID。PID是各进程的代号,每个进程有唯一的PID编号,它是进程运行时系统分配的。PPID则代表当前进程的父进程ID。

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 pstree

image-20231003203114342

发现可疑进程vmware-tray.exe,而且发现Rick And Morty.exe就是它的父进程

具体为什么他是恶意程序,我们进行深入挖掘一下,用dlllist命令打印每个进程加载的动态链接库列表,-p指向pid

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 dlllist -p 3720

image-20231003203802650

发现了他在Temp目录下运行,要知道Temp是windows下的临时文件夹,一般程序不会放在此文件夹中,放在此文件夹中的程序一般为恶意程序。

也可以查看进程调用的命令

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 cmdline -p 3820,3720

image-20231003204410287

flag{vmware-tray.exe}

8-Path To Glory1

题目:恶意软件是怎么进入瑞克的电脑的?这一定是一种古老的违法习惯

根据上面的命令调用,恶意软件是被下载下来的

filescan:扫描所有文件列表,通过关键字Rick And Morty,查找可能与恶意软件进入电脑有关的文件,因为前言中说到rick用种子下载盗版电影、游戏。

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 filescan | grep 'Rick And Morty'

image-20231003205825806

有6个文件,3个种子文件和3个exe文件,先将种子文件分别dump下来,进行分析

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007dae9350 -D ./dump

image-20231003210149931

1
strings ./dump/file.None.0xfffffa801b42c9e0.dat 

image-20231003210501369

查看第二个种子文件时,发现website,说明是通过网站下载的

image-20231003205251617

种子文件就是记载下载文件的存放位置、大小、下载服务器的地址、发布者的地址等数据的一个索引文件

flag{M3an_T0rren7_4_R!cke}

9-Path To Glory2

题目:在恶意软件进入后继续搜索

其实单看题目根本不知道要干什么,其实这题就是承接上一题,发现是从网站上下载的,自然想到浏览器,所以我们转存所有chrome的进程,然后使用strings命令配合grep命令查找Rick And Morty下载的相关数据

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 memdump -n chrome -D ./dump 
1
strings ./dump/* | grep 'Rick And Morty season 1 download.exe' -C 10

image-20231003212236116

感觉题目就是提示flag的位置,但是flag好像和具体题目没什么关系

flag{Hum@n_I5_Th3_Weak3s7_Link_In_Th3_Ch@inYear}

10-Bit 4 Bit

题目:我们已经发现这个恶意软件是一个勒索软件。查找攻击者的比特币地址(其实就是说请逆向并分析)

1
vol.py -f OtterCTF.vmem --profile=Win7SP1x64 procdump -p 3720 -D ./dump

procdump:进程转储成可执行文件

直接搜索address,就可发现出flag

image-20231003213854852

或者根据题目中的提示“ransomware”,就直接找出flag

1
strings -e l  OtterCTF.vmem | grep -i -A 5 "ransomware"

image-20231003214135080

flag{1MmpEmebJkqXG8nQv4cjJSmxZQFVmFo63M}

11-Graphic’s For The Weak

题目:恶意软件的图形中有一些可疑之处

foremost分离可执行文件,图片上就是flag

image-20231003214517900

12-Recovery

题目:瑞克得把他的文件找回来!用来加密文件的随机密码是说明?