【发布时间】:2020-09-16 22:43:19
【问题描述】:
我是新来的开发和寻求建议。
我的问题是:如何继续从一个终端提供输入并在另一个终端上调试我的程序?
我通常在有图形界面时使用 pwntools 中的 gdb.debug,但现在我只能通过 SSH 远程连接到运行二进制文件的机器,这意味着 gdb.debug 无法创建新终端。
我看到video of a demonstration 在 VIM 中使用该技术。我怎样才能做到这一点?
【问题讨论】:
我是新来的开发和寻求建议。
我的问题是:如何继续从一个终端提供输入并在另一个终端上调试我的程序?
我通常在有图形界面时使用 pwntools 中的 gdb.debug,但现在我只能通过 SSH 远程连接到运行二进制文件的机器,这意味着 gdb.debug 无法创建新终端。
我看到video of a demonstration 在 VIM 中使用该技术。我怎样才能做到这一点?
【问题讨论】:
如果您使用 SSH,gdb.debug 应该仍然可以工作,只要您将 context.terminal 设置为正确的值(例如 tmux)。
这是对类似question 的回复的复制和粘贴:
您可以使用pwnlib.gdb 与 gdb 进行交互。
您可以使用 gdb.attach() 函数: 来自文档:
bash = process('bash')
# Attach the debugger
gdb.attach(bash, '''
set follow-fork-mode child
break execve
continue
''')
# Interact with the process
bash.sendline('whoami')
或者你可以使用 gdb.debug():
# Create a new process, and stop it at 'main'
io = gdb.debug('bash', '''
# Wait until we hit the main executable's entry point
break _start
continue
# Now set breakpoint on shared library routines
break malloc
break free
continue
''')
# Send a command to Bash
io.sendline("echo hello")
# Interact with the process
io.interactive()
pwntools 模板包含让您开始使用 gdb 进行调试的代码。您可以通过运行pwn template ./binary_name > template.py 创建 pwntools 模板。然后你必须在运行 template.py 进行调试时添加 GDB arg:./template.py GDB。
如果你得到[ERROR] Could not find a terminal binary to use.,你可能需要在使用gdb之前设置context.terminal。
如果您使用 tmux,以下内容将自动在新的水平拆分窗口中打开 gdb 调试会话:context.terminal = ["tmux", "splitw", "-h"]
并使用新的 gdb 会话窗口垂直分割屏幕:context.terminal = ["tmux", "splitw", "-v"]
(要使用 tmux,请在您的机器上安装 tmux,然后只需键入 tmux 即可启动它。然后键入 python template.py GDB。
如果以上都不起作用,那么您可以随时启动脚本,使用ps aux,找到PID,然后使用gdb -p PID 附加到正在运行的进程。
您不需要使用 vim 来使用 pwntools 的 gdb 功能,就像那个人在您链接的视频中所做的那样,但这里有一个关于他所做的解释(无论如何 vim 也是一个不错的工具):
在 vim 中编辑他的 pwn 脚本时,这家伙首先执行了以下命令:
:!./%
:在vim中进入命令模式! 执行一个shell命令% 基本上是您当前在 vim 中编辑的文件的名称因此,如果您的漏洞利用脚本名为 template.py,则在 vim 中运行 :!./% 与在终端中运行 ./template.py 相同。这只是运行漏洞并进入交互模式。
这只是在 vim 中执行脚本的一种快捷方式。
后来,这家伙还使用:!./% GDB 来实际启动 pwntools gdb 会话。和运行python template.py GDB是一样的。
【讨论】: