【问题标题】:How to give input while debugging exploit in gdb如何在 gdb 中调试漏洞利用时提供输入
【发布时间】:2020-09-16 22:43:19
【问题描述】:

我是新来的开发和寻求建议。

我的问题是:如何继续从一个终端提供输入并在另一个终端上调试我的程序?

我通常在有图形界面时使用 pwntools 中的 gdb.debug,但现在我只能通过 SSH 远程连接到运行二进制文件的机器,这意味着 gdb.debug 无法创建新终端。

我看到video of a demonstration 在 VIM 中使用该技术。我怎样才能做到这一点?

【问题讨论】:

    标签: vim terminal gdb exploit


    【解决方案1】:

    如果您使用 SSH,gdb.debug 应该仍然可以工作,只要您将 context.terminal 设置为正确的值(例如 tmux)。

    如何使用 pwnlib.gdb

    这是对类似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 解释

    您不需要使用 vim 来使用 pwntools 的 gdb 功能,就像那个人在您链接的视频中所做的那样,但这里有一个关于他所做的解释(无论如何 vim 也是一个不错的工具):

    在 vim 中编辑他的 pwn 脚本时,这家伙首先执行了以下命令:

    :!./%
    
    • :在vim中进入命令模式
    • ! 执行一个shell命令
    • % 基本上是您当前在 vim 中编辑的文件的名称

    因此,如果您的漏洞利用脚本名为 template.py,则在 vim 中运行 :!./% 与在终端中运行 ./template.py 相同。这只是运行漏洞并进入交互模式。

    这只是在 vim 中执行脚本的一种快捷方式。

    后来,这家伙还使用:!./% GDB 来实际启动 pwntools gdb 会话。和运行python template.py GDB是一样的。

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多