「配枪朱丽叶。」

RootのCTF学习笔记。

记一道红帽杯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里安装gimpapt-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):

得到flag:d7f1417bfafbf62587e0