使用docker还原镜像基于题目基础镜像的方式——反序列化题

很多同学都想在比赛结束的时候把题目还原给别人做,或者把题目还原研究更多的解题方式。在杂项和密码学等可以直接使用题目即可,但是在pwd和web题的时候就没办法了。很多同学在web题就使用本地环境,但是没办法达到复用的效果。接下来我就演示一下如何使用ctfhub-team中的基础镜像来还原题目。

我这边使用了一个Ubuntu22的系统,里面安装了docker和docker-compose还有git。

image-20230903173805109

最好使用docker 的镜像加速,要不然在拉取镜像的时候会很慢,具体可以去自行百度设置。

这里使用的题目是ctf.show

ctf.show里面的web入门和pwd入门题目都是由入门到技术的,有条件的话还是比较推荐的。

image-20230903174432592

接下来开始还原镜像:

1、拉取基础镜像相关文件到本地

这里我使用的是GitHub - ctfhub-team/base_web_nginx_php_56: 基础镜像 WEB Nginx PHP 5.6 你可以根据你的需要去选择合适的基础镜像。

git clone https://github.com/ctfhub-team/base_web_nginx_php_56.git

拉取镜像到本地

image-20230903175604213

image-20230903175646006

这个镜像的文件结构如下: image-20230903175725946

Dockerfile文件是关键的启动文件,里面可以配置镜像启动时的命令等等。

image-20230903181825545

2、题目复现

创建题目文件

mkdir src

创建首页 index.php (记得切换到src目录里面再创建)

touch index.php

编辑并将题目源码放到index.php里面

创建相应的flag文件,并编辑相应的flag进去

image-20230903182506772

3、修改相应的启动配置

返回我们拉取的镜像更目录,编辑Dockerfile文件,将里面的

&& echo '<?php phpinfo();' > /var/www/html/index.php \ 删除

在 COPY _files /tmp/添加一行

COPY src /var/www/html

image-20230903182904743

这里的的修改的解释是:

把原来的例子删除掉,添加一个把创建的题目网站源码复制到nginx运行目录。

image-20230903185144876

最后得到这样的目录文件

4、修改相应的题目备注

可以进行如下操作

删除README.md文件

修改meta.yml文件

image-20230903185450310

最后得到

image-20230903185521969

5、运行

docker本地镜像启动命令如下:

docker-compose build
docker-compose up -d

image-20230903185719017

使用docker ps命令查看相应的题目端口信息

image-20230903185822983

即可在浏览器访问:

127.0.0.1:8085

image-20230903185912457

6、验证题目

在题目做好后,最好在本地自己做一遍,查看题目的完整性,然后再上传到docker镜像仓库里面。

image-20230903190030949

7、总结

这样就完成了一个题目的创建。总的来说没有数据库的题目创建起来是比较简单的,这适用于题目中没有数据库的,如果有数据库得配置相应的数据库信息来达到题目于docker里面的数据库连接。

由于我们使用了基础镜像,题目创建起来还是比较简单快速的。

遇到的问题:

image-20230903190325662

在docker-compose build的时候可能会遇到这个错误:

fetch http://mirrors.ustc.edu.cn/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
WARNING: Ignoring http://mirrors.ustc.edu.cn/alpine/v3.8/main/x86_64/APKINDEX.tar.gz: temporary error (try again later)
fetch http://mirrors.ustc.edu.cn/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
WARNING: Ignoring http://mirrors.ustc.edu.cn/alpine/v3.8/community/x86_64/APKINDEX.tar.gz: temporary error (try again later)
ERROR: unsatisfiable constraints:
mysql (missing):
required by: world[mysql]
mysql-client (missing):
required by: world[mysql-client]
nginx (missing):
required by: world[nginx]

我的是Ubuntu,具体处理的方案如下:

修改/etc/resolv.conf文件,增加dns:8.8.8.8、114.114.114.114

nameserver 8.8.8.8
nameserver 114.114.114.114

重启

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=12fkow91cc1bl