2020 网鼎杯-白虎组 WriteUp
🏛️ 主办方信息
支持单位:国家网络与信息安全信息通报中心
联合主办:深信服科技股份有限公司、北京永信至诚科技股份有限公司
赛事支持:深圳市人民政府、广东省公安厅
Misc
hidden(文件附加隐写 + ZIP 爆破 + PNG 宽高篡改)
Foremost 提取隐藏文件

ZIP 文件需要爆破,密码是 1235

解压出来只有半张二维码,打开图片属性,修改图片高度为 133

扫描拿到二维码

hack(ZIP 明文攻击 + 重复异或 + 数据附加隐写 + Base32)

附件被加密了,打开压缩包可以看到有 sqlmap-1.4 文件

从 Github 上找到对应的历史版本下载下来进行明文攻击得到 0day.zip 和 xor 文件
对 xor 文件使用 xortools 爆破,得到密钥 WDCTF
用 WDCTF 逐字节异或 xor 文件,得到一个 PNG 图片
使用 010 打开图片,得到 qw91!25fzd$@!
用这个密码去解压缩 0day.zip 得到 MZWGCZ33MY2DMODBGU2DCLJTGJSWKLJUMQZTOLLCHAZDKLJQMI4GCMRQGU2TQNJSGN6Q====
Base32 解密得到 flag:flag{f468a541-32ee-4d37-b825-0b8a20558523}
Forensics
密码柜(VM 镜像取证 + KeePass 文件破解 + BitLocker 密钥恢复)

使用 DiskGenius 打开附件中的 .vmem 文件然后点击恢复文件

在用户 HP 的桌面找到密码 6s4mxkhvge

另一个附件 .kdbx 文件是由 KeePass 这个软件加密得到的
使用这个软件解密打开看到 main_key 这一栏带有附件,且为.kge 格式

将文件导出后解压,发现需要密码
直接右键 main_key 这一栏复制即可,得到密码 XLlArBkn
解压后得到 .vhdx 文件,将其挂载在电脑上,发现被 BitLocker 加密
用 Elcomsoft Forensic Disk Decryptor 这个工具进行恢复
只要在一个电脑上解锁过这个被 BitLocker 加密过的磁盘,就可以提取出来。例如前面的 DiskGenius 打开的图所示
选择第二个提取密钥

选择 .vmem 文件

成功提取出密钥

继续点击 Next 直到另存为 .evk 文件

接下来再选择第一个开始解密

在 Saved keys 处选择刚刚保存的 .evk 文件

点击下一步即可得到恢复密钥

利用得到的恢复密钥解锁加密的磁盘,得到一个自解压文件,在解压时会提醒

由于 aux 是 Windows 环境下的一种保留字,即使我们强行将其保存下来也无法对其进行操作,所以我们将其进行重命名处理,即可正常解压
解压后 010Editor 观察即可发现其为 PNG 文件,改后缀即可看到flag

Reverse
恶龙(动态调试 + 寄存器修改)

IDA 反编译,init() 是初始化
1 | int eff / unief = 100; // 战斗力 |

代码直接执行 dround() 函数,进去看看

菜单函数

先来看打小怪的代码,当战斗力与小怪相同时,必死。赢了则只能拿 1 金币,收益极低
1 | if (v2 == eff) |

再来看 BOSS 的代码,我们的 eff 战斗力需要超过一定的数值才能拿到部分 flag

我们的 eff 会被 mov 到 eax 寄存器中,cmp 是比较指令,记住三个判断 eff 的地址
1 | 0x4015f9 |

然后使用 Pwndbg 动态调试
1 | chmod +x hero |
先给这三处打上断点

然后运行程序输入 2 直接打 BOSS,这时候就断住了

修改 eax 寄存器的值,然后输入 c 继续
1 | set $eax = 6000000 |
可以看到这样就打过 BOSS 了,接下来继续选择 2 重复修改 eax 寄存器的值即可

再改两次后就拿到了 flag 的值
