我的 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'