AWD简单介绍和搭建AWD平台
何为AWD
比赛中每个队伍维护多台服务器,服务器中存在多个漏洞,利用漏洞攻击其他队伍可以进行得分,修复漏洞可以避免被其他队伍攻击失分。
1、一般分配Web服务器,服务器(多数为Linux)某处存在flag(一般在根目录下)
2、可能会提供一台流量分析虚拟机,可以下载流量文件进行数据分析
3、flag在主办方的设定下每隔一定实践刷新一轮
4、各队一般都有自己的初始分数
5、flag一旦被其他队伍拿走,该队扣除一定积分
6、扣除的积分由获取flag的队伍均分
7、主办方会对每个队伍的服务进行check,服务器宕机扣除本轮flag分数,扣除的分值由服务check正常的队伍均分
8、一般每个队伍会给一个低权限用户,非root权限
AWD 常见比赛规则说明
Attack With Defence,简而言之就是你既是一个hacker,又是一个manager。
比赛形式:一般就是一个ssh对应一个web服务,然后flag五分钟一轮,各队一般都有自己的初始分数,flag被拿会被拿走flag的队伍均分,主办方会对每个队伍的服务进行check,check不过就扣分,扣除的分值由服务check正常的队伍均分。
其中一半比赛以WEB居多,可能会涉及内网安全,攻击和防御大部分为前期培训内容。
前期准备
1、队伍分工明确
2、脚本工具环境完整
3、漏洞POC/EXP库完整
4、安全防御WAF及批量脚本完整
必备操作
1、备份网站文件
2、修改数据库默认密码
3、修改网页登陆端一切弱密码
4、查看是否留有后门账户
5、关闭不必要端口,如远程登陆端口
6、使用命令匹配一句话特性
7、关注是否运行了“特殊”进程
8、权限高可以设置防火墙或者禁止他人修改本目录
搭建AWD平台
1、更换源
这里我使用的是kali进行搭建,将kali的源换成阿里云或者清华的源即可,这里不多介绍
参考文章:https://blog.csdn.net/lina_999/article/details/90635959?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163437049816780265461094%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163437049816780265461094&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-90635959.pc_search_result_cache&utm_term=kali%E6%9B%B4%E6%8D%A2%E6%BA%90&spm=1018.2226.3001.4187
2、安装docker环境
kali这里是自带docker环境的,就不需要再去安装了
3、下载赛题项目
git clone https://github.com/zhl2008/awd-platform
这里可能需要一个小时以上才能下完,项目比较大
4、下载完后进入项目
cd awd-platform
5、下载镜像文件
sudo docker pull zhl2008/web_14.04
这里下载如果过慢就需要去替换一下docker源
6、更改镜像名称
sudo docker tag zhl2008/web_14.04 web_14.04
启动比赛
1、进入awd项目
cd awd-platform
2、创建队伍
python batch.py web_yunnan_simple 3
这里创建了3个队伍,赛题是web_yunnan_simple
3、根据赛题修改check.py(awd-platform/check_server/目录下)文件,找到check类
class check():
def __init__(self):
print "checking host: "+host
def index_check(self):
res = http('get',host,port,'/','',headers)
if 'Home' in res:
return True
if debug:
print "[fail!] index_fail"
return False
def test_check(self):
res = http('get',host,port,'/about.php?file=header.php','',headers)
if 'About' in res:
return True
if debug:
print "[fail!] test_fail"
return False
def test_check_2(self):
headers['Cookie'] = ''
data = 'key=1'
res = http('get',host,port,'/services.php',data,headers)
if 'Services' in res:
return True
if debug:
print "[fail!] test_2_fail"
return False
4、修改flag刷新时间,同样是check.py文件中,默认120s,2分钟
5、创建好队伍后就可以开始比赛了,输入命令启动比赛
python start.py ./ 3
6、比赛拓扑图
web站点
team1:192.168.109.128:8801
team2:192.168.109.128:8802
team3:192.168.109.128:8803
ssh连接
team1:192.168.109.128:2201
team2:192.168.109.128:2202
team3:192.168.109.128:2203
ssh连接的账号密码在项目下的pass.txt
里面
7、访问web站点
team1web站点
其他队伍的web站点与team1队伍完成一致,只是端口不同而已
得分
运行修改后的check.py文件,启动check服务器
在这里可以看到实时分数
如果觉得这个页面太丑的话,可以自己换个页面,我这里用的夜莫离大佬做的页面
计分板源码下载
链接:https://pan.baidu.com/s/1xF9uZpKUZTZt_OOfpoOrOw
提取码:qwer
计分板文件拷贝至awd-platform下的flag_server文件夹下。要注意将文件score.txt与result.txt文件权限调至777,这样才能刷新出分值。
记分板里面的index.php
文件需要将IP换成自己虚拟机的IP
模拟team1攻击team2得分
访问team2web网站
下载发现一个代码执行漏洞
查看根目录下的文件
ls /
发现flag,查看flag内容
cat /flag
提交flag为自己的队伍加分
加分的方法是访问一个为地址并且以get的形式上交flag
http://主机IP地址:8080/flag_file.php?token=teamx&flag=xxxx (x为队伍号)
可以看到team1加了两分,team2减了两分,但是如果是开赛前三十分钟的话是攻击不成功的,前三十分钟为准备阶段
结束比赛
进入项目目录
sudo python stop_clean.py