记一次 CTF 环境和动态独立靶机部署
写在前面
寒假期间打算通过协会搞场比赛,最近得以如愿。正好年初学了点 Docker,顺便研究了一下动态独立靶机如何编写。CTF平台的话是通过 ip
+ windows
+ vmware
桥接出去做靶场。
靶场使用了 D0g3
基于 CTFD
二次开发的 H1ve
平台安装基本没有坑,但动态启动 Docker 坑很多… 且 H1ve
内置的 test/file_upload
题目有问题根本无法启动,导致被卡死在 Docker 这很久。
阅读下面的内容需要有一点点的 Linux
知识,并且会编写 Shell
脚本、Dockerfile
和 docker-compose.yml
文件。
开始安装
系统是在清华大学开源软件镜像站下载的 CentOS-7-x86_64-DVD-2009.iso,所以无需修改系统内置镜像源。
1 |
|
安装Docker
详情请移步我一月份的文章:Docker学习记录 这里不再赘述
安装H1ve
由于某些不可描述因素,国内访问 Github
时不时抽风。原本是打算搭建代理进行访问,最后想起可以通过修改 hosts
文件来进行访问。(其实还有一种方法 通过码云进行中转,但是对码云没有好感,果断放弃。
1 |
|
启动之后,我们可以通过 靶场ip:8000
,来访问靶场了,端口可以在 single.yml
中修改
动态独立靶机
- 每个人的环境都是独立的,题目遭到破坏不会影响到其他人。
- flag 为动态生成,每个人均不同,有效防止串 flag 行为。
遇到的最大的坑就是这里。貌似 H1Ve
内置的 test/file-upl0ad
存在问题。自己手动写了个题目才启动成功。
CTFd-Owl
后台导航栏-->Plugins-->CTFd-Owl
或者 靶场地址/plugins/ctfd-owl/admin/settings
Docker Settings
Docker Flag Prefix
:动态生成的flag前缀Docker APIs URL
:API名字(默认为unix://var/run/docker.sock)Max Container Count
:最大启动容器数量(默认无限制)Max Renewal Time
:最大容器延长时间(超过将无法延长,达到时间后会自动摧毁)
FRP Settings
FRP Http Domain Suffix
:FRP域名前缀(如开启动态域名转发必填)FRP Direct Ip Address FRP
:frp服务器IPFRP Direct Minimum Port
:最小端口FRP Direct Maximum Port
:最大端口FRP Config Template Frpc
:热重载配置头模版(如不会自定义,尽量按照默认配置)
1 |
|
题目编写
目录结构
1 |
|
Dockerfile
1 |
|
docker-compose.yml
1 |
|
files/start.sh
1 |
|
files/index.php
1 |
|
flag
1 |
|
部署题目
后台导航栏-->Challenges-->加号
或者 靶场地址/admin/challenges/new
Challenge Type
:题目类型(选dynamic_check_docker)Deployment Type
:部署方式(选SINGLE-DOCKER-COMPOSE)Dirname
:题目所在文件夹(相对于ctfd-owl/source的相对路径)FRP Type
:frp类型(DIRECT为ip直接访问,HTTP为域名访问)FRP Port
:题目内网端口(例子中为80)Name
:题目名称Category
:题目类别(WEB/MISC..)Write&Preview
:题目介绍Initial Value
:题目初始分Decay Limit
:题目分数达到最小值之前的解决数量Minimum Value
:题目最低分
汉化界面
手动汉化了一下H1ve-theme和CTFd-Owl的用户界面,基本能汉化的全汉化了。
Github地址:https://github.com/5ime/H1ve-Chinese