如何用docker出一道ctf题(web)
目前docker的使用越来越宽泛,ctfd也支持从dockerhub一键拉题了。因此,学习如何使用docker出ctf题是非常必要的。
安装docker和docker-compose
100种方法,写个最简单的。之前一篇文章CTFD部署里我也提到过如何安装。
安装docker
1 | curl -fsSL https://get.docker.com -o get-docker.sh |
1 | sh get-docker.sh --mirror Aliyun |
安装docker-compose
1 | sudo apt update |
1 | sudo apt install python3-pip -y |
1 | pip3 install docker-compose |
无数据库篇
这个比较简单,先挂一下tree。
我本人习惯在windows下出题,主要是因为方便。实际上是因为我虚拟机里一堆bug。
接下来我们一层一层解析。
flag.php
1 |
|
先从最底层html
文件夹内的内容说起。这里面就放题目和flag.php
即可,flag如果在根目录的情况我会另外标注(在flag.sh中改)。
flag.sh
1 |
|
ctfd-whale会自动生成一个随机flag的变量在$FLAG里。
第二行就是将你存储flag的位置,做个替换,3,4行清空环境变量值,否则执行echo $FLAG
就能直接出flag。
如果要把flag放入根目录/flag,把第二行改成:
1 | echo $FLAG >> /flag |
Dockerfile
1 | # 请务必保证该出能从 hub.docker.com 上拉取下来。 |
直接用集成镜像了,太猛了。这个镜像不需要暴露端口。DASCTF的镜像需要暴露端口。相关源码可以去github上搜ctftraining去看。
注意第18行dos2unix /flag.sh
,个人习惯在windows上出题,写的shell脚本的换行符在linux系统中会炸,因此需要执行该命令。当然也可以使用编辑器,例如notepad++或sublime text中设置文件为unix格式。
有数据库篇
正在学习,玩不明白数据库,蕾姆。之后看情况更新密码nc题出题方法。