内存取证
2019Redhat CTF
Advertising for Marriage
#查看镜像信息:
$ volatility -f 1.raw imageinfo
Volatility Foundation Volatility Framework 2.5
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
AS Layer1 : IA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/home/yulige/Desktop/1.raw)
PAE type : PAE
DTB : 0xaf9000L
KDBG : 0x80545ce0L
Number of Processors : 1
Image Type (Service Pack) : 2
KPCR for CPU 0 : 0xffdff000L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2019-10-31 07:15:35 UTC+0000
Image local date and time : 2019-10-31 15:15:35 +0800
#查看进程
$ volatility -f 1.raw --profile=WinXPSP2x86 psscan
#发现有mspaint.exe和notepad.exe,pid分别是332和1056,将其dump出来
$ volatility -f 1.raw --profile=WinXPSP2x86 memdump -p 332 --dump-dir=./
$ volatility -f 1.raw --profile=WinXPSP2x86 memdump -p 1056 --dump-dir=./
然后在notepad进程dump出来的东西里面去查找字符串,找到:
hint:????needmoneyandgirlfirend
前面四个问号应该是掩码,先不管这个。
然后根据mspaintdump出来的bmp文件改后缀为data,参考:https://segmentfault.com/a/1190000018813033然后将分辨率改为1280*1024,位移改为770000左右可以看到一个图。
因为是反过来看的所以是b1cx,然后加上前面的hint,结合起来就是b1cxneedmoneyandgirlfirend。
$ volatility -f 1.raw --profile=WinXPSP2x86 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
Volatility Foundation Volatility Framework 2.5
0x00000000020d5190 1 0 R--rwd \Device\HarddiskVolume1\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\Administrator.bmp
0x000000000247c1a8 1 0 R--rwd \Device\HarddiskVolume1\WINDOWS\Web\Wallpaper\Bliss.bmp
0x000000000249ae78 1 0 R--r-- \Device\HarddiskVolume1\Documents and Settings\Administrator\桌面\vegetable.png
0x0000000002511c70 1 0 R--rwd \Device\HarddiskVolume1\WINDOWS\ime\IMJP8_1\DICTS\imjpgn.grm
# 可以看到桌面上有一个vegetable.png,将它dump出来。
$ volatility -f 1.raw --profile=WinXPSP2x86 dumpfiles -Q 0x000000001efb29f8 -n --dump-dir=./
拿到图片之后发现crc32校验过不去,用网上找的脚本跑一下,改高度。
参考链接:https://www.cnblogs.com/WangAoBo/p/7108278.html
# -*- coding: utf-8 -*-
import binascii
import struct
crc32key = 0xB80A1736
for i in range(0, 65535):
height = struct.pack('>i', i)
#CRC: CBD6DF8A
data = '\x49\x48\x44\x52\x00\x00\x01\x1F' + height + '\x08\x06\x00\x00\x00'
crc32result = binascii.crc32(data) & 0xffffffff
if crc32result == crc32key:
print ''.join(map(lambda c: "%02X" % ord(c), height))
改完高度是:
然后用ps锐化处理,但是后几位实在是看不清。没办法。太佛了。
用zsteg跑一下,发现有东西,但是dump不出来,想到是lsb带密码的加密,密码应该就是hint。
然后用脚本解密出来之后是:VmlyZ2luaWEgY2lwaGVydGV4dDpnbnh0bXdnN3IxNDE3cHNlZGJzNjI1ODdoMA==
解密base64:Virginia ciphertext:gnxtmwg7r1417psedbs62587h0
拿去在线网站爆破密钥恢复明文试试,毫无卵用。
然后突然想到上面的那个打码的图片,好像也有1417的样子,维吉尼亚是不会变数字的,那么如果数字的位置不变的话。那么把{}改成is,位数好像刚好对的上,1417的位置也刚好对的上。
然后如果猜测是对的话,那么前六位的密钥是bcxnee。这个bcxnee不就是刚好刚刚hint把数字去掉么,脑洞大开,想到密钥就是hint去掉前面那个1
不知道是不是,带flag格式交一下试试,对了。
flag{d7f1417bfafbf62587e0}
点击数:191