pwn出题
生成题目附件
编写
放一个ret2libc的模板在这里,注意尽量将主要逻辑放在单独的函数中,并且在进入这个函数之前要设置流,否则docker中需要换行才能有输出
1 |
|
编译
1 | gcc 未编译文件名 -o 编译完成后文件名 |
CTF-Xined项目获取
1 | sudo apt-get update |
选择对应版本的ubuntu
2.23->16.04
2.27->18.04
2.31->20.04
2.35->22.04
将刚刚编译好的附件放入src文件夹
找到这几个文件,分别位于:
1 | ./config/ctf.xinetd |
然后将刚刚编译完成的文件名替换上图中红框框起来的地方,如果需要自己定义静态flag,可以在./service/docker-entrypoint.sh文件的INSERT_FLAG=”flag{TEST_Dynamic_FLAG}”处替换为自定义的flag,如果不想每次运行docker的时候都输出flag的值,可以把./service/docker-entrypoint.sh文件第24行的tee删去
完成以后使用下列命令构建docker并运行和检查flag等是否设置正确
docker基本命令
构建image
在Dockerfile目录下运行:
1 | docker build -t code_cube . |
code_cube是构建出的镜像名
1 | docker images |
运行容器
现在应该能看到docker镜像,用这个镜像运行一个容器(my_code_cube是运行的容器名称):
1 | docker run -it --name my_code_cube code_cube:latest /bin/bash |
这时换一个终端输入:
1 | docker ps |
应该会有
此时输入下面这条命令就可以进入这个docker,可以检查一下flag的值是否正确
1 | docker exec -it my_code_cube /bin/bash |
这里顺便记录一下怎么在本地彻底删除这个docker(当然也可以在创建的时候使用-rm参数,这里不做记录,读者自行研究)
显示容器列表
1 | docker ps -a |
可以查看所有容器,包括已经停用的
可以对比看一下
删除容器:
1 | docker rm [CONTAINER ID] |
如果是正在运行的容器,需要先停止,再rm
1 | docker start [CONTAINER ID] |
显示镜像列表:
1 | docker images |
删除镜像(remove image):
1 | docker rmi |
导出docker备份为tar文件:
1 | docker save -o code_cube_image.tar code_cube:latest |
1 | docker load -i code_cube_image.tar |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yukon!