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
2
sudo systemctl daemon-reload
sudo systemctl restart docker

检查加速器是否生效

1
docker info

若出现内容中包括

1
2
Registry Mirrors:
https://reg-mirror.qiniu.com

则配置成功(网址只是例子)

docker常见命令

1
2
3
4
5
systemctl restart docker	---重启docker
docker update --restart=no $(docker ps -q) ---设置docker不自动启动
docker run –restart=always ---设置docker开机自启动
docker ps -a ---docker查看已有的镜像
docker start 容器id ---启动某一docker容器

ctf_xinetd

下载

1
git clone https://github.com/Eadom/ctf_xinetd.git

我没有通过指令下载成功,所以去地址下的压缩包,也比较快。

将编译好的elf文件(如果有libc也一起放进去),放入此文件的bin目录中,并将falg给成想要的内容,然后在

ctf_xinetd的同级目录下创建docker-compose.yml文件

内容:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'

services:
pwn:
build: ./
image: pwn
ports:
- "60001:9999"
pids_limit: 1024
# cpus: 0.5
restart: unless-stopped
# privileged: true

将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