在linux上运行带有pwn模块的python脚本时如何使用调试器



我的linux系统中有一个文件。我创建了一个python脚本,其中有一些pwn方法可以与之交互像这样:

from pwn import *
import sys
def main():
io = process("../../challenges/solveit")
io.recvline()
payload=b'A'*20
io.sendline(payload)
io.interactive()
if __name__ == "__main__":
main()

我想在运行py程序时检查地址值,就像在gdb中调用x/20wx $ebp-0x40一样。我该怎么做呢?

我是linux的新手,刚刚学习了gdb调试器。有人能解释我如何检查地址值,而运行一个漏洞脚本?gdb可以和pwn一起使用吗?

您可以使用gdb.attach方法

pwnlib.gdb.attach(target, gdbscript='', exe=None, gdb_args=None, ssh=None, sysroot=None, api=False)

在新终端中启动GDB并连接到目标。

查看文档:https://docs.pwntools.com/en/stable/gdb.html#pwnlib.gdb.attach

对于您的代码,只需添加一行gdb.attach(io)
@@ -7,6 +7,7 @@ def main():
io.recvline()
payload=b'A'*20

+    gdb.attach(io)
io.sendline(payload)
io.interactive()

同样,你可能会得到像

这样的错误
[ERROR] Could not find a terminal binary to use. Set context.terminal to your terminal.

这是因为您没有为pwntools设置启动gdb的终端。只需在导入pwntools后添加context.terminal = <your favorite terminal>,如

from pwn import *
context.terminal = 'kitty'

import pwn
pwn.context.terminal = 'kitty'

最新更新