CTF练习/比赛平台
H1ve是基于CTFd进行二次开发,在保留CTFd稳定性的情况下,提供优化版前端界面,队伍隔离容器,动态Flag机制的CTF平台,具备解题、攻防对抗模式。
其中,解题赛部分对Web和Pwn题型,支持独立题目容器及动态Flag防作弊。攻防对抗赛部分支持AWD一键部署,并配备炫酷地可视化战况界面。
项目地址:https://github.com/D0g3-Lab/H1ve
平台部署
git clone https://github.com/D0g3-Lab/H1ve.git
cd H1ve
docker-compose -f single.yml up
部署完成后,访问 http://yourvpsip:8000 即可。
平台设置
首次访问,设置Admin管理员账号及密码后,登录即可。
然后进入Admin->Challenges即可进行题目添加。
- Choose Challenge Type(选择挑战类型,一般选Standard)
- Name (题目名称)
- Category (题目类别,如Web、PWN等)
- Message (题目说明)
- Value (题目分值)
然后点击 Create 进入下一个页面:
- 设置你的flag值,可以为动态/静态两种。
- Files里可以上传题目的附件,比如流量分析题目的pcap流量包或压缩包等。
- Hints里可以填写提示。
- Requirements里可以设置题目之间的关联关系,比如题目一做完后才能看到题目二,以此类推。
一切设置完毕后,默认State为Hidden(隐藏状态),通过将其设置为Visible(可见)后,用户即可在Challenges中看到‘放出’的题目。
PWN题搭建
以项目ctf_xinetd为例,
https://github.com/Eadom/ctf_xinetd
克隆该项目后,
docker build -t pwn-docker:16.04 .
若想搭建为18.04的环境,将dockerfile文件里面FROM ubuntu:16.04改为 FROM ubuntu:18.04
然后创建容器,并设置端口转发:
docker run -p 0.0.0.0:9997:9999 pwn-docker:16.04
测试看看:
$nc 0.0.0.0 9997
ls
bin
dev
flag
lib
lib32
lib64
pwn
cat flag
ctf{please_initialize_this_flag}
如何设置你的PWN题目
可用docker cp命令替换/home/ctf目录下的helloworld,并修改/etc/xinetd.d/ctf里面的题目名称即可。
一次性搭建多个PWN题目
克隆项目:
git clone https://github.com/giantbranch/pwn_deploy_chroot.git
然后仅需三步就可以一次性搭建多道pwn题,并自动生成对应的flag:
- 将所有pwn题目放入bin目录(注意名字不要带特殊字符,因为会将文件名作为linux用户名)
- python initialize.py
- docker-compose up –build -d
成功部署的话会显示如下:
$python initialize.py
{"flag": "flag{9c900d02-8567-4e16-8952-47a92d2dc06a}", "port": 10000, "filename": "pwn1"}
{"flag": "flag{6f785f9e-fb19-4b54-9c6c-dd9b6f62041a}", "port": 10001, "filename": "pwn1_copy1"}
{"flag": "flag{c65a3be4-a9d1-4122-b981-7a241ca73027}", "port": 10002, "filename": "pwn1_copy2"}
然后启动docker即可:
docker-compose up --build -d
一道题目对应一个独立的端口。