基于AWD-platform的AWD环境搭建
用zhl2008大佬的平台搭了个AWD平台,下面记录搭建过程和运维指南。
参考链接:
下载
1 | git clone https://gitee.com/jikemofan/awd-platform |
原版有无限提交flag的bug,我用的暗月的版本,主要bug均已经修复。(但是有新的bug,比如说他写的提交flag功能是个摆设)
进入项目:
1 | cd awd-platform/ |
从网上拉取一下zhl2008的docker镜像:
1 | docker pull zhl2008/web_14.04 |
然后要改名!大坑。不改名就去改dockerfile
1 | docker tag zhl2008/web_14.04 web_14.04 |
至此,awd平台已经安装完毕。但是,要安装python2,先更新源:
1 | sudo apt update |
然后装python2
1 | sudo apt install python2 |
比赛环境介绍
服务器全部以docker形式部署在同一台虚拟机上。
Check_server:
服务检查服务器,用于判定选手维护的服务是否可用,如果不可用,则会扣除相应的分数。不开启任何端口。需要与flag服务器通信。
Flag_server:
选手提交flag的服务器,并存储选手的分数。开启80端口。
Web_server:
选手连接的服务器,选手需要对其进行维护,并尝试攻击其他队伍的机器。通常开启80端口,22端口,并将端口映射到主机。
比赛逻辑拓扑
比赛启动
例如我要创建5支队伍,赛题使用web_yunnan_simple
:
1 | python2 batch.py web_yunnan_simple 5 |
启动比赛:
1 | python2 start.py ./ 5 |
此时可以访问8080端口看到计分板。靶机也可以正常访问。
1 | 映射规则: |
各队伍的ssh密码在pass.txt中
1 | cat pass.txt |
关于check模块,他的check脚本是不能用的,我们需要进行一些修改,这个规则要根据自己的环镜自己编写,总体思路就是判断页面是否存在,存在就加一分,不存在就减一分,在他内置check脚本的基础上,我们可以稍微修改一下靶机环境的源码,然后用check脚本去访问,在他内置的脚本中还可以修改每次加分和扣分的多少。
还有一个要注意的地方就是,在项目的根目录的flag_server/中,我们 要赋予score.txt 和result.txt 777权限,否则分数变动无法进行同步。
关闭环境和题目:
1 | python2 stop_clean.py |
比赛参数
Flag 提交: /flag_file.php?token=teamx&flag=xxxx (x为你们的队伍号)
比赛规则
1.每个队伍分配到一个docker主机,给定ctf用户权限,通过制定的端口和密码进行连接;
2.每台docker主机上运行一个web服务或者其他的服务,需要选手保证其可用性,并尝试审计代码,攻击其他队伍;
3.比赛开始后,前30分钟,选手维护各自的主机,在这个阶段,所有的攻击和服务不可用不影响分数;
4.选手可以通过使用漏洞获取其他队伍的服务器的权限,读取他人服务器上的flag并提交到指定的flag服务器:
http://flag服务器IP:端口/flag_file.php?token=队伍token&flag=获取到的flag 来获得相应的分数。
例如:flag server地址为8.8.8.8,端口为8080,队伍token为team1,flag为40ed892b93997142e46124516d0f5ac0,则请求/flag_file.php?token=team1&flag=40ed892b93997142e46124516d0f5ac0来获得相应分数。
每次成功攻击可获得2分,被攻击者扣除2分;有效攻击两分钟一轮;
5.选手需要保证己方服务的可用性,每次服务不可用,扣除1分,服务可用,加1分;服务检测两分钟一轮;
6.选手可以从flag服务器上获取所有的攻击情况以及当前的分数:
攻击情况url地址:http://flag服务器IP:端口/result.txt
得分情况地址:http://flag服务器IP:端口/score.txt
7.不允许使用任何形式的DOS攻击
注意事项
比赛节奏巨快,2分钟一轮。要修改的话可以看看这个(但我没有成功)
还有夜莫离大佬写的前端计分板。
计分板源码打包:https://pan.baidu.com/s/18KlIeluaTtm-kT3KuXHseQ
提取码:cvdn