AWD的介绍及平台搭建
本文发布于397天前,本文最后更新于349 天前,其中的信息可能已经过时,如有错误请留言或评论。

很长时间没有写博客了,开学之后一直在复习考研,在看数学,今天开始上微专业课,需要搭建AWD平台,所以特此学习一下WAD,并且记录一下如何搭建。


AWD的介绍

什么是AWD

AWD(attack with defence)攻防兼备模式 AWD模式是一个非常有意思的模式,你需要在一场比赛里扮演攻击方和防守方,攻击成功得分, 失守也会扣除相应的分数。在比赛中,评分的关键点是flag,通过漏洞攻击得到flag,可以获取分数;反之,失守flag会被扣除相应的分数。从而模拟现实的网络攻击防御,以此提高选手的网络攻防能力。

特点: 选手同时具备攻击方和防守方两种角色,对选手的攻击能力、防御能力、团队协作能力及实时 的应变能力都是极大的考验,更偏向实战能力的较量。

比 赛 规 则 和 内 容

  • 一般分配web服务器和pwn服务器(称:gamebox),多数为linux,在某处存在 flag(一般存放在根目录);通常是一个GameBox就是一个题,一场比赛通常是2-3个 GameBox
  • 参赛选手需保证所有GameBox向外映射的所有端口正常开启,且提供的服务功能正常。
  • 尽快修复本团队GameBox上的漏洞,防止其他选手利用相关漏洞攻破GameBox获 取Flag。
  • 尽可能多的获取其他选手GameBox上的Flag串并提交。
  • 可能会提供一台流量分析的虚拟机,可以下载流量文件进行数据分析(较少提供) 比赛一般分为两个阶段,前期加固阶段,后期的攻防阶段(此时还可对自己靶机进行加固操作);
  • 此比赛模式在线下独立局域网模式举行;
  • 比赛前每个队伍有一个初始分值(比如50000分)。
  • Flag会在主办方的设定下每隔一定时间刷新一轮;在同一轮内,无法多次利用同一 对手的同一台GameBox上的Flag得分。
  • 每个队伍的每台GameBox在同一轮中被对手成功获取Flag后会被扣分
  • 裁判方会对所有选手靶机服务进行相关check,宕机扣分(有些比赛会把扣除的分值给check正常的队伍均分);
  • 每个队伍会分配一个低权限账户(非root);
  • 禁止对服务器平台进行攻击Ddos等,一经发现,终止比赛后果自负;

题 目 类 型 分 析

  • 语言:多数php、少数java、python站;
  • 常见出题人自己写的cms,添加对应的漏洞点;
  • 常见或不常见的一些cms,网上均有exp;
  • 一些框架漏洞;(thinkphp、MVC)
  • Pwn
  • WEB:
    • 主要包括HTTP 协议、注入漏洞、XSS 漏洞、SSRF 漏洞、CSRF 漏洞、文件处理漏洞、访问控制漏洞、会话管理漏洞等
  • PHP网站
    • SQL注入
    • 文件包含
    • php反序列化
    • 任意命令执行
    • 任意文件读取
    • 最新cms框架漏洞
  • JAVA网站(Tomcat、Resin、Jboss、Weblogic)
    • 命令执行(JSP一句话木马等)
    • SQL注入
    • 条件竞争(Servlet线程不安全)
    • SSRF
    • 文件上传
    • 代码执行(Java反射机制)
    • 任意文件读取/目录遍历攻击
  • Python网站(Django、flask、Tornado)
    • SQL注入
    • 模板注入 SSTI
    • 任意命令执行
    • 文件上传
    • 文件包含
    • 反序列化
    • 格式化字符串

G e t f l a g

  • 一种flag预留在靶机的根目录或家目录下,getshell后读取flag内容,提交即可得分;
  • 另一种有专门的flag靶机,成功getshell后,通过执行curl http://x.x.x.x/ ,即可从flag服务器中获取flag;

竞赛分工

  • 此类比赛一般为多人成队 建议成员分配:
    • 攻击2人:通过各种手段获取对手flag;
    • 防守2人:对自己靶机持续加固,并进行流量分析和有利信息的及时通报;
  • 注:比赛中可能有多台靶机,也可一人维护一台,根据自己组内选手的专业情况进行 相关分配。

