easy_dump

这是护网杯的一道取证题。
链接:https://pan.baidu.com/s/1Yx63Y5Rp-_v7td_hL01bSw


分析easy_dump.img

得到一个六百多MB的img镜像文件。
file下得不到什么。
用volatility内存取证分析工具,imageinfo查看镜像信息。

1
$ volatility -f easy_dump.img imageinfo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Volatility Foundation Volatility Framework 2.6
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/root/Documents/CTF/huwangbei/misc/easy_dump/easy_dump.img)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf8000403b070L
Number of Processors : 1
Image Type (Service Pack) : 0
KPCR for CPU 0 : 0xfffff8000403cd00L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2018-10-02 13:53:05 UTC+0000
Image local date and time : 2018-10-02 21:53:05 +0800

发现是windows内存镜像,并且可以看到版本信息。windows版本为Win7SP1x64,用pllist查看进程。

1
$ volatility -f easy_dump.img --profile=Win7SP1x64 pslist

1
2
3
4
5
6
Volatility Foundation Volatility Framework 2.6
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0xfffffa8009d05b30 explorer.exe 1244 1204 34 963 1 0 2018-10-02 13:21:07 UTC+0000
0xfffffa8007eb3b30 notepad.exe 2872 1244 1 57 1 0 2018-10-02 13:26:51 UTC+0000
0xfffffa8009fab170 DumpIt.exe 1056 1244 1 23 1 1 2018-10-02 13:53:04 UTC+0000

这里只列出了explorer、notepad、DumpIt,实际还有其他一些进程。
使用iehistorynotepad插件查看浏览器记录和记事本记录后并没有什么发现。
我们尝试把notepad这个PID为2872的进程dump下来看有没有什么线索。

1
$ volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2872 -D ./data

1
2
3
Volatility Foundation Volatility Framework 2.6
************************************************************************
Writing notepad.exe [ 2872] to 2872.dmp

通过strings命令查看进程中有无关于flag的提示。此处用到了-e选项:
-e –encoding = {s, S, b, l, B, L}:选择字符大小和排列顺序: s = 7-bit, S = 8-bit, {b, l} = 16-bit, {B, L} = 32-bit

1
$ strings -e l 2872.dmp | grep flag

1
2
3
4
flag{flag is not here,but I put an strange jpg for you,hope you like it :)} 
flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
flag{flag is not here,but I put an strange jpg for you,hope you like it :)}
Repairing the flags for file record 0x%1.

提示flag在一张奇怪的图片中,用filescan扫描一下文件列表寻找这张图片。

1
$ volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif'

1
2
3
Volatility Foundation Volatility Framework 2.6
0x000000002482c250 12 0 R--rwd \Device\HarddiskVolume1\Windows\System32\pngfilt.dll
0x000000002557b2b0 32 0 RW---- \Device\HarddiskVolume1\phos.jpg

找到了这张图片:phos.jpg,记下偏移0x000000002557b2b0,使用dumpfiles把这张图片dump出来。

1
$ volatility -f ./easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002557b2b0 --name -D ~/Documents


分析phos.jpg

打开这张照片没有发现任何有用信息,猜测是图片隐写。先用binwalk查看文件隐藏信息。

1
$ binwalk ~/Documents/phos.jpg

1
2
3
4
5
6
7
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, EXIF standard
12 0xC TIFF image data, little-endian offset of first image directory: 8
13367 0x3437 Unix path: /www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://
2238922 0x2229CA Zip archive data, at least v2.0 to extract, compressed size: 87797, uncompressed size: 1048576, name: message.img
2326869 0x238155 End of Zip archive

发现藏了一个zip压缩包,使用DD指令分离文件,提取这个zip。

1
$ dd if=~/Documents/phos.jpg of=~/Documents/t.zip skip=2238922 bs=1

解压之后是一个message.img镜像。


分析message.img

file下。

1
$ file message.img

1
message.img: Linux rev 1.0 ext2 filesystem data, UUID=34d27b8e-1aa5-441f-bfd9-bdc765cc4edd (large files)

看到是linux下的filesystem data,于是装载镜像。

1
2
$ bashmkdir /mnt/cdrom
$ mount -o loop message.img /mnt/cdrom


分析hint.txt

查看里面只有一个hint.txt文件,打开后发现第二个数几乎都是从10-269递增,然后第一位数增1,同样第一位也是从10一直增到269。但仔细查看就会发现,中间有不连续的数据存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
29 190
29 191
29 192
29 193
29 194
29 195
29 196
29 197
29 208
29 209
29 210
29 211
29 212
29 224

这容易联想到是个二维码,存在和不存在的数据代表二维码上的黑点和白点。于是利用matplotlib画散点图。

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
with open('hint.txt', 'r') as f:
save = f.readlines()
x = []
y = []
for t in save:
x.append(t.split()[0])
y.append(t.split()[1])
plt.axis('equal')
plt.scatter(x, y, s = 1, c = 'black', marker = 's')
plt.show()

可以得到二维码:

发现扫不出来,用ps反向一下就可以了。

得到Here is the vigenere key: aeolus, but i deleted the encrypted message。
用数据恢复软件例如R-studio很容易就能恢复被删除的文件:message.swp
文件最后有一串字符:yispywt!nidn_xirr_lhv_sszgy.
用之前得到的密钥aeolus维吉尼亚密码解密即可得到flag:
yeeeeet!just_find_and_solve.