【问题标题】:Debugging a program that is opened by pwntools调试 pwntools 打开的程序
【发布时间】:2020-08-09 04:03:00
【问题描述】:

我正在尝试为大学课程做一个 stackoverflow。我要利用的二进制文件有一个金丝雀,但是,有一种方法可以将该金丝雀泄漏到标准输出。金丝雀当然由一些随机字节组成,所以我不能只从程序输出到标准输出的字符串中读取它们。

出于这个原因,我正在使用 python 和 pwntools,例如 p.recv(timeout = 0.01).encode("hex")(我使用 pwntools 只是因为我不知道以十六进制格式读取输出的另一种方法,如果有更简单的方法我当然可以使用其他方法)

这或多或少可以按预期工作,我设法写入了经过金丝雀的内存区域。但是,我得到了一个段错误,所以我显然对我造成的 stackoverflow 有一些问题。我需要一种调试方法,例如在提供导致堆栈溢出的输入后查看堆栈。

现在不用多说,实际的问题是:我可以在 GDB 或其他可以显示堆栈内容的程序中调试我使用 pwntools(如 process("./myprog"))启动的进程吗?强>

我已经尝试在 python 中获取 pid 并使用 gdb attach 来附加到该 pid,但这不起作用。

注意:我试图利用的二进制文件具有 guid 集。不知道这是否重要。

【问题讨论】:

    标签: gdb stack-overflow pwntools


    【解决方案1】:

    您可以使用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"]

    (注意:我从来没有让这部分工作,所以如果它可以工作,请告诉我。告诉我你是否让 gdb 工作)。
    (要使用 tmux,请在您的机器上安装 tmux,然后只需键入 tmux 即可启动它。然后键入 python template.py GDB

    如果以上都不起作用,那么您可以随时启动脚本,使用ps aux,找到PID,然后使用gdb -p PID 附加到正在运行的进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2015-04-19
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多