一键搭建调试 pwn 题的 docker 环境。
题目放在 ./challenge
目录中,通过 docker-compose 启动时,该目录会被映射到容器中的 /challenge
目录。
不同容器之间共享工作目录,方便切换环境。
git clone --recursive https://github.com/the-soloist/pwn-env-docker
PS: 只在 root 下进行了测试,非 root 用户可能存在权限问题,如:issue#3
cd /path/to/pwn-env-docker
bash ./setup.sh
git pull && bash ./setup.sh
本项目提供了两种构建方式:
- 本地构建
- 拉取 docker hub 镜像构建
docker hub 中仅上传了几个常用的版本(目前已上传docker-compose.yml里的所有版本)
由于部分插件是使用 volumes 进行映射的,所以拉取镜像前需要执行 setup.sh
脚本安装依赖
docker compose up -d <service-name>
docker compose -f docker-compose-dev.yml up -d <service-name>
更新 docker hub 镜像
docker compose pull <service-name>
本地构建可以使用 build 命令
docker compose -f docker-compose-dev.yml build <service-name>
镜像 | 系统版本 | libc 版本 | ssh 端口映射 | xinetd 端口映射 |
---|---|---|---|---|
th3s/pwn-env:ubuntu-16.04 | Ubuntu 16.04 | 2.23 | 21604 -> 22 | 61604 -> 8888 |
th3s/pwn-env:ubuntu-17.04 | Ubuntu 17.04 | 2.24 | 21704 -> 22 | 61704 -> 8888 |
th3s/pwn-env:ubuntu-17.10 | Ubuntu 17.10 | 2.26 | 21710 -> 22 | 61710 -> 8888 |
th3s/pwn-env:ubuntu-18.04 | Ubuntu 18.04 | 2.27 | 21804 -> 22 | 61804 -> 8888 |
th3s/pwn-env:ubuntu-18.10 | Ubuntu 18.10 | 2.28 | 21810 -> 22 | 61810 -> 8888 |
th3s/pwn-env:ubuntu-19.04 | Ubuntu 19.04 | 2.29 | 21904 -> 22 | 61904 -> 8888 |
th3s/pwn-env:ubuntu-19.10 | Ubuntu 19.10 | 2.30 | 21910 -> 22 | 61910 -> 8888 |
th3s/pwn-env:ubuntu-20.04 | Ubuntu 20.04 | 2.31 | 22004 -> 22 | 62004 -> 8888 |
th3s/pwn-env:ubuntu-20.10 | Ubuntu 20.10 | 2.32 | 22010 -> 22 | 62010 -> 8888 |
th3s/pwn-env:ubuntu-21.04 | Ubuntu 21.04 | 2.33 | 22104 -> 22 | 62104 -> 8888 |
th3s/pwn-env:ubuntu-22.04 | Ubuntu 22.04 | 2.35 | 22204 -> 22 | 62204 -> 8888 |
th3s/pwn-env:ubuntu-22.10 | Ubuntu 22.10 | 2.36 | 22210 -> 22 | 62210 -> 8888 |
th3s/pwn-env:ubuntu-23.04 | Ubuntu 23.04 | 2.37 | 22304 -> 22 | 62304 -> 8888 |
th3s/pwn-env:ubuntu-23.10 | Ubuntu 23.10 | 2.38 | 22310 -> 22 | 62310 -> 8888 |
th3s/pwn-env:ubuntu-24.04 | Ubuntu 24.04 | 2.39 | 22404 -> 22 | 62404 -> 8888 |
th3s/pwn-env:ubuntu-24.10 | Ubuntu 24.10 | 2.40 | 22410 -> 22 | 62410 -> 8888 |
宿主机路径 | 容器路径 | 备注 |
---|---|---|
./challenge | /challenge | CTF 题目路径 |
./config | /root/.config | 配置文件路径 |
./deps | /deps | 自定义工具的依赖路径 |
./ssh | /root/.ssh | SSH 密钥路径 |
SSH 配置中已经打开了PermitRootLogin
,由于没有设置密码,所以默认只能通过密钥登录
ssh-keygen -b 4096
docker cp $HOME/.ssh/id_rsa.pub <container-id>:/root/.ssh/authorized_keys
ssh root@<ip> -p <port>
或者将本地的 key 复制到容器中,用于远程连接
docker cp $HOME/.ssh/authorized_keys <container-id>:/root/.ssh/authorized_keys
如果是通过 docker-compose 启动,也可以修改 ./ssh 目录下的 authorized_keys 文件
vim ./ssh/authorized_keys
cd /root/scripts/xinetd
vim xinetd.conf
bash ./xinetd.sh
- pwn(用于部署题目环境)
- root
部分非 LTS 版本由于存在 bug 可能未安装某些工具
- python3、pip3、ruby
- gdb、socat、ssh server
- wget、curl、vim、tmux
- one_gadget、seccomp-tools
- glibc 源码(位于
/root/files/glibc-<version>
) - 部分常用依赖
常用工具:
- https://github.com/matrix1001/glibc-all-in-one
- https://github.com/lieanu/LibcSearcher
- https://github.com/NixOS/patchelf
- python
- 已安装:angr、gmpy2、pwntools、pycryptodome、z3 等(包含常用 python 库)
- pip 默认源:https://pypi.tuna.tsinghua.edu.cn/simple
- 部分旧发行版将工具安装到了 pyenv 中
发行版 Python 版本切换命令 Ubuntu 16.04 pyenv shell 3.8.19
Ubuntu 18.04 pyenv shell 3.10.14
Ubuntu 20.04 pyenv shell 3.10.14
- gdb
- 默认加载插件:Pwngdb
- 手动加载插件:peda、gef、pwndbg
- 对应启动命令:gdb-peda、gdb-gef、gdb-pwndbg
- tmux
- 插件:tmux-mem-cpu-load、tmux-prefix-highlight、tmux-sensible、tmux-sidebar、tmux-yank、tpm
- 主题:(需要手动修改启动参数)
- 添加 dracula 主题配置
- 配置:
- 默认 prefix 为 C-x
- gem
- apt
2 核 4G 云服务器搭建耗时,时间比较长建议提前 build 镜像
tmux 分屏与 gdb 带源码调试