前言

关于用docker出题的文章实在是太少了,所以自己在学习的时候记录一下
docker的一些基本搭建在这里就不一一说明了,这里只记录一下如何把一个题目弄出来,可能有些地方也有错误

进入主题

按我自己的理解就是先拉取一个镜像用来布置题目所需的环境以及容器所需
我这里使用ctftraining/base_image_nginx_mysql_php_73 这个镜像一开始我用的tutum/lamp
但是发现这个镜像有点问题不能显示中文,可能是dockerfile没设置
拉取镜像docker pull ctftraining/base_image_nginx_mysql_php_73
这里我已经拉取了,所以列一下
zo0fQs.png
然后使用ctftraining/base_image_nginx_mysql_php_73镜像启动一个容器,同时映射到服务器的2333端口
docker run -d -p 2333:80 ctftraining/base_image_nginx_mysql_php_73
zo0Rzj.png
可以看到已经启动了一个容器,然后就是弄出题文件了,先上传到服务器的/var/www/html下
一个简单的抓包查看源码的题,因为主要是学习怎么布置一个题目,所以直接到网上找的一个源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<p style="font-family:arial;color:black;font-size:20px;text-align:center;">Flag不在这里哦</p>  
<!-- flag{This_is_flag} -->
</body>
<script>
document.oncontextmenu=function() {
alert("右键被禁用");
return false;
};
document.onkeydown = function(e) {
e = window.event || e;
var k = e.keyCode;
//屏蔽ctrl+u,F12键
if ((e.ctrlKey == true && k == 85) || k == 123) {
if (k == 85)
alert("Ctrl+U被禁用!");
else
alert("F12被禁用!");
e.keyCode = 0;
e.returnValue = false;
e.cancelBubble = true;
return false;
}
}
</script>

然后把题目的源码从服务器copy到容器中
docker cp /var/www/html/index.php 603788:/var/www/html/
容器id不用写全只要能识别出来就行,执行之后访问就行
访问服务器ip:2333
zo02WQ.png
布置成功
zo0cFS.png
然后抓包得到flag
zo0gJg.png
然后就是dockerfile和docker-compose.yml的编写,用来快速本地部署和动态flag实现等,这里就先不写了,当然那个也是很重要的东西
最后这里列一下我最近经常用的命令

1
2
3
4
5
6
7
8
exit //退出容器
systemctl restart docker //重启docker
docker start 容器id //开启一个已知id的容器
docker restart 容器id //重新启动容器
docker exec -it 容器id bash //退出容器后容器不关闭
docker stop 容器id //结束容器
docker ps //查看正在运行的容器
docker image ls //查看镜像目录

参考:
CTF Web出题感悟_Wuuconix的博客-CSDN博客_ctf web出题
用docker搭建简易ctf题目_XiLitter的博客-CSDN博客_ctf题目docker