Skip to content

为了简化宿主机使用pwntools和gdb调试docker中elf的流程,配合tmux进行分屏显示以达到与本机调试一样的效果

Notifications You must be signed in to change notification settings

Loora1N/GDB-Docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

GDB-Docker

在比赛中遇到C++或其他一些项目类的pwn题时,动态链接库过于繁杂。手动或写脚本使用patchelf在本地建立依赖均较为麻烦,且不能保证与题目所提供的docker内环境完全一致。因而如果能直接使用pwntools和gdb在宿主机调试docker环境中的pwn题将方便很多。

该脚本template旨在简化宿主机调试docker内的pwn题调试流程,提高工作效率。

Usage

调试效果类似本机调试gdb.attch()配合tmux,不过仍需注意一下两点

  • 参照模板修改自身dockerfile,需安装gdbserver和socat,利用watchdog.sh监听链接
  • 参考remote.py中的断点函数p()即可

Dockerfile修改指北

基本逻辑是在dockerfile中添加watchdog.sh,循环监控docker内的pwn题是否存在运行中的进程,然后使用gdbserver attach到对应进程上,参考代码如下:

RUN echo '#!/bin/bash\n\
while true; do\n\
    sleep 1\n\
    PID=$(pidof /app/URLQueryParser)\n\
    if [ -n "$PID" ]; then\n\
        gdbserver :1234 --attach $PID\n\
    fi\n\
done' > /app/watchdog.sh && \
chmod +x /app/watchdog.sh

这里的/app/URLQueryParser便是pwn题目的路径

剩余部分便是更改对应题目的start.sh,以确保watchdog.sh随docker同步启动,最后开放端口1234,以便于本地gdb链接

至于remote.py中的断点函数,更改对应的题目路径即可,gdb中需要的命令在gdb_source中定制更改

展示

效果图如下:

调试效果图

About

为了简化宿主机使用pwntools和gdb调试docker中elf的流程,配合tmux进行分屏显示以达到与本机调试一样的效果

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published