记一道红帽杯CTF隐写题浅学Volatility
Misc - Advertising for Marriage
题目下载
下载下来是一个后缀名为raw的文件。通过学习文章得知:
内存取证三项CTF赛题详解 - FreeBuf互联网安全新媒体平台
CTF中文件包含的一些技巧 - i春秋学院 - 博客园
这种raw文件是内存取证工具Dumpit提取内存生成的内存转储文件,可以使用类似Volatility等内存取证分析工具进行取证分析。
【1】
volatility imageinfo -f 文件名
得知操作系统是WinXPSP2x86
【2】
volatility psscan -f 文件名 --profile=WinXPSP2x86
查看所有进程,通过所有进程来查看是否有可疑进程出现,进行进一步取证。
【3】
volatility notepad -f 文件名 --profile=WinXPSP2x86
notepad这里有一个提示,????needmoneyandgirlfirend
【4】
volatility -f 文件名 --profile=WinXPSP2x86 memdump -p 332 -D ./
暂时参悟不到hint,参考了这篇文章,
提取332号mspaint.exe(画图)进程,将332.dmp重命名为332.data,
在kali里安装gimp(apt-get install gimp)
然后把332.data用Gimp打开,调节宽高位移,在这里卡了好久,如图位置得到倒立的菠萝头:
进行一次垂直翻转,得到四个字母(我用红笔标出来了):
所以正确的hint为:b1cxneedmoneyandgirlfirend
【5】
volatility -f 文件名 --profile=WinXPSP2x86 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
查看内存镜像中的图片文件,提取其中的vegetable.png
volatility -f 文件名 --profile=WinXPSP2x86 dumpfiles -Q 0x000000000249ae78 -n --dump-dir=./
【6】
把输出的文件后缀改为png,得到一张卑微猫猫头,修改高度可以看见模糊的flag
fuzz了半天没提交成功。。很多师傅都卡在这里了,猜不动啦。
用了impakho师傅的脚本,成功爆破出来了图片正确的宽(287)高(211):
import os import binascii import struct img = open("22.png", "rb").read() for w in range(1024): for h in range(1024): data = img[0xc:0x10] + struct.pack('>i',w) + struct.pack('>i',h) + img[0x18:0x1d] crc32 = binascii.crc32(data) & 0xffffffff if crc32 == struct.unpack('>i',img[0x1d:0x21])[0] & 0xffffffff: print(w, h) print(hex(w), hex(h)) open("vegetable_new.png", "wb").write(img[:0xc] + data + img[0x1d:]) exit()
【7】
把正确宽高的猫猫头丢到stegsolve里,往右巴拉巴拉可以看到上方有可疑数据,疑似lsb隐写。
剩下的就是老生常谈了,lsb脚本一把梭,
密码就是b1cxneedmoneyandgirlfirend:
得到一串base64,解码得到:
Virginia ciphertext:gnxtmwg7r1417psedbs62587h0
提示维吉尼亚密码,密钥填写bcxneedmoneyandgirlfirend(去掉1):