EzTry2Fixit - NUAA SharkCTF 2021¶
这道题是在 Try2Fixit 几天后放出的简化版。
题目描述¶

心路历程¶
下载 EzTry2FixIt.zip,解压,得到 1.docx,双击打开:


直接把后缀名改成 .zip,解压:
./
│ [Content_Types].xml
│
├─ word
│ │ document.xml
│ │ numbering.xml
│ │ styles.xml
│ │
│ ├─ embeddings
│ │ oleObject0.bin
│ │
│ ├─ media
│ │ FlagInIt.zip
│ │ hint.txt
│ │ image0.wmf
│ │
│ └─ _rels
│ document.xml.rels
│
└─ _rels
.rels
使用 tree /f 导出上述目录树。
径直进入 ./word/media 文件夹。
打开 hint.txt:
喵,这个文件和压缩包里面的是一样的噢~
但这个png看上去像披着羊皮的狼?
那个 image0.wmf 就是 Word 文档的图片,所以对做题没有帮助。
打开 FlagInIt.zip,发现里面有
flag.png*
hint.txt*
两个加密文件(* 号代表加密文件)。
那个 hint.txt 令人一头雾水:我现在连 png 都没拿到呢,哪有空管什么羊皮狼皮——显而易见,接下来的任务是先把 flag.png 抽出来。
简单看了一下,FlagInIt.zip 并不是伪加密。鉴于我们手上已经有一个 hint.txt 了,结合 hint.txt 给出的提示,推测应该是 ZIP 已知明文攻击。
ZIP 已知明文攻击¶
掏出我们的 ARCHPR,按照下图设置:

点开始,报错了。

勾选「允许使用二进制文件作为明文 ZIP 档案文件」,再开始,仍然报错。

个中原因是,ARCHPR 比较原始,需要将明文文件包在一个和密文压缩包压缩格式相同的 ZIP 文件中,即要先制作一个明文压缩包。
制作明文压缩包¶
查看 FlagInIt.zip 的压缩格式。

按照下图设置将 hint.txt 打包:

现在手上一共有俩压缩包了:

注意到两个压缩包中 hint.txt 的 CRC32 哈希值是一样的,这是 ZIP 已知明文攻击的一大特征。
ARCHPR Start~!¶
按照下图设置:

点击开始:

跑了十分钟,得到了结果:

点确定后,会自动提示保存解密后的压缩包:

解压 FlagInIt_decrypted.zip。
可以看到,新得到的 hint.txt 和原来那份明文完全一样。
但 flag.png 却打不开:

恢复图片文件¶
将 flag.png 拖入十六进制编辑器(本例中使用 010 Editor):

其实已经隐隐觉得这个 PNG 的文件头和其它 .png 的文件头有那么亿点点不一样:

直接看 flag.png 的文件尾:

草,这不应该是 JPEG 图片的文件尾吗?!
随便找一张正常的 jpg 看看:


对照着,给 flag.png 来一波移花接木:

保存。扩展名都不用改,直接打开:

轻松得到 flag。
讨论¶
ZIP 已知明文攻击¶
其实即便没有 hint.txt 作为已知明文,光有一个 png 文件也可以进行 ZIP 已知明文攻击。因为 PNG 的文件头是固定的,这个文件头就可以作为一段已知明文。
ARCHPR 的性能问题¶
说点题外话。ARCHPR 优点是图形界面,好上手,但性能(计算速度)着实一般。应该是只做了单核优化,并不支持多核心一起计算,CPU 占用率一直上不去。


在 Try2Fixit 的题解中,我们会用到一个性能强得多的命令行工具,它能够轻松跑满多核 CPU,拭目以待吧。