跳转至

EzTry2Fixit - NUAA SharkCTF 2021

这道题是在 Try2Fixit 几天后放出的简化版。

题目描述

EzTry2Fixit

心路历程

下载 EzTry2FixIt.zip,解压,得到 1.docx,双击打开:

Word 警告

Word 文档

直接把后缀名改成 .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,按照下图设置:

ARCHPR 主界面

点开始,报错了。

未勾选允许二进制模式

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

勾选允许二进制,使用 txt 文件作为明文

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

制作明文压缩包

查看 FlagInIt.zip 的压缩格式。

FlagInIt.zip 的压缩格式

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

压缩方式选「存储」

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

压缩包全家福

注意到两个压缩包中 hint.txt 的 CRC32 哈希值是一样的,这是 ZIP 已知明文攻击的一大特征。

ARCHPR Start~!

按照下图设置:

ARCHPR 设置图示

点击开始:

跑包

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

解密结果

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

保存解密结果

解压 FlagInIt_decrypted.zip。

可以看到,新得到的 hint.txt 和原来那份明文完全一样。

但 flag.png 却打不开:

flag.png

恢复图片文件

将 flag.png 拖入十六进制编辑器(本例中使用 010 Editor):

flag.png 文件头

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

正常 PNG 文件头

直接看 flag.png 的文件尾:

flag.png 文件尾

草,这不应该是 JPEG 图片的文件尾吗?!

随便找一张正常的 jpg 看看:

正常 JPG 文件头

正常 JPG 文件尾

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

将 JPG 文件头嫁接到 flag.png 上

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

还原结果

轻松得到 flag。

讨论

ZIP 已知明文攻击

其实即便没有 hint.txt 作为已知明文,光有一个 png 文件也可以进行 ZIP 已知明文攻击。因为 PNG 的文件头是固定的,这个文件头就可以作为一段已知明文。

ARCHPR 的性能问题

说点题外话。ARCHPR 优点是图形界面,好上手,但性能(计算速度)着实一般。应该是只做了单核优化,并不支持多核心一起计算,CPU 占用率一直上不去。

CPU 占用率偏低

CPU 只用了一个核心

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