这是护网杯的一道取证题。

链接: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

这里只列出了 explorernotepadDumpIt,实际还有其他一些进程。

使用 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()

可以得到二维码:

easy_dump_1

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

easy_dump_2

得到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.