Pwn题docker搭建

Docker

分清楚 镜像,容器

​ Dockerfile和docker-compose.yml

​ 靶机:本地和服务器

题目文件

pwn文件, ld文件,libc文件

分别命名为pwn, ld, libc

在这里插入图片描述

Patchelf

先手动patchelf,修改pwn文件的链接

1
2
3
4
5
6
#设置解释器
patchelf --set-interpreter /pwn/ld /pwn/pwn

#设置libc
patchelf --replace-needed libc.so.6 /pwn/libc /pwn/pwn
#原libc --> 待替换的libc --> 文件名

Patchelf之后的效果

1
2
3
4
root@ls:~# ldd /pwn/pwn
linux-vdso.so.1 (0x00007fff053ba000)
/pwn/libc (0x00007f55ee7f2000)
/pwn/ld => /lib64/ld-linux-x86-64.so.2 (0x00007f55ee9ed000)

dockerfile

1
2
3
4
5
6
7
FROM glzjin/pwn_base_20

COPY ld /pwn/ld
COPY libc /pwn/libc
COPY pwn /pwn/pwn

RUN chmod a+x /pwn/ld && chmod a+x /pwn/libc && chmod a+x /pwn/pwn

docker-compose.yml

1
2
3
4
5
6
7
8
9
version: "2"
services:
pwn:
build: .
restart: always
ports:
- "10000:10000"
environment:
- FLAG=flag{test}

靶机

服务器

那么制作了dockerfile文件,我们要怎么才能实现平常做题时的效果

0.安装&启动 docker和docker-compose

1
2
3
4
root@ls:~# sudo apt-get install docker.io
root@ls:~# sudo systemctl start docker

root@ls:~# apt install docker-compose

1.创建pwn文件夹,拷贝文件到系统根目录的pwn文件夹下

1
2
3
4
5
6
#初次使用
root@ls:~# cd /
root@ls:~# mkdir pwn
root@ls:~# cd /pwn

#在此,之后拷贝文件到该目录下

切记: 先手动Patchelf一下文件,修改libc和ld路径为/pwn/libc和/pwn/ld

在这里插入图片描述

通过yml文件快速生成容器

1
$ docker-compose up -d

手动生成容器

1
2
3
4
5
6
7
8
9
10
11
12
13
#docker文件

#创建镜像
$ docker build -t magic .
#显示镜像
$ docker images
#创建并运行容器
$ docker run -itd -p 10000:10000 magic
#显示容器
$ docker ps

#运行并测试容器,424e是容器id
$ docker exec -it 424e bash

附加:容器管理

1
2
3
4
5
docker ps

docker stop ID

docker rm ID

远程连接

1
nc ip 10000

本地连接

1
2
3
4
5
6
//查看容器
docker ps

//查看tcp端口
sudo netstat -apt

如果没有服务器,本地应该是0.0.0.0 10000,但是作者打不通,就不作赘述了


Pwn题docker搭建
http://csc8.github.io/2022/10/16/Pwn题搭建/
作者
Csc8
发布于
2022年10月16日
许可协议