HackThisSite - Forensic Mission 3
Challenge
Forensic 3 — PapaSmurphey's Pizza
The local police just arrested a suspect believed to be the notorious
PapaSmurphey, an online pizza trader. A flash drive was recovered from the scene and was copied; poorly. As best as you can, examine the contents for any incriminating evidence on the suspect. This challenge has several steps. The completion password will look like this:HTS{the_answer}File Download / Password: (提交字段名
forensic3,POST 回关卡页自身)
状态:未通关(partially
verified),已走通从图片里切出被故意改坏的加密 RAR 这一步,
卡在归档密码与截断的归档上。不编造
HTS{...}。
素材清单
附件 forensic_3.rar 解开后是 flashdrive/ 下
8 个文件(7z t 报 Everything is Ok,rar
本身没坏):
1 | 49ZfDSNg.jpg 90658 680x992 JPEG(其实是一张三格漫画) |
siggies.txt
是一张文件签名/魔数对照表(TGA、MOV、MOF……),
题面用它给出提示:类型按魔数判断,不以扩展名为准。
一张 500×500 的灰度 JPEG 不可能有 10 MB。binwalk
直接给出结构:
1 | binwalk extracted/flashdrive/shh.jpg |
1 | 0 0x0 JPEG image, total size: 32346 bytes |
也就是说:第一张 JPEG 在 32346
字节处结束,文件最尾部还嵌了第二张
JPEG(205×80, 用视觉模型读出来是一个 GLOzMe 的
logo),两者之间有约 10.3 MB 的未识别数据。
这段数据的开头是:
1 | 5a 61 72 21 1a 07 00 Zar!.... |
Rar!\x1a\x07\x00 是 RAR4
的签名,这里的第一个字节被改成了 Z(0x5a),
正好对应题面那句 copied; poorly(原文把 poorly
加粗)。切出这段数据并把首字节改回 R(0x52):
1 | data = bytearray(open("extracted/flashdrive/shh.jpg", "rb").read()) |
再让 7-Zip 认它:
1 | 7z l -p- fixed.rar |
1 | ERROR: fixed.rar : Cannot open encrypted archive. Wrong password? |
修复后归档结构上被接受了(这是关键进展),但它是一个文件头加密的
RAR: 主头部标志位是
0x0080(MHD_PASSWORD,文件头本身被加密),所以在拿到密码之前连文件列表都读不出来。
(另外题面说拷得不好,这段归档在数据上也是不完整的,即使解密成功,能恢复的也只是前一部分。)
已确认的其它线索:
- 尾部那张 JPEG 是
GLOzMe的 logo(疑似嫌疑人的另一网名); legrandelibrary.xlsx的工作表是A1:AX45,样式表里有大量纯色填充(如FF00B050), 更像是一幅用单元格填色画的点阵图,而不是普通表格(sharedStrings里只有5X5、X两个串);- 其余素材:一张三格漫画、一份 9 页 PDF、一段 48kHz MP3。
用题目里出现的词做过的候选密码(GLOzMe/PapaSmurphey/pizza/5X5/legrandelibrary/Sam/bitcoin/shh
等) 在修好的归档上全部被拒:
1 | $ 7z l -pGLOzMe fixed.rar -> Cannot open encrypted archive. Wrong password? |
这几条候选是在修好签名之后测的(在坏签名上测会一律回
not an archive,那种结果没有意义,
这也是早点把签名修好的价值)。真正的密码应该还藏在素材里(xlsx
的点阵图、MP3 附加数据/帧间、 PDF
对象或另一张照片的内嵌数据),需要将它们逐个完全提取后串成链条。
从隐藏归档里提取的 rar2john 哈希是
$RAR3$*0*0e1577f1a4cbcbf2*b2915a6828ff978329bb5e6c1a07326f;
用 rockyou(14.3M)与大量定向词(含其它关卡已解出的答案)运行
john --format=rar-opencl,均未命中。
候选答案串也试过:把 HTS{You_captured_me!}(以及不带
HTS{}、大小写变体等共 6 种)提交到现行关卡时,
服务端明确回错:
1 | Error! Sorry, but you've entered an incorrect password. |
说明现行关卡要的不是这些串:必须靠破出归档密码来拿真答案。归档是文件头加密且被截断(copied poorly),
所以也可以考虑只恢复部分内容的路线(如 unrar r
的恢复模式)。
下一步(待办):
- 把
legrandelibrary.xlsx的单元格填充按 45×50 栅格渲染成图片再读,看是否有文字/图案; mp3:看帧间 LSB、附加数据、ffmpeg -i元数据与谱图;bitcoin.pdf:pdfid/pdf-parser找附加对象与 JS/嵌入文件;- 两张照片(漫画与 680×992 那张)做 LSB/附加数据/EXIF 复查;
- 拿到密码后
7z x,在解出的(可能不完整的)内容里找证据,拼成HTS{...}提交。 现成的中间产物都在<hts-workspace>/challenges/hts-forensic/3/(extracted/、carved.rar、fixed.rar、tail_embedded.jpg、xlsx/、xlsx_render*.png)。
Vulnerabilities
从闪存盘取证的场景里,拷贝的完整性本身就是证据的一部分: 本例的归档被改掉了一个签名字节、还被截断,靠魔数对照 + 字节级修复仍能还原出归档结构, 说明把文件混在图片里 + 改扩展名 + 改首字节这类手法只能阻碍直接双击查看。 需要保密的介质应整盘加密(如 BitLocker/LUKS),文件层面的伪装不构成保护。
未通关:已从 shh.jpg 切出并修复被改坏的