一、环境前置准备 1. 验证现有Ubuntu镜像
预期结果:需包含 ubuntu:16.04、ubuntu:18.04、ubuntu:20.04 三个镜像
2. 拉取缺失镜像(若验证不通过) 1 2 3 4 5 6 7 8 docker pull ubuntu:16.04 docker pull ubuntu:18.04 docker pull ubuntu:20.04
二、核心容器创建(3个Pwn专用环境) 容器1:Ubuntu 16.04 + libc-2.23 1 2 3 4 5 docker run -it --privileged \ -v ~/Pwn/myPwn:/root/myPwn \ -p 9997:9997 \ --name pwn-2.23 \ ubuntu:16.04 /bin/bash
容器内首次启动需执行(安装调试工具):
1 apt update && apt install -y gdbserver net-tools git
容器2:Ubuntu 18.04 + libc-2.27 1 2 3 4 5 docker run -it --privileged \ -v ~/Pwn/myPwn:/root/myPwn \ -p 9998:9998 \ --name pwn-2.27 \ ubuntu:18.04 /bin/bash
容器内首次启动需执行:
1 apt update && apt install -y gdbserver net-tools git
容器3:Ubuntu 20.04 + libc-2.31 1 2 3 4 5 docker run -it --privileged \ -v ~/Pwn/myPwn:/root/myPwn \ -p 9999:9999 \ --name pwn-2.31 \ ubuntu:20.04 /bin/bash
容器内首次启动需执行:
1 apt update && apt install -y gdbserver net-tools git
三、容器日常管理指令 1. 启动容器 1 2 3 4 5 docker start pwn-2.27 docker start pwn-2.23 pwn-2.27 pwn-2.31
2. 进入已启动的容器 1 2 3 4 5 6 docker exec -it pwn-2.27 /bin/bash docker exec -it pwn-2.23 /bin/bash docker exec -it pwn-2.31 /bin/bash
3. 停止容器 1 2 3 4 5 6 7 8 docker stop pwn-2.27 docker stop pwn-2.23 pwn-2.27 pwn-2.31 docker stop $(docker ps -q)
4. 查看容器状态 1 2 3 4 5 docker ps docker ps -a
5. 重启容器(解决卡死或配置生效) 1 2 docker restart pwn-2.27
四、Pwn调试核心操作 1. 单步调试模式(推荐) 进入对应容器后,执行以下步骤(替换题目路径/文件名):
1 2 3 4 5 6 7 8 cd /root/myPwn/babyheap-2.27chmod +x ./babyheapgdbserver 0.0.0.0:9998 ./babyheap
成功标志:容器内显示 Listening on port 9998
2. 快速测试模式(无需单步调试) 1 2 3 cd /root/myPwn/题目文件夹名chmod +x ./题目文件名./题目文件名 | nc -l 0.0.0.0 9998
3. 验证端口监听状态(排查连接问题) 容器内执行:
预期结果:调试时对应端口(9997/9998/9999)显示为 LISTEN 状态
4. 主机与容器文件互传(应急用) 1 2 3 4 5 docker cp ~/Pwn/myPwn/exp.py pwn-2.27:/root/myPwn/ docker cp pwn-2.27:/root/myPwn/flag.txt ~/Pwn/
五、容器退出方式 1. 退出后停止容器(调试完成) 容器内输入:
2. 退出后保留运行(暂时离开) 容器内按组合键:
效果:返回主机终端,容器仍在后台运行(状态为 Up)
六、镜像管理(备份/恢复) 1. 查看本地镜像
2. 备份镜像(换设备/重装系统) 1 2 3 4 5 6 7 8 mkdir -p ~/docker-backupdocker save -o ~/docker-backup/ubuntu18.04-pwn.tar ubuntu:18.04 docker save -o ~/docker-backup/ubuntu-all-pwn.tar ubuntu:16.04 ubuntu:18.04 ubuntu:20.04
3. 恢复备份的镜像 1 2 3 4 5 docker load -i ~/docker-backup/ubuntu18.04-pwn.tar docker load -i ~/docker-backup/ubuntu-all-pwn.tar
4. 删除镜像(谨慎操作) 1 2 3 docker stop pwn-2.23 && docker rm pwn-2.23 docker rmi ubuntu:16.04
七、容器删除(谨慎使用) 1. 删除单个容器 1 2 docker stop pwn-2.23 && docker rm pwn-2.23
2. 清理所有已停止的容器 1 docker rm $(docker ps -a -q)
3. 强制删除运行中的容器(不推荐)
八、问题排查指令 1. 查看容器详细配置(IP/挂载/端口) 1 2 3 4 5 docker inspect pwn-2.27 docker inspect pwn-2.27 | grep "IPAddress"
2. 查看容器运行日志(题目崩溃/报错时)
3. 检查端口映射是否生效 1 2 3 4 5 docker port $(docker ps -q) docker port pwn-2.27
九、快捷指令(一键复用)
一键启动所有容器并进入pwn-2.27:
1 docker start pwn-2.23 pwn-2.27 pwn-2.31 && docker exec -it pwn-2.27 /bin/bash
一键停止所有容器并查看状态:
1 docker stop pwn-2.23 pwn-2.27 pwn-2.31 && docker ps -a
容器内快速启动题目(pwn-2.27示例):
1 cd /root/myPwn/题目文件夹名 && chmod +x ./题目文件名 && gdbserver 0.0.0.0:9998 ./题目文件名
十、核心配置对照表
容器名
Ubuntu版本
libc版本
映射端口
本地挂载路径
容器内挂载路径
pwn-2.23
16.04
2.23
9997
~/Pwn/myPwn
/root/myPwn
pwn-2.27
18.04
2.27
9998
~/Pwn/myPwn
/root/myPwn
pwn-2.31
20.04
2.31
9999
~/Pwn/myPwn
/root/myPwn
十一、日常调试流程总结
启动容器:docker start pwn-2.27(按需替换容器名)
进入容器:docker exec -it pwn-2.27 /bin/bash
启动题目:cd /root/myPwn/题目目录 && gdbserver 0.0.0.0:9998 ./题目名
主机调试:激活Python环境 → 运行脚本(连接对应端口)
结束操作:exit(退出容器)→ docker stop pwn-2.27(停止容器)
十二、Ubuntu 16.04 安装zsh(解决软件源问题) Ubuntu 16.04 zsh安装步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 cp /etc/apt/sources.list /etc/apt/sources.list.backupcat > /etc/apt/sources.list << 'EOF' deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse EOF apt update apt install -y zsh cat > ~/.zshrc << 'EOF' export TERM=xterm-256colorPS1="[%n@%m %~]$ " alias ll='ls -la' alias pwn-cd='cd /root/myPwn' EOF chsh -s $(which zsh) exit docker exec -it pwn-2.23 zsh
Ubuntu 16.04 zsh颜色配置(可选) 如果极简配置工作正常,可以添加颜色:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 cp ~/.zshrc ~/.zshrc.backupcat > ~/.zshrc << 'EOF' autoload -U colors && colorsPS1="%{$fg [green]%}%n@%m%{$reset_color %}:%{$fg [blue]%}%~%{$reset_color %}$ " export TERM=xterm-256colorautoload -U compinitcompinit alias ls ='ls --color=auto' alias ll='ls -la --color=auto' alias grep='grep --color=auto' alias pwn-cd='cd /root/myPwn' alias gdb-start='gdbserver 0.0.0.0:9997' alias pwn-env='echo "Ubuntu 16.04 - libc 2.23 - Port 9997"' EOF source ~/.zshrc
十三、Ubuntu 18.04/20.04 安装zsh(标准方法) Ubuntu 18.04/20.04 zsh安装步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 docker exec -it pwn-2.27 /bin/bash apt update && apt install -y zsh cat > ~/.zshrc << 'EOF' export TERM=xterm-256colorPS1="[%n@%m %~]$ " alias ll='ls -la' alias pwn-cd='cd /root/myPwn' alias gdb-start='gdbserver 0.0.0.0:9998' alias pwn-env='echo "Ubuntu 18.04 - libc 2.27 - Port 9998"' EOF chsh -s $(which zsh)
十四、注意事项
Ubuntu 16.04必须更换软件源 后才能正常安装zsh
如果遇到locale错误,可执行:export LANG=C
极简配置确保兼容性,彩色配置提供更好体验
建议先测试极简配置,确认正常后再尝试彩色配置