题目构建

赛题全部使用docker部署,需准备check脚本和镜像

镜像构建注意事项

1、注意web目录权限

2、注意服务是否自启动

3、修改ssh配置

4、创建flag文件并修改权限为600

这里基础镜像建议采用下面这两个,原因很简单,比较小,便于移植

ctfhub/base_web_nginx_mysql_php_56
ctfhub/base_web_nginx_mysql_php_73
docker pull ctfhub/base_web_nginx_mysql_php_56
docker run -itd --name aaaa -p 9002:80 -e "FLAG=CTFTraining{ctfhub/base_web_nginx_mysql_php_56}" ctfhub/base_web_nginx_mysql_php_56 // 启动基础镜像
docker cp xxx.zip aaaa:/var/www/html // 复制源码到镜像中
docker exec -it aaaa /bin/sh // 进入镜像
在镜像内操作,该镜像默认没有ssh服务需要手动添加
docker commit aaaa awd_xxx // 操作完毕后生成新镜像
注意生成后测试镜像是否合格
上传到dockerhub
docker login // 登录dockerhub
docker tag awd_xxx nmsldd/awd_xxx // 修改镜像标签为自己的名字
docker push nmsldd/awd_xxx:v1 // 上传镜像
打包到本地
docker save imagesid > xxx.tar // 打包到本地
zip -r xxx.zip xxx.tar // 记得压缩
docker load < xxx.tar // docker导入

由于基础镜像是alpine,这里还是简单记录一下操作

添加用户
adduser ctf
修改密码
echo -e “rootpwd\nrootpwd” | passwd ctf
安装ssh服务
apk add openssh-server
apk add openssh-client

平台构建

这里后端采用的Cardinal

前端采用Asteroid_Standalone

后端部署流程

下载代码后直接执行,根据提示创建配置即可

后面在启动时就可以直接更新配置,如果说创建新比赛的话,建议清空数据库,要不可能会存在数据上的问题

本地mysql注意要创建Cardinal数据库

wget https://github.com/vidar-team/Cardinal/releases/download/v0.7.3/Cardinal_v0.7.3_linux_amd64.tar.gz // 下载最新版
tar zxf Cardinal_v0.7.3_linux_amd64.tar.gz // 解压缩
CREATE DATABASE `cardinal` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; // mysql连接后 建立cardinal数据库
./Cardinal // 启动平台后端 第一次启动会让输入管理员账号和密码
IP:19999 // 选手登入页面
IP:19999/manager // 管理员页面

登录管理员页面如下



要组织一场比赛,主要需要配置以下内容

1、队伍管理,添加队伍

2、题目管理,添加题目

3、靶机管理,添加外部靶机,批量添加

4、flag管理,生成flag

5、公告管理,发布提示

6、配置管理,更改配置

7、账号管理,添加check账号等

功能还是挺全面的,配置起来也很简单

外部靶机和平台通信主要是用于更新flag文件,所以配置好地址的ssh账号和密码即可

前端展示

修改配置文件

配置文件路径地址 Asteroid_Data/StreamingAssets/asteroid.ini

修改接口配置为自己的

[connect]
url = ws://ip:19999/api/asteroid
image_url = http://ip:19999/api/uploads

批量启动

这里写了一个脚本

脚本实现的功能了以下功能,批量创建docker,启动docker,重置队伍靶机,清理环境。

对于不同的docker环境,其启动的命令不尽相同,所以在一些情况下需要修改generate_run_sh函数中的启动命令,修改后docker在启动后会逐步执行

docker启动时默认会映射8801-8899,2201-2299端口,如果有其他端口需要映射出来,需要修改generate_docker_sh函数内容

最后脚本会在执行目录下生产各个队伍的文件夹,同时还有pass.txt文件。

pass.txt文件内容格式为

队伍ID:ssh账户:密码
team1:ctf:925d18e2f1a984caf29ee8de890c2819

check

最后根据题目编写相对应的check脚本就好了

配置好下面参数,post请求即可
checkapi = "http://ip:8888/api/manager/checkDown"
checkapi_token = '4443d148-a2d5-4e39-a483-e0e050c883e7'

