SJTU-CTF 2019 WriteUp Misc & Reverse
Misc
Sqlmap yibasuo
200 pts, 36 solved
The hacker stole the flag in the database through sqlmap
得到
.pcapng
格式的抓包数据文件,用 wireshark 打开使用
http contains sqlmap
作为 filter,过滤得到 sqlmap 请求列表观察发现属于 sqlmap 二分法逐个匹配字符的盲注模式,且请求数据都为 chunked 编码
更改 wireshark 设置,开启
Reassemble chunked transfer-coded bodies
,分析 POST 数据,POST 数据中都有统一格式,例如:
1 | name=hhh'||(SELECT 'FGtK' FROM DUAL WHERE 7118=7118 AND 9632=IF((ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM test.flag ORDER BY flag LIMIT 0,1),38,1))>112),SLEEP(1),9632))||'&pass=xxx |
其中 38 是目前匹配的字符所在位置,112 为 ASCII 码,一定次数的比较之后会出现类似于 !=112
的请求,此处的 112 即为匹配出的字符 ASCII 码
- 应用过滤器
urlencoded-form.value contains "!=" && urlencoded-form.value contains "flag"
逐字匹配出 flag: 0ops{de7a60237960df7af6fc0af9563cbbcb}
Dog
400 pts, 17 solved
I go on a trip with my GF, lol. Can you find our secret?
下载
1a438be9c75e4c54a48f57dfcf503f41
,文件以50 4B 03 04
开头,说明为 zip 压缩包,更改后缀名为.zip
打开压缩包,发现内容已被加密,然而先前以 16 进制打开时却能看到
flag.txt
的明文内容,说明是伪加密;将两个核心目录区的加密标记位改为 0,再打开文件,发现加密已经消失
解压得到
flag.txt
和flag3.zip
,然而flag.txt
中并不是真正的 flagflag3.zip
为加密压缩包,用 010Editor 打开发现末尾有多余的 32 个字符O5CWYYZQNVSV6MS7JU3V6U3QIE2A====
,识别为 base32,解码后得到密码:wElc0me_2_M7_SpA4
flag3.zip
解压得到small
文件夹如下,打开第一个文件,发现exif
字符串,说明是图片,使用cat flag* > small.jpg
合并得到完整图片
- 使用
binwalk
发现新图片中藏有加密压缩包,图片中有文字Where am I
,右上角有文字 XX.XXXXXX,XXX.XXXXXX(经纬度),指明了压缩包密码格式
- 从图片 EXIF 信息中得到 GPS 位置: 30.254137,120.147965(建议使用工具获取原始数据以避免误差),解压再次得到假的
flag.txt
和加密压缩包flag.zip
flag.zip
中备注密码是 QQ 号,然而看样子并不能用社工,但可估计在 5~11 位,故用 ARCHPR 暴力破解得到密码:44174798
,解压得到flag1.jpg
- 仔细观察发现图片中划横线处有隐藏文字,调整图片,看清文字为 flag:
0ops{k1ll_s1nGle_D0g}
(单身狗保护协会表示强烈谴责)
Weird Logo
下载压缩包,解压得到
logo.png
利用
Stegsolve
探测 RGBA 最低比特位,发现一堆黑色方块
- 分离 RBGA 最低位的四张图片,合成得到一个二维码,扫描得:
secret: I'm_th3_k3y_t0_th3_f14g
binwalk
扫描logo.png
,发现 png 文件后还藏有信息,分离,观察发现PK
反转后是 zip 压缩包特征码KP
(倒置的 LOGO 也暗示了这一点),需要整体反转
- 反转后得到一个带密码的压缩包,输入扫描二维码得到的密码,解压得到
flag.txt
,打开得到 flag:0ops{LSB_and_reversed_ZIP_b2c6490f523a9045}
Anti Hack 01
200 pts, 23 solved
We are tracking a super hacker, but first we need to get some evidence.. Can you find the secret in his memory?
Hint1: Absolutely you cant handle it by yourself without some tools…
- 可知是内存取证题,下载 memory dump,使用 volatility 进行分析,首先分析镜像信息:
1 | volatility -f antihack01.raw imageinfo |
可以看到可能性最大的架构是 WinXPx86
- 查看进程列表:
1 | volatility -f antihack01.raw --profile=WinXPSP2x86 pslist |
可以看到比较可疑的进程有 notepad.exe
和 mspaint.exe
- 扫描可疑文件:
1 | volatility -f antihack01.raw --profile=WinXPSP2x86 filescan |
发现桌面有一个 flag.txt
- 导出
flag.txt
:
1 | volatility -f antihack01.raw dumpfiles -D ./ -Q 0x00000000021cff90 |
good job, but flag are not here.
(好,被耍了)
- 看看屏幕截图:
1 | volatility -f antihack01.raw screenshot -D ./ |
可以看到最后面的窗口应该是 flag.txt
的记事本,左边是导出内存数据用的 DumpIt.exe
,右边是画图软件 mspaint.exe
- 导出
mspaint.exe
的数据:
1 | volatility -f antihack01.raw memdump -p 1368 -D ./ |
- 将导出的
1368.dmp
重命名为1368.data
,用 GIMP 以“原始图像数据打开”,调节“高度”、“宽度”和“位移”三个属性,直到看见清晰的图像:
电脑屏幕常见分辨率为 1920 * 1080,猜一猜也是不错的办法
- 稍微处理一下图像,可以看到出题者确实是在画图软件里画出了 flag:
flag: 0ops{volat1l1ty_1s_awe3ome}
Anti Hack 10
250 pts, 8 solved
In anti-hack01, we found something in his memory! So we searched his computer. Can you find the secret in his ext4 disk?
Hint1: superblock
解压得到
disk.img
,尝试挂载,失败尝试用
fsck.ext4
修复,失败;使用debugfs
分析,提示Bad magic number
,用hexedit
打开,查看magic number
所在位置,将EF 53
改为53 EF
挂载仍然失败,
debugfs
提示superblock is corrupt
superblock 的位置在 0x400,备份块的位置在 0x8000000, 0x18000000, 0x28000000… 将第二个备份块的数据直接覆盖 superblock,
debugfs
提示Bad magic number
,将magic number
从EF 53
改为53 EF
再用debugfs
打开,这次仍然报错但已经成功打开使用
ls
浏览目录内容,进入用户目录查看.bash_history
中的命令历史:
1 | ➜ antihack10 debugfs disk.img |
- 尝试查看
/etc/.flag
但找不到文件,进入/etc
目录,发现 vim 临时文件.flag.swp
,文件内容是一串 base64 字符串,解密后得到 flag:0ops{V1m_1S_n0t_4Af1}
1 | debugfs: cat .flag.swp |
42
250 pts, 7 solved
1.根据题目提示:The answer to life, the universe and everything ...
,进行搜索,发现最近一则数学家将 42 表示为三个立方和形式的新闻,输入三个立方和的底数:
1 | -80538738812075974 80435758145817515 12602123297335631 |
2.得到 flag: 0ops{12499142631077172}
当然也可以用 Go 语言逆向求解
Reverse
Snake
查看文件内容,判断为
.pyc
文件,即 Python 代码经过编译的文件,进行反编译将反编译得到的随机字符变量名替换成相应字符串:
1 | def myFunc(parameter): |
3.根据程序逻辑推出 passwd
为 e4sy_py_dec0mpi1e
4.将 passwd
作为参数,根据程序输出得到 flag: 0ops{8122a07872547d12439f8086ebc2957a}
References
SJTU-CTF 2019 WriteUp Misc & Reverse
https://blog.gpx.moe/2020/02/17/SJTU-CTF-2019-WriteUp-Misc-Reverse/