第三届红帽杯线上赛Writeup
PWN
three
IDA打开之后,函数名都是sub_xxx
,然后通过nc官方部署的程序(或本地在程序所在目录创建flag文件后),获得程序中会出现的字符串定位到了重要函数,我用的是字符串Maybe is good
。
贴出来一下重要函数对应的内存地址:
函数名(已重命名) | 内存地址 |
---|---|
main | 0x08048CA8 |
load_flag | 0x080488C5 |
Maybe_is_good | 0x0804897E |
main_method | 0x08048B5C |
四者结构如图:
load_flag
里面需要加载flag文件,如果没有就exit,也就是一开始无法本地打开原因。
Maybe_is_good 里面没有特别的,关键在main_method,先贴出完整代码(以重名部分函数&注释)
gdb调试:’very much’ 后输入 ‘aaa’,’tell me’ 后输入 ‘bbbbbbbbbbb······’。可以看到eax被写入了’aaa’,ecx被写入了’bbbbbbbbbbbbbbbbbbb····’
然后就是第22行代码,看不懂就查汇编,对应的汇编是call eax
。就是当eax是函数来调用。结合前面的eax会被覆写为输入值,就可以进行ROP。
攻击大致流程如下:
- eax被覆写为payload1
- 写入payload2
- call eax
- int80_call
1 | #!/usr/bin/python2 |
EXP解释
- 13、21行两个数值可在注释范围内调整
- payload是交换ecx、esp两个寄存器的值
- layout里面是gadget,向int_80传参
- int_80的作用类似于system,具体看这里
最后:官方wp解法是交换ecx、esp的内容之后,利用返回值是1
还是2
,来逐个字节爆破得出flag。
MISC
Advertising for Marriage
内存取证题目。题目给出的是raw文件,这个文件不是图片的那个raw。。。初次之外内存取证还有dmg文件。利用的分析工具最主要是volatility
。
首先查看镜像信息:volatility -f Advertising\ for\ Marriage.raw imageinfo
使用 WinXPSP2x86
预设。然后就是查进程:volatility -f Advertising\ for\ Marriage.raw --profile=WinXPSP2x86 pslist
存在记事本进程,查一查有什么:volatility -f Advertising\ for\ Marriage.raw --profile=WinXPSP2x86 notepad
提示:hint:????needmoneyandgirlfirend
扫描所有png文件:volatility -f Advertising\ for\ Marriage.raw --profile=WinXPSP2x86 filescan|grep png
找到一张 png
图片:vegetable.png
。导出图片:volatility -f Advertising\ for\ Marriage.raw --profile=WinXPSP2x86 dumpfiles -D . -Q 0x000000000249ae78
图片无法显示,报错:IHDR: CRC ERROR
。
估计图片尺寸被修改了。
用脚本计算图片实际长度和宽度,并且生成修复后的图片。
1 | import os |
用 Stegsolve
查看图片,找到模糊的 flag
,一般情况较难恢复。同时,也发现 lsb
有点东西。
解密需要密钥,密钥为上面记事本找到的提示:????needmoneyandgirlfirend
,需要魔改工具爆破前 4 字节。
爆破得到密钥 b1cxneedmoneyandgirlfirend
,这里给出自己写的破解脚本,需要把lsb加密库
clone 下载,然后把脚本丢里面运行
1 | #coding:utf-8 |
解密图片隐写信息,得到字符串:VmlyZ2luaWEgY2lwaGVydGV4dDpnbnh0bXdnN3IxNDE3cHNlZGJzNjI1ODdoMA==
。
base64
解码得到:Virginia ciphertext:gnxtmwg7r1417psedbs62587h0
。
然后再使用在线维吉尼亚密码解密:密钥b1cxneedmoneyandgirlfirend
解密得到: flagisd7f1417bfafbf62587e0
。