python竞赛内存,GitHub - yangshuangfu/AWD_Platform: 基于python+docker的AWD平台,用于内部对抗训练以及培训使用。用python来控制docker...

本文介绍了一个基于Python和Docker的AWD对抗训练平台,可用于内部比赛。它支持远程部署,易于扩展,且需6GB以上内存。讲解了如何配置数据库、环境启动与管理,包括mysql设置、docker服务搭建等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTF-AWD 训练平台

[TOC]

项目简介

基于python+docker的AWD平台,用于内部对抗训练以及培训使用。

bigscreen.png

n1.png

n2.png

n3.png

特点

docker化,简易部署

可部署在公网上,远程AWD攻防

训练环境可自定义扩展

10支队伍建议内存保障在6G以上

已知BUG

由于python2/3以及flask版本区别,在server.py中,判断session是否是admin的地方有可能会因为字段不同而到达不了后台,各位需要自行调试,server.py行号280、289、321、367

session.get('user_id')

session.get('_user_id')

基本使用方式

准备 docker 服务

准备 mysql ,并建立 awd 数据库 ,请一定要设定字符集为 utf-8 ,不然会报错

mysql> drop database awd;

mysql> CREATE DATABASE IF NOT EXISTS awd DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysql> use mysql;

mysql> update user set authentication_string=PASSWORD("你的密码") where user='root';

mysql> update user set plugin="mysql_native_password"; # 不用修改, 直接执行

mysql> flush privileges;

mysql> quit;

$ sudo service mysql restart

# 这个时候就可以用刚刚设置的root密码登录mysql了

# 解决mysql容器只能建立23个的问题,需要执行

# sudo sysctl -w fs.aio-max-nr=2097152

pip install -r requirements.txt

编辑 model.py 修改数据库配置

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://debian-sys-maint:Ihpz39779MWqW4zq@127.0.0.1:3306/awd?charset=utf8&autocommit=true" # 设定数据库用户密码

编辑 users.txt

teamname username userpassword # 设定队伍账号密码

编辑 start.py

npcteams = 2 #额外的npc队伍

启动比赛环境

python start.py # 一键启动比赛环境

python server.py # 启动竞赛平台

退出环境

python stop.py

#由于docker的卷比较占磁盘空间,建议本环境只提供比赛docker,方便将多余的container和卷一起删除,stop.py执行完后在shell中执行下面命令

docker container prune && docker volume rm $(docker volume ls -qf dangling=true)

自定义比赛环境

subject #比赛环境目录

规则

主机信息

队伍分配主机,通过指定的端口和密码进行连接

主机上运行一个web或多个服务,需要选手保证其可用性审计代码,攻击其他队伍

通过漏洞获取其他队伍主机权限,读取服务器上的flag并提交到flag服务器

攻击检测

每次成功攻击,攻击队伍可平分该flag的200分,被攻击者扣除200分,轮询时间1分钟

选手需要保证己方服务的可用性,服务故障扣除200分,被服务无故障的队伍平分,轮询时间1分钟

得分在下一轮开始时计算

其他

选手可以获取所有的攻击情况以及当前的分数,刷新间隔1分钟

不允许使用任何形式的DOS攻击

更新

2019-12-10

应网友要求,做了一个大屏展示效果,访问路径 /index

2019-11-29

应网友要求,做了一个五毛动画效果,太丑不敢放上来

2019-11-8

添加退出按钮

修改平台启动后暂不启动 docker , 设置比赛时间后,以时间为准启动 docker 和 刷新 flag

2019-11-8

版本重大更新,更漂亮的界面

添加一队多个环境

2019-10-28

版本重大更新,核心代码重构

user.txt 添加队伍名

一只队伍同时开启多个awd环境

check状态和被攻击状态展示

取消自动 pull images,需要管理员提前做好镜像

添加后台功能,可以设置比赛标题、开始及结束时间、每个环境起始分数,被攻击扣分,被check扣分,即时生效

bugs fixed

太晚了,队伍功能暂时放一下,队伍重启功能准备放到后台管理执行,下次更新

2019-10-13

修复环境初始化吊死的问题

解决mysql容器只能建立23个的问题,需要执行 sudo sysctl -w fs.aio-max-nr=2097152

捐助

如果您觉得该训练平台对您有帮助,欢迎给予我们一定的捐助,也是帮助该训练平台更好的发展。

11.jpg

22.jpg

捐助墙

日期

捐助者

金额

2019.10.10

*璇

0.4

2019.10.11

*璇

666

2019.11.8

*亮

66.66

2019.11.25

跪*

1.00

2019.11.25

跪*

50

2019.12.12

*齢松

30

一个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分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值