题目构建

赛题全部使用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. phpCOW机制(写时复制)

    写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改. COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C ...

  2. Django基础013--redis开发

    1.redis配置 在settings.py中加入以下代码块,可支持多个redis的配置 1 CACHES = { 2 "default": { 3 "BACKEND&q ...

  3. python 实时监控剪切板,并替换其中的部分内容,重新写入剪切板

    #实时监控剪贴板内容的变化,并替换其中的回车,换行,逗号,再写入剪切板,以供使用. import pyperclip import time last_string = pyperclip.paste ...

  4. JAVA程序系统测试感受

    JAVA课程才刚刚开始,就仿佛经历了一场劫难,让我们叫苦连天,苦不堪言.暑假学的一些皮毛java知识,到了真正需要写一个相对完整的软件系统,就如同废材一样,实在是用不上来.我看着小民哥布置的考试内容, ...

  5. 【学习笔记】conda总结

    conda常用命令 conda create -n name python=x.x #创建环境 conda activate name #进入环境 conda deactivate #退出环境 con ...

  6. 数组去重汇总—v客学院技术分享

    上周基础班结束了数组的学习内容,这几天有时间整理了下几种比较常用的数组去重的方法供大家查阅!!!!! 话不多说,直接贴代码吧~~~~~~~ 欢迎大家指正,共同学习,一同进步!!! (php开发,web ...

  7. 深入GraphQL 的使用语法

    深入GraphQL 的使用语法 对于GraphQL 的使用语法在上一节中已经大概介绍了基本的使用方式了,这一篇将会对上一篇入门做拓展,努力将所有的使用语法都覆盖到. 1. 终端语法 首先是介绍在前端查 ...

  8. PHP获取当日或本月时间戳范围

    在mysql数据库中使用int类型保存时间戳时,一般在程序中可能会用到统计当日,当月的一些数据.那么可以用如下的方式限定时间范围:   //当日销售 $today_start = strtotime( ...

  9. 【分布式锁】通过MySQL数据库的表来实现-V1

    一.来源 之所以要写这篇文章是因为想对自己当前的分布式知识做一个归纳.今天就先推出一篇MySQL实现的分布式锁,后续会继续推出其他版本的分布式锁,比如通过Zookeeper.Redis实现等. 二.正 ...

  10. P2015

    二叉苹果树 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include< ...