AWD平台搭建与使用入门

简单介绍

比赛规则(新):

  1. 每个队伍分配到一个docker主机,给定ctf用户权限,通过制定的端口和密码进行连接;

  2. 每台docker主机上运行一个web服务或者其他的服务,需要选手保证其可用性,并尝试审计代码,攻击其他队伍;

  3. 比赛开始后,前30分钟,选手维护各自的主机,在这个阶段,所有的攻击和服务不可用不影响分数;

  4. 选手可以通过使用漏洞获取其他队伍的服务器的权限,读取他人服务器上的flag并提交到指定的flag服务器:

    http://flag服务器IP:端口/fflag_file.php?token=队伍token&flag=获取到的flag 来获得相应的分数。

    例如:flag server地址为8.8.8.8,端口为8080,队伍token为team1,flag为40ed892b93997142e46124516d0f5ac0,则请求http://8.8.8.8:8080/fflag_file.php?token=team1&flag=40ed892b93997142e46124516d0f5ac0来获得相应分数。

    每次成功攻击可获得2分,被攻击者扣除2分;有效攻击两分钟一轮;

  5. 选手需要保证己方服务的可用性,每次服务不可用,扣除1分,服务可用,加1分;服务检测两分钟一轮;

  6. 选手可以从flag服务器上获取所有的攻击情况以及当前的分数:

    攻击情况url地址:http://flag服务器IP:端口/result.txt

    得分情况地址:http://flag服务器IP:端口/score.txt

平台搭建

因为平台已经做的比较集成化,所以安装还是很简单的。博主使用的是ubuntu安装。

  1. 首先需要下载赛题项目

    git clone https://github.com/zhl2008/awd-platform
    #这一条命令可以将文件下载到当前工作目录,文件名为awd-platformgit clone https://gitee.com/jikemofan/awd-platform.git
    

    在这里插入图片描述

    因为项目地址是在github上面,所以对某些国内用户可能会有一些网络问题,这里博主搬运了一下,上传到csdn上面了。(点击前往

  2. 然后需要下载docker

    sudo apt install docker.io
    

    这里如果没有更换apt源可能会比较慢,网上搜了一个教程(点击前往),这里不做赘述。在这里插入图片描述

  3. 下载docker镜像

    sudo docker pull zhl2008/web_14.04
    ##下载镜像文件
    sudo docker tag zhl2008/web_14.04 web_14.04
    ##更改镜像名称
    

    在这里插入图片描述
    这里可能会比较慢,换一下docker源就可以了

    vi /etc/docker/daemon.json
    

    在文件中输入

    {
      "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
    }
    

    在这里插入图片描述

    重启服务,之后再次尝试下载

    service docker restart
    
    

    下载好之后改名
    在这里插入图片描述

启动比赛
  1. 首先是确认赛题和队伍数量
    这里的web开头的都是赛题
    在这里插入图片描述
    输入命令创建队伍

    cd ~/awd-platform
    #切换到第一步下载的赛题项目文件夹下面
    python batch.py web_yunnan_simple 2
    

    这里创建了2个队伍,赛题是web_yunnan_simple
    在这里插入图片描述

  2. 根据赛题修改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
            
    
  3. 修改flag刷新时间,同样是check.py文件中,默认120s,2分钟
    在这里插入图片描述

  4. 创建好队伍后就可以开始比赛了,输入命令启动比赛

    python start.py ./ 2
    

    在这里插入图片描述

  5. 查看创建的队伍机器

    输入命令查看创建的虚拟靶机(docker创建的是容器,大家可以理解成为是虚拟机,不做详细介绍)

    docker ps
    

    在这里插入图片描述
    可以看到这里多了2个名字分别为team1和team2的容器,并且观察这2行记录可以得到如下信息。

    主机端口team1靶机端口team2靶机端口
    880180(web服务端口)
    880280(web服务端口)
    220122 (ssh连接端口)
    220222 (ssh连接端口)
  6. 此时可以访问一下team1的网站
    在这里插入图片描述

  7. 运行修改过后的check.py文件
    在这里插入图片描述

得分
  1. 首先看一下当前比分,有2个地方可以看到。
    第一个,访问http://ubuntu主机IP地址:8080/score.txt
    在这里插入图片描述
    很简陋,可以去找一个好看的替换它。
    第二个,在ubuntu终端运行check.py脚本
    在这里插入图片描述

  2. 现在模拟一下team2队拿下team1的flag
    从team1的网站下手,观察了一下为网页,发现网站首页底部有一个命令注入点
    在这里插入图片描述
    3.尝试找到flag
    首先尝试ls根目录
    在这里插入图片描述

    在这里插入图片描述
    发现可以直接输出根目录信息,并且找到敏感信息flag,接下来继续在命令注入点输入cat /flag
    在这里插入图片描述
    在这里插入图片描述

成功找到一个flag。

  1. 提交fiag给自己的队伍加分。

    加分的方法是访问一个为地址并且以get的形式上交flag

    http://ubuntu主机IP地址:8080/flag_file.php?token=teamx&flag=xxxx (x为队伍号)
    

    上传flag,flag正确的话就会显示success(有可能会提示没有这个flag,有可能是flag刷新了,重新去获取一下flag,用新的flag提交)

    在这里插入图片描述

  2. 现在还没有过30分钟的准备阶段,所以现在的攻击是不得分的。

结束比赛
sudo python stop_clean.py

在这里插入图片描述

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
一个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']: 第31和47换为你的目录 列:("/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分
以下是一个简单的Python脚本示例,可用于监控目录中的AWD文件,并在发现新文件时发送电子邮件通知: ```python import os import time import smtplib from email.mime.text import MIMEText # 监控目录 watch_dir = '/path/to/watchdir' # 接收通知的电子邮件地址 notify_email = 'your@email.com' # SMTP服务器信息 smtp_server = 'smtp.email.com' smtp_port = 587 smtp_username = 'your@email.com' smtp_password = 'your_password' # 上次检查的文件列表 last_files = set() while True: # 获取目录中的所有AWD文件 all_files = set() for filename in os.listdir(watch_dir): if filename.endswith('.awd'): all_files.add(filename) # 检查是否有新文件 new_files = all_files - last_files if new_files: # 发送电子邮件通知 msg = MIMEText('New AWD files found: %s' % ', '.join(new_files)) msg['Subject'] = 'AWD file notification' msg['From'] = smtp_username msg['To'] = notify_email server = smtplib.SMTP(smtp_server, smtp_port) server.ehlo() server.starttls() server.login(smtp_username, smtp_password) server.sendmail(smtp_username, notify_email, msg.as_string()) server.quit() # 更新上次检查的文件列表 last_files = all_files # 等待一段时间后再继续检查 time.sleep(60) ``` 要使用此脚本,请将“watch_dir”变量设置为要监视的目录的路径,并将“notify_email”变量设置为您要接收通知的电子邮件地址。还需要将SMTP服务器信息和凭据设置为正确的值。 然后,运行脚本并让它在后台运行。每当新的AWD文件出现在监视目录中时,您将通过电子邮件收到通知。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值