AWD比赛组织指南的更多相关文章

  1. 代码审计-四叶草杯线下awd比赛源码web2

    今晚简单来看看那天比赛的源码吧,比赛的时候还是有些慌没有好好去静下心看代码. awd给的题中的漏洞,都是那种可以快速让你利用拿到权限后得到flag的那种,特别复杂利用的一般没有. 建议先黑盒去尝试,例 ...

  2. AWD比赛常规套路

    作者:Leafer   本文属于Arctic shell原创内容计划文章,转载请注明原文地址! 比赛环境:纯净win10,最新版kali,securecrt或者WinSCP 在进入服务器后应进行的常规 ...

  3. 关于参加AWD攻防比赛心得体会

    今天只是简单写下心得和体会 平时工作很忙 留给学习的时间更加珍少宝贵. 重点说下第二天的攻防比赛吧  . 三波web题 .涉及jsp,php,py. 前期我们打的很猛.第一波jsp的题看到有首页预留后 ...

  4. AWD攻防工具脚本汇总(一)

    最近工作很忙 今天抽空准备下AWD比赛得攻防工具和脚本 以下只是常用 希望下周不被吊锤~~ 后续整理后想抽空写成一个攻击框架汇总放github~~ 这里从各种情景和需求中去总结工具和脚本的使用   情 ...

  5. 线下AWD平台搭建以及一些相关问题解决

    线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...

  6. AWD不死马与克制方法

    一个简单的不死马如: <?php ignore_user_abort(true); set_time_limit(0); unlink(__FILE__); $file = '.3.php'; ...

  7. Java 编程入门(词汇表)

    抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...

  8. Java编程入门(词汇表)

    抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...

  9. Dream team: Stacking for combining classifiers梦之队:组合分类器

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

随机推荐

  1. PE文件头格式解析

    前言: 昨天写了一题de1ctf的题,发现要脱壳,手脱之后发现要iat修复,我就发现自己在这块知识缺失了,win逆向,好像一直都是打ctf,然后用逆向方法论去肝的 其他方面倒是没有很深入学习,但实际上 ...

  2. Swoole实现毫秒级定时任务

    项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole ...

  3. 利用C语言判定用户输入数据从而给出结果(利用判定用户体重范围)同求最优解!!!

    例子: 要求:医务工作者通过广泛的调查和统计分析,根据成人的身高与体重因素给出了按"体质指数"进行判断的方法,具体如下: 体质指数t=体重 w/(身高h)2(w的单位为kg,h的单 ...

  4. Linux系统引导过程及排除启动故障

    一.Linux操作系统引导过程二.系统初始化进程1.init进程2.Systemd3.Systemd单元类型三.排除启动类故障[1].修复MBR扇区故障(含实验过程)[2].修复GRUB引导故障●方法 ...

  5. Javascript闭包解析----------------v客学院技术分享

    跟java,php等编程语言一样,javascript也采用词法作用域,简单的来说就是函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的.为了实现这种词法作用域,还必 ...

  6. Python - list 列表常见方法

    list.append(x) 介绍 在列表的末尾添加一个元素 相当于  a[len(a):] = [x] 返回值 None 栗子 # append a = [1, 2, 3] b = [4, 5, 6 ...

  7. SpringBoot+Redis 实现消息订阅发布

    什么是 Redis Redis 是一个开源的使用 ANSI C语言编写的内存数据库,它以 key-value 键值对的形式存储数据,高性能,读取速度快,也提供了持久化存储机制. Redis 通常在项目 ...

  8. Servlet 单例多线程详解(六)

    一.Servlet 单例多线程 Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  9. 解决proto文件转换时提示“Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it. ”

    前言: 想将.proto文件转换成.pb文件时一直报错,一开始以为是文件编码格式的问题,后来将文件改成windows下的utf-8格式后,又出现了新的报错(见下图).百度了很久,才找到解决方法. &q ...

  10. 2021零售商业智能(BI)的 8大好处

    零售业的商业智能现在比以往任何时候都更加重要.客户数据不仅可以用来击败竞争对手,还可以用来识别模式和行为,确定哪些产品和服务适合当下销售,以及如何瞄准新市场. 什么是零售业的商业智能? 商业智能是使用 ...