前言
网传题解是通过printf的%08x,依次dump出栈中内容,再与传入内容进行比较,以此确定传入内容在栈中的位置。
实际上,IDA是个十分强大的工具,可以通过IDA静态分析出位置
实战
buf长100字节,位于esp+20
双击buf进入栈视图
发现写入的数据处于栈的第10位
再去查看要写入的数据
双击进入bss段,发现要写入的数据是DWORD,也就是4字节
四字节正好使用%n (hn是写入两字节,hhn是写入一字节,lln是写入八字节)
再根据%$n特性,即可构造出payload
bss=0x0804c044
payload=p32(bss)+b'%10$n'
p.sendline(payload)
p.sendline(b'4') #因为p32是四个字符
注意
%5$n=%x%x%x%x%n
后续
还在别人的博客发现了新的方法,等下次有时间更新