
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Pwndocker是一个专为CTF(Capture The Flag)竞赛中Pwn方向设计的Docker环境,基于phusion/baseimage:master-amd64(修改版Ubuntu 20.04基础镜像)构建。该镜像集成了各类漏洞利用开发工具、调试插件及多版本Glibc库,旨在为CTF选手提供开箱即用的Pwn环境,简化漏洞利用代码编写、调试及多版本libc兼容性测试流程。
包含CTF Pwn开发所需的全套工具,覆盖漏洞分析、利用编写、调试等全流程。
内置多个常用Glibc版本,满足不同题目对libc版本的需求,无需手动编译配置。
无需复杂环境配置,通过简单Docker命令即可启动环境,支持本地文件挂载和端口映射。
启动容器并挂载当前目录下的工作文件夹:
shelldocker run -d \ --rm \ -h ${ctf_name} \ # 设置容器主机名(建议与题目名称一致) --name ${ctf_name} \ # 设置容器名称(建议与题目名称一致) -v $(pwd)/${ctf_name}:/ctf/work \ # 挂载本地工作目录到容器内/ctf/work -p 23946:23946 \ # 映射调试端口(IDA调试服务器默认端口) --cap-add=SYS_PTRACE \ # 允许GDB调试(必要权限) skysider/pwndocker
进入运行中的容器:
shelldocker exec -it ${ctf_name} /bin/bash
说明:
${ctf_name}需替换为实际题目名称(如pwn100),本地工作目录$(pwd)/${ctf_name}需提前创建。
| 工具名称 | 功能描述 |
|---|---|
| https://github.com/Gallopsled/pwntools | CTF框架和漏洞利用开发库,提供便捷的交互、漏洞利用生成功能 |
| https://github.com/pwndbg/pwndbg | GDB插件,优化调试体验,专注于底层开发、***和漏洞利用所需功能(如堆结构可视化、ROP链生成等) |
| https://github.com/scwuaptx/Pwngdb | 针对Pwn优化的GDB增强插件,补充堆调试、内存布局查看等功能 |
| https://github.com/JonathanSalwan/ROPgadget | ROP利用辅助工具,支持搜索二进制文件中的gadget并生成ROP链 |
| https://github.com/inaz2/roputils | Return-oriented Programming(ROP)开发工具包 |
| https://github.com/david942j/one_gadget | 搜索execve('/bin/sh', NULL, NULL)相关gadget的工具,支持amd64和i386架构 |
| https://github.com/angr/angr | 跨平台二进制分析框架,支持自动漏洞发现、路径分析等 |
| https://github.com/radare/radare2 | 二进制文件分析工具,支持反汇编、调试、静态分析等 |
| https://github.com/david942j/seccomp-tools | seccomp策略分析工具,用于检测程序的系统调用过滤规则 |
| linux_server[64] | IDA 7.0 Linux调试服务器,支持远程调试二进制文件 |
| https://tmux.github.io/ | 终端复用工具,支持多窗口管理,提升调试效率 |
| ltrace | 跟踪程序的库函数调用 |
| strace | 跟踪程序的系统调用 |
默认编译的Glibc路径为/glibc,包含以下版本:
| 版本 | 说明 |
|---|---|
| 2.19 | Ubuntu 12.04默认libc版本 |
| 2.23 | Ubuntu 16.04默认libc版本 |
| 2.24 | 引入file结构体vtable检查机制 |
| 2.27 | Ubuntu 18.04默认libc版本 |
| 2.28~2.30 | 较新版本libc |
| 2.31 | Ubuntu 20.04默认libc版本(内置系统libc) |
方法1:使用patchelf修改程序解释器
shell# 复制目标libc版本的ld.so到临时目录 cp /glibc/2.27/64/lib/ld-2.27.so /tmp/ld-2.27.so # 修改程序的动态链接器为目标ld.so patchelf --set-interpreter /tmp/ld-2.27.so ./test # 运行程序(需指定libc路径) LD_PRELOAD=./libc.so.6 ./test
方法2:通过pwntools指定ld和libc
pythonfrom pwn import * # 直接指定ld.so路径和libc路径 p = process(["/path/to/ld.so", "./test"], env={"LD_PRELOAD":"/path/to/libc.so.6"})
当使用非系统默认libc版本运行程序时,可能遇到依赖库缺失(如libselinux.so.1)的问题。以下以glibc 2.28为例说明解决方法:
shellroot@pwn:/ctf/work# /glibc/2.28/64/ld-2.28.so /bin/ls /bin/ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
解决步骤:
shellcp /lib/x86_64-linux-gnu/libselinux.so.1 /glibc/2.28/64/lib/ cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 /glibc/2.28/64/lib/
GLIBC_2.30' not found),需从对应libc版本的系统中复制依赖库。例如,从Ubuntu 18.04(glibc 2.27)复制兼容版本:
shell# 启动Ubuntu 18.04容器 docker run -itd --name u18 ubuntu:18.04 /bin/bash # 复制依赖库到本地 docker cp -L u18:/lib/x86_64-linux-gnu/libselinux.so.1 . docker cp -L u18:/lib/x86_64-linux-gnu/libpcre2-8.so.0 . # 复制到目标libc目录 docker cp libselinux.so.1 pwn:/glibc/2.28/64/lib/ docker cp libpcre2-8.so.0 pwn:/glibc/2.28/64/lib/
验证:
shellroot@pwn:/ctf/work# /glibc/2.28/64/ld-2.28.so /bin/ls -l /
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务