docker+ctf_xinetd出pwn题教程

docker的下载
介绍
Docker是一个开源的平台,用于在容器中开发、部署和运行应用程序。它使开发人员能够将应用程序及其依赖项打包成一个称为Docker容器的独立单元。这些容器包含了应用程序所需的一切:代码、运行时、系统工具、系统库等。通过使用Docker,开发人员可以确保应用程序在任何环境中都能一致地运行,无论是在开发机器上、测试环境中还是生产服务器上。
添加docker官方的GPG密钥
1 | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - |
更新源
1 | echo 'deb https://download.docker.com/linux/debian stretch stable'> /etc/apt/sources.list.d/docker.list |
导入证书
1 | apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common |
更新系统
1 | apt-get update |
安装docker
1 | sudo apt install docker.io |
检查docker是否安装成功
1 | docker -v |
镜像加速
对于Ubuntu16.04+、Debian8+、 CentOS7
1 | vim /etc/docker/daemon.json |
写入一下内容
1 | {"registry-mirrors":["https://reg-mirror.qiniu.com/"]} |
之后重启服务:
1 | sudo systemctl daemon-reload |
检查加速器是否生效
1 | docker info |
若出现内容中包括
1 | Registry Mirrors: |
则配置成功(网址只是例子)
docker常见命令
1 | systemctl restart docker ---重启docker |
ctf_xinetd
下载
1 | git clone https://github.com/Eadom/ctf_xinetd.git |
我没有通过指令下载成功,所以去地址下的压缩包,也比较快。
将编译好的elf文件(如果有libc也一起放进去),放入此文件的bin目录中,并将falg给成想要的内容,然后在
ctf_xinetd的同级目录下创建docker-compose.yml文件
内容:
1 | version: '3' |
将image修改为之后创建的docker image名字相同。
打开ctf.xinetd文件,将图中框起来的部分改为elf的名字

在ctf_xinetd的目录下运行命令
1 | docker build -t "pwn" . |
来创建一个镜像,名字要和之前的名字一样。
仍在该目录下运行
1 | docker run -d -p "127.0.0.1:8888:9999" -h "pwn" --name="pwn" pwn |
意思是将容器内部9999端口映射到宿主机8888端口,端口号可以改。
可以nc8888端口一下试试了
打包
1 | docker commit 容器id imagename |
容器id可通过
1 | docker ps |
查看
imagename是新创建的镜像名字
将镜像打包成tar包
1 | docker save -o xxx.tar imagename |
将tar包再次压缩为gz包
1 | tar -zcvf xxx.tar.gz xxx.tar # 当前路径生成一个xxx.tar.gz压缩包 |
解包
将tar.gz解压缩,会生成一个tar包
1 | tar -zcvf xxx.tar.gz |
将tar包生成镜像
1 | docker load < xxx.tar #生成的镜像与打包之前的名字一样 |
将镜像生成容器
1 | docker run -it --name 容器名称 镜像名称 /bin.bash |