- 鉴于在MBP 做pwn题 起码要开两个虚拟机,导致机器风扇很响,所以想到整一个永久化的pwndocker环境,减轻机器压力,因此就有了这篇文章。记录一下,不然容易忘。
01 安装docker Desktop
- 此处省略,不会的话,参考文章很多。
02 拉取 pwndocker
- 此处省略,不会的话,参考文章很多。
03 配置过程
[1] 运行pwndocker
#先新建一个工作目录
mkdir docker_pwn
cd docker_pwn
vim run.sh
#输入
ctf_name=env_pwn #设置你环境文件夹的名字,这里取名为env_pwn
docker run -d \
-h ${ctf_name} \
--name ${ctf_name} \
-v $(pwd)/${ctf_name}:/ctf/work \
-p 23946:23946 \
--cap-add=SYS_PTRACE \ #这个一定要加,不然gdb调试不了
skysider/pwndocker
docker exec -it ${ctf_name} /bin/bash#进入docker环境
- 这里需要指出的是
-v $(pwd)/${ctf_name}:/ctf/word
中$(pwd)/${ctf_name}
为你物理机器中的文件夹(理解成是共享文件夹),将该文件夹挂载到pwndocker中的/ctf/word
下。
- 其中我们在物理机中的
env_pwn
文件夹中有一个题目集合。
#保存退出
chmod +x run.sh
./run.sh
#此时你就进入到了pwndocker环境
#查看docker工作目录是否存在题目文件夹
ls
- 此时我们就不需要在docker cp 了,直接在物理机做修改,docker里面跟着变。
[2] pwndbg实现命令和输出分别在两个终端窗口
- 如果我们想要实现如下效果该怎么设置呢?
- 因为这样真的很方便。
- 现将你的终端分成两块,mac的话,
⌘ + d
垂直分屏。 - 分别在两个终端中使用
tty
命令查看当前终端用于显示连接到当前标准输入的终端设备文件名。
- 可以看到我打开的第一个终端默认是0,第二个是1
- 添加 set context-output /dev/pts/1 后保存退出即可
$ vim .gdbinit
#末尾输入
set context-output /dev/pts/1
#保存退出
- 此时就可以分屏显示了。
[3] 半永久化设置
- 由于偶尔电脑需要重启,这样你的docker容器内的东西都会消失,其中包括新添加的文件,又或者其它你安装的程序以及一些配置的修改都会被清空。所以,当你完全配置好你的pwndocker环境后需要保存修改后的环境,步骤如下,再下次重新启动的时候直接启动新环境(注意被忘了挂载env_pwn文件夹)。
docker ps
查看正在运行的容器.
docker commit 27377e0379b7 my_new_pwndocker:v1.0
提交你刚才修改的镜像,新的镜像名称为my_new_pwndocker,版本为v1.0,期间容器不能停止
。
- 最后保存新的容器镜像
docker save #ID or #Name
$ docker save -o my_new_pwndocker.tar my_new_pwndocke:v1.0
#或者
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_new_pwndocker v1.0 1b27f8144b3a About an hour ago 4.79GB
skysider/pwndocker latest c8efe40b3b33 4 months ago 4.79GB
$ docker save -o my_new_pwndocker.tar 1b27f8144b3a
- 这里是备份了一份,后续可以用
docker load
进行读取。