1
背景情况
作为公司的应用安全负责人,我一直想推进公司全体研发人员的安全意识提高,所以我们就组织了公司内部的安全周活动,并在安全周活动中举办了CTF夺旗大赛。
参考业界的经验以及朋友的介绍,CTF夺旗大赛分成两个部分:一个称为靶场,另外一个称为CTF平台。在我的实践中,靶场就选择了最流行的OWASP Juice Shop项目;CTF平台选择了fbctf平台。
CTF平台一般有两个流行的选择,一个是ctfd(github地址是https://github.com/CTFd/CTFd),另外一个是fbctf(github地址是https://github.com/facebook/fbctf)。虽然很多朋友都有建议用ctfd的,但是我经过比较还是选择了fbctf。我当时基于这些考虑:
1. Ctfd没有fbctf稳定,在我的测试过程中,更改了一下ctfd的一些配置,ctfd的服务器居然重启了,稳定性是不能满足需要的。
2. Ctfd的Juice Shop导入比较麻烦,一个不小心就调用坑里去,使用Juice Shop的ctf导入工具juice-shop-ctf(github地址是https://github.com/bkimminich/juice-shop-ctf)产生导入文件的时候,ctfd有兼容性问题。官方文档说只支持ctfd的1.1.x和1.2.x版本,而当前的ctfd的版本是2.0. 1版本。基于juice-shop-ctf产生的ctfd的导入文件有多个,导入的时候有多个选项。这里大家不能全选,只应该选择需要的两个选项,否则系统会莫名其妙就Crash了。而fbctf的导入文件只有一个,不需要做任何选择,不容易出错。
3. Ctfd的整体界面效果没有fbctf炫酷,fbctf更像是黑客们使用。
基于以上三点,我最终选择了fbctf作为我们的CTF平台工具。
2
搭建过程
01
搭建靶场
首先,我们需要搭建一个Juice Shop的靶场(github地址:https://github.com/bkimminich/juice-shop)。官方有多种安装方式,最终我是选择了Amazon EC2 Instance的方式。具体过程请参考官方文档,但是有几点要注意:
1) 基于Amazon Linux AMI创建一个EC2。EC2至少应该有2G内存,这里选择t1.small。
2) 容器启动命令:docker run -d -e "CTF_KEY=***" -e "NODE_ENV=ctf" -p 8080:3000 bkimminich/juice-shop
最后一条命令是将EC2的8080端口映射到容器内部的3000端口,juice-shop在容器内部启动的端口是3000。如果你不想使用8080端口,你可以修改这里的值,但是同时需要修改Security Group的HTTP端口的值,否则会连接不上juice-shop的网站。然后需要使用两个参数用来设置CTF_KEY和NODE_ENV的值,其中CTF_KEY用于juice-shop-ctf导出juice-shop的时候使用,而NODE_ENV需要设置为ctf,表示使用ctf模式运行juice-shop,此时juice-shop才会在每次问题解决时才会产生出Hashcode,选手才能将这个Hashcode输入到ctf平台中作为答案来获得旗标和分数。
02
导出数据
创建好juice-shop的靶场后,接下来就可以使用juice-shop-ctf工具导出数据。Juice-shop-ctf是一个node模块,可以使用npm install -g juice-shop-ctf-cli直接安装,然后通过juice-shop-ctf命令行工具进行调用。如图:
●●●

命令执行后,就会产生一个json文件,如OWASP_Juice_Shop.2018-12-27.FBCTF.json,里面已经包含了所有问题的flag,也就是hashcode。
03
创建fbctf平台
最后就是创建fbctf平台和导入juice-shop-ctf的json文件。开始我参考官方指导文档创建多个Multi-Container Docker,但是均为报错。经审查源码,发现lib.sh针对的环境是Ubuntu 14.04环境,而我们使用的EC2是Centos 7.0环境(这里使用juice-shop靶场的EC2),所以是不可能成功的。改为使用docker compose的方式直接安装。
这时会产生4个容器,分别是:mysql、cache、hhvm和nginx,并且对外暴露80和443两个端口。如果不想使用这些端口,可以修改docker-compose.yml文件最后的ports内容。
容器创建成功后,访问fbctf的地址就可以看到fbctf的界面,成功登录,并选择中文。
●●●

04
配置fbctf平台
当切换到控制页签,并选择“汇入游戏进度”的按钮,选择juice-shop-ctf导出的Json文件,就可以成功将juice-shop的信息导入到fbctf平台中。
●●●

在注册那里开放玩家注册,fbctf支持的是团队制注册,然后你可以限制每个团队的人数,默认是3人。一切都配置好了,你就可以开始CTF游戏了。
Fbctf支持游戏版图,包括积分榜、公告、队伍、记分板等多种功能,就可以实时看到ctf夺旗大赛的状态了。
●●●

肖文棣,OWASP中国广东区域负责人。现就职于晨星资讯任安全架构师,主要研究方向是应用安全领域,曾就职于金蝶软件工程师岗位,华为技术工程师岗位,晨星软件工程师,高级软件工程师,软件开发经理,架构师等岗位。热爱安全事业,是公司安全白帽子组织的领头人,同时也是多个SRC组织的成员。

欢迎大家投稿,就日常工作中积累的技术经验、方法技巧、心得体会分享交流。
稿件请以WORD文档发送 “member@owasp.org.cn”,并请注明“OWASP投稿”字样。