简单介绍就到这里,上面内容都来自老师ppt,还有一些没有放上来。

搭建AWD平台

之前一直用的kali2022,安装了很多东西,今天顺便有时间,安装了个kali2023,然后从头开始配置

Kali换源参考Linux换源

安装docker

sudo apt install docker.io

下载项目

下载后解压到本地,我这里有老师给的包,就没去github下载

git clone https://github.com/zhl2008/awd-platform

拉取镜像

# 拉取镜像,要是下载太慢就换个docker源
sudo docker pull zhl2008/web_14.04
# 重命名镜像
sudo docker tag zhl2008/web_14.04 web_14.04

启动比赛

  1. 进入项目
    cd awd-platform
  2. 创建队伍
    注意这里是python2,使用python3会报错

    python2 batch.py web_yunnan_simple 3
    # 创建了3个队伍,赛题是web_yunnan_simple

    运行结果如下

    [*] copy team1
    [*] chmod all 
    [*] write run.sh team1
    [*] write docker.sh team1
    [*] write flag.py team1
    [*] chmod run.sh & docker.sh team1
    [*] copy team2
    [*] chmod all 
    [*] write run.sh team2
    [*] write docker.sh team2
    [*] write flag.py team2
    [*] chmod run.sh & docker.sh team2
    [*] copy team3
    [*] chmod all 
    [*] write run.sh team3
    [*] write docker.sh team3
    [*] write flag.py team3
    [*] chmod run.sh & docker.sh team3
  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分钟
    sleep_time = 120
  5. 创建好队伍后就可以开始比赛了,输入命令启动比赛
    sudo python2 start.py ./ 3

    启动成功如下

    049fcc5dc65930c09989a822942320e2836ff6dd5b513cce920032f991282753
    [*] start docker team1
    a53beae898ec1443cbbe135c929eabd0e95497826d62de82c07cee2dba7205b2
    [*] start docker team2
    c726b5513076f0cdd3acfe0dd72da830fffdd536040084307919afaa7950de8a
    [*] start docker team3
    9be0a2caf06668880695dbf5b6f6f74c800bf6f1aea769a135682ef0a89b10d3
    [*] start docker check_server
    48446cf723f76a6740a316ef37c3edacc5f7fe35f9e3e8eda0fef008a0c7daff
    [*] start docker flag_server

    这里要用到docker,由于权限问题,所以我这里使用了sudo

  6. 比赛拓扑图
    web站点
    team1:192.168.159.140:8801
    team2:192.168.159.140:8802
    team3:192.168.159.140:8803
    ssh连接
    team1:192.168.159.140:2201
    team2:192.168.159.140:2202
    team3:192.168.159.140:2203
    ssh连接的账号密码在项目下的pass.txt里面

    • ssh的端口规则是:
      • team1 ---- 2201
      • team2 ---- 2202
      • team3 ---- 2203 ....以此类推
      • 想连接到队伍服务器,直接ssh连接即可
        #如下面连接到队伍1的服务器
        ssh -p 2201 ctf@192.168.159.140
  7. 启动check服务器
    cd check_server
    python2 check.py
    # 启动成功如下
    0|0|0
    ******************************************************************
    team1:0*************team2:0*************team3:0*************
    ******************************************************************
    --------------------------- round 0 -------------------------------
    ---------------------------------------------------------------
    checking host: 172.17.0.2
    Host: 172.17.0.2 seems ok
    ---------------------------------------------------------------
    checking host: 172.17.0.3
    Host: 172.17.0.3 seems ok
    ---------------------------------------------------------------
    checking host: 172.17.0.4
    Host: 172.17.0.4 seems ok
  8. 查看实时分数
    直接访问这个网址即可,ip要替换为自己的

    http://192.168.159.140:8080/score.txt
  9. 加分的方法是访问一个为地址并且以get的形式上交flag
    注意替换ip

    http://192.168.159.140:8080/flag_file.php?token=teamx&flag=... (x为队伍号)
  10. 然后就可以看到得分情况

结束比赛

在项目目录下执行以下命令

sudo python2 stop_clean.py

参考

AWD简单介绍和搭建AWD平台:https://blog.csdn.net/kukudeshuo/article/details/120799308

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