AWD简单介绍和搭建AWD平台

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

一个awd攻防比赛的裁判平台。 版本:beta v2.0 开发语言:python3 + django 平台分为两个部分 裁判机 靶机 通过特定接口,来实现靶机flag与服务器的通信 搭建流程 裁判机 安装所需环境 裁判机:python3+django 全局搜索woshiguanliyuan,并修改为随机字符串,此处为管理平台地址 /untitled/urls.py path('woshiguanliyuan/',views.admin,name='admin'), path('woshiguanliyuan/table/',views.admin_table,name='admin_table'), /app/views.py if 'woshiguanliyuan' not in request.META['HTTP_REFERER']: 第3147换为你的目录 列:("/var/www/awd_platform/app/qwe.txt","a") 修改app/management/commands/init.py,添加用户 #['用户名','用户靶机token','用户靶机token'] user=[ ['123456','FF9C92C7SDFABB71566F73422C','FF9C92C7SDFABB71566F73422C'], ['aaabbb','311F8A54SV9K6B5FF4EAB20536','311F8A54SV9K6B5FF4EAB20536'] ] 修改/app/views.py第行d89f33b18ba2a74cd38499e587cb9dcd为靶机中设置的admin_token值的md5 if('d89f33b18ba2a74cd38499e587cb9dcd'==hl.hexdigest()): 运行 python3 manage.py init python3 manage.py manage.py runserver --insecure 靶机 安装所需环境 靶机:python+requests 修改send_flag.py参数,并将其放入靶机,设权限700。 靶机 sudo python send_flag.py。 靶机生成flag脚本,send_flag.py import requests import time import random import string import hashlib token='woshiwuxudong' # 红队 baji='311F8A54SV9K6B5FF4EAB20536' def getFlag(): #return ''.join(random.sample(string.ascii_letters + string.digits, 48)) m = hashlib.md5(''.join(random.sample(string.ascii_letters + string.digits, 48)).encode(encoding="utf-8")).hexdigest() return m while(1): f=open('/flag','w') flag=getFlag() f.write(flag) data={ 'flag':flag, 'token':token, 'baji':baji, } r=requests.post('http://127.0.0.1/caipanflag/',data=data) print(r.text) f.close() time.sleep(300) 重要须知 更新作者基础上: 1.增加flag验证一次性失效性,使得每个用户都并且仅可以提交一次flag 2.增加排名情况 3.flag改为MD5 4.增加丢失flag一轮扣100分
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super 硕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值