前段时间领导安排去给新员工讲Web安全,最后有个结业考试,于是自己尝试搭建使用H1ve。
简介
H1ve是一款自研CTF平台,同时具备解题、攻防对抗模式。其中,解题赛部分对Web和Pwn题型,支持独立题目容器及动态Flag防作弊。攻防对抗赛部分支持AWD一键部署,并配备炫酷地可视化战况界面。
搭建
git clone https://github.com/D0g3-Lab/H1ve.git
cd H1ve
docker-compose -f single.yml up
访问http://ip:8000/
即可进入配置页面。
动态flag插件设置
普通题目部署起来很简单,动态docker的题目要麻烦一些。
进入设置,打开plugins里的Owl插件设置如下
Docker设置:
- Docker Flag Prefix : Flag前缀
- Docker APIs URL : API名字(默认为unix://var/run/docker.sock)
- Max Container Count : 最大容器数量(默认无限制)
- Max Renewal Time : 最大容器延长时间(超过将无法延长,达到时间后会自动摧毁)
Frp设置:
- FRP Http Domain Suffix : FRP域名前缀(如开启动态域名转发必填,只使用ip的话不需要)
- FRP Direct Ip Address : frp服务器IP
- FRP Direct Minimum Port 最小端口
- FRP Direct Maximum Port 最大端口
- FRP Config Template Frpc热重载配置头模版(如不会自定义,尽量按照默认配置)
Frpc热重载配置头模版:
[common]
token = random_this
server_addr = frps
server_port = 80
admin_addr = 0.0.0.0
admin_port = 7400
添加动态flag题目
- Challenge Type : 题目类型(选dynamic_check_docker)
- Deployment Type : 部署方式(选SINGLE-DOCKER-COMPOSE)
- Dirname : 题目所在文件夹(相对于source的相对路径)
- FRP Type : frp类型(DIRECT为ip直接访问,HTTP为域名访问)
- FRP Port : 题目内网端口(例子中为80)
每个题目需要编写Dockerfile,可以参考作者的示例题目:
题目上线效果:
每个挑战者同时只能开启一个容器,如果开启第二个就会提示需要先关掉题目xxx的容器。
Owl插件里可以查看当前所有动态容器:
已知Bug及临时处理措施
多人同时使用平台作答时,查看计分板的连接不会自动关闭,而计分板使用的Radis,最大连接数是10000,达到最大连接数后,计分板页面就会503。临时处理方案是写了一个sh,每30秒重启一下Radis的容器。
#!/bin/bash
id=`docker ps|grep redis|cut -c1-8`
num=0
while true;do
let num++
echo "refresh ${num} times"
docker restart ${id}
sleep 30
done
评论