前段时间领导安排去给新员工讲Web安全,最后有个结业考试,于是自己尝试搭建使用H1ve。
$[timeformat('2020-09-01T15:49:41+08:00')]
#CTF#Linux

fg

简介

H1ve是一款自研CTF平台,同时具备解题、攻防对抗模式。其中,解题赛部分对Web和Pwn题型,支持独立题目容器及动态Flag防作弊。攻防对抗赛部分支持AWD一键部署,并配备炫酷地可视化战况界面。

1

搭建

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设置:

2

  • Docker Flag Prefix : Flag前缀
  • Docker APIs URL : API名字(默认为unix://var/run/docker.sock)
  • Max Container Count : 最大容器数量(默认无限制)
  • Max Renewal Time : 最大容器延长时间(超过将无法延长,达到时间后会自动摧毁)

Frp设置:

3

  • 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题目

4

  • Challenge Type : 题目类型(选dynamic_check_docker)
  • Deployment Type : 部署方式(选SINGLE-DOCKER-COMPOSE)
  • Dirname : 题目所在文件夹(相对于source的相对路径)
  • FRP Type : frp类型(DIRECT为ip直接访问,HTTP为域名访问)
  • FRP Port : 题目内网端口(例子中为80)

每个题目需要编写Dockerfile,可以参考作者的示例题目:

file-upl0ad

题目上线效果:

5

每个挑战者同时只能开启一个容器,如果开启第二个就会提示需要先关掉题目xxx的容器。

Owl插件里可以查看当前所有动态容器:

6

已知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

评论