跳转至

强网杯 2022 Quals Writeup

864 个字 12 行代码 1 张图片 预计阅读时间 3 分钟

Abstract

misc 很少,只做了碟影重重一道题,纯纯的傻逼题。一层一层毫无意义地硬套娃,做了好长好长时间,最后差几分钟没做出来,真的破防

(╯°□°)╯︵ ┻━┻


碟影重重

首先题目给了一个加密压缩包和一个流量包

压缩包结尾附加信息 Password is md5(api address)

流量包看不出什么名堂,直到给了第一个 hintvmess 流量。于是就去翻看 vmess 的文档,结果文档写的不仅💩一样还全 ** 是错的。被迫看 v2ray 的源码,但 v2ray 的源码还是 go 写的,这难看的语言真的要给我看吐了。翻找到了 rust 写的 leaf 项目,里面有 vmess 相关的东西,看的很舒适。最后看源码看出来的 vmess 协议内容在 vmess 协议 页面

根据协议详细信息解码请求流量,得到:

GET /out HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: curl/7.75.0
Accept: */*
Connection: close

解码响应流量得到一个很长的 html,里面实际作用是用 base64 解码得到一个 doc 文档并下载。通过解码或者打开 html 都可以得到这个 doc 文档。不过其中包含了病毒宏,可能会被防火墙清理(mac 不会)

将扩展名改为 .zip 并解压可以得到宏(或者进入 Word 打开宏编辑器)分析了好久那一堆混淆的宏,没什么进展,大概就是执行了一个 dll,找到后逆也没逆到什么

考虑到防火墙会自动清理,以及宏的写法和 doc,这应该是一个老病毒,于是结合 dll sha256 值搜索了一下,果然得到了分析:https://any.run/report/0d7aa23a72d22dcf47f8723c58d101b3b113cbc79dd407a6fac0e65d67076ea1/2211f4a0-81e4-432d-87a8-c7c285a5a919

里面就有这个 api address:api.ipify.org,md5 后得到密码 08229f4052dde89671134f1784bed2d6

解压后得到一个二进制文件,里面可以看到 "GobThis is a Gob File!Time2022-07-19 14:49:56PNG File",是 go 的序列化文件,使用 drosseau/degob 反序列化,得到 png 的逐字节值

不过这些值写入二进制文件后并不能打开图片,又卡住了,有了第三个 hint:为了保证数据的机密性,他把数据随机打乱了。很无语,就纯纯的傻逼题,虽然说有时间种子的暗示,但并不强烈,纯纯傻逼

go 写一个随机打乱的程序,按照打乱的逻辑反过来,就可以恢复 png 图片。不过写令我反感的 go 代码有够烦的

图片打开之后是 flag not here 文字。又是很无语,到这了还 ** 套娃

丢到 stegsolve 里,看不出什么东西,red green plane 有奇怪的锯齿状。后来发现 alpha 通道都是有值的,可能会通过 alpha 通道传信息(不过这时比赛已经快结束了)

PIL 提取 alpha 通道的值,果然有很多不同值,不过大部分还是 0xff 0x00,所以考虑去掉 0xff 0x00 看一看,将图片展开成一维,然后剔除 ff 00 得到字节形式的一堆 flag

img = Image.open("flag.png")
arr = np.array(img)
width, height = img.size
bytes(arr[:,:,3].reshape(width*height)).replace(b"\xff", b"").replace(b"\x00", b"")
# b'flag{898161df-fabf-4757-82b6-ffe407c69475}flag{898161df-f...
最终 flag: flag{898161df-fabf-4757-82b6-ffe407c69475}

细数一下这题有几层:

  1. 解码 vmess 流量
  2. 找到 doc 中的宏
  3. 通过分析宏找到病毒调用的 api 地址
  4. 解码 gob 文件
  5. 通过时间随机种子恢复乱序的 png 文件
  6. png alpha 通道隐写

很多步骤没有充足的提示,而且很多是纯纯没必要的硬套。没有难题可以不出,不要用这种题恶心选手……


最后更新: 2022年9月21日 01:16:49
创建日期: 2022年9月21日 01:16:49
回到页面顶部