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 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 2 3 4 5 6
| //查看容器 docker ps
//查看tcp端口 sudo netstat -apt
|
如果没有服务器,本地应该是0.0.0.0 10000,但是作者打不通,就不作赘述了