技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
利用pwntools脚本联动内置gdb函数优雅的调试docker中的pwn程序
ZLSF
安全工具
529浏览 · 2025-04-15 11:47
返回文档
起源:
在CTF中的PWN模块中,我们时常需要用的到gdb来联动exp脚本调试pwn程序,在pwntools的内置函数gdb.attach()上与本地调试非常方便实现,但是本地环境与pwn程序编译时的原生环境还是有所差距,并且一些特殊架构如mips等,或者pwn程序使用了C++的库,利用pathcelf替换libc库就有点力不从心了。
在此之前我尝试过其他师傅的办法,其中最好用的pipe+ tmux 的组合,但是这个办法实测必须要先输入才能输出(pipe有阻塞的特性)。所以仍然不太好用。如果要是在docker内重新安装pwn环境+pwngdb插件会很麻烦(主要是pwngdb难以安装)。
所以我想了一个办法,能对任意docker能运行的镜像系统都能提供一个无缝调试pwn程序体验的办法。非常时候在做题的时候建立临时docker环境用来调试pwn程序。
本文内容截至2025年4月15日仍然有效。
步骤:
环境:ubuntu-24.04 + virtualbox7.1.6
前提:已经安装好基础pwn环境和docker环境。
在当前目录下创建Dockerfile文件,内容如下:
Bash
复制代码
使用docker构建镜像(请将当前用户加入docker用户组):
Bash
复制代码
创建docker容器并赋予一定权限还要开放端口:
在宿主机将pwn文件复制到docker中:
在docker中的/tmp目录下有一个run.sh文件和pwn文件,运行run.sh文件来启用pwn运行在端口9999:
在你的exp脚本中添加一下函数:
调用方法为:
和正常调试一样,运行脚本 :
gdbremote函数会弹出两个窗口,一个是gdbserver的不用管,另外一个是gdb这个和正常使用gdb.attach(p)是一样的,目前测试和本地调试几乎没有区别。在pause时需要先下断点再让exp运行,否则很有可能停不在你想停的地方。
gdb中使用b *0x??????然后c继续程序,然后才能让exp继续运行。
gdb通过CTRL + D退出后正常来说弹出的两个窗口都会关闭,此时可以重新运行脚本进行调试。
效果:
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
近期热点
一周
月份
季度
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:41700
2
一天
贡献值:24800
3
Yale
贡献值:24000
4
1674701160110592
贡献值:21800
5
1174735059082055
贡献值:16000
6
手术刀
贡献值:14000
7
Loora1N
贡献值:13000
8
bkbqwq
贡献值:12800
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
起源:
步骤:
效果:
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板