基于Cardinal的AWD攻防平台搭建与使用以及基于docker的题目环境部署

关于 CTF 靶场的搭建与完善勇师傅前面已经总结过了,参考:

CTF靶场搭建及Web赛题制作与终端docker环境部署_ctfoj搭建-CSDN博客 

基于H1ve一分钟搭好CTF靶场-CSDN博客

Nginx首页修改及使用Nginx实现端口转发_nginx 修改欢迎首页-CSDN博客 

关于H1ve导航栏的汉化(不用替换主题,通过修改源码实现)_h1ve 更换页面-CSDN博客

这次给大家出一个 AWD 平台的搭建与题目环境的部署,期待大家的支持与关注!

 

 文章开始前给大家分享一个学习人工智能的网站,通俗易懂,风趣幽默

人工智能教程 icon-default.png?t=N7T8https://www.captainbed.cn/myon/

目录

一、搭建 awd 平台

二、平台的基本使用

1、队伍管理

2、题目管理

3、 靶机管理

(1)普通用户权限的 ssh 账户

(2)root 权限的 ssh 账户

4、配置管理

5、Flag 管理

6、大屏管理

7、flag 提交

三、docker 题目环境部署

1、web 题目

2、pwn 题目

3、docker-compose.yml

四、其他补充

1、Flag SSH 用户

(1)直接对容器进行操作

(2)进入容器后修改

2、将 Cardinal 放入后台运行

3、新比赛的创建与配置


一、搭建 awd 平台

参照官方给的手册:安装 | Cardinal

下载地址:Releases · 05sec/Cardinal (github.com)

下载适合自己的版本然后解压,这里以 Linux 64 位为例:

tar -zxvf Cardinal_v0.7.3_linux_amd64.tar.gz

可以看到 Cardinal 具有可执行权限,运行 Cardinal:

./Cardinal

按照自己需求配置一下,默认选项直接回车,输错了也没关系这个配置文件后面可以改

配置文件在 conf 下的 Cardinal.toml

后面每次比赛开始前我们都需要手动进行修改后再运行 Cardinal

关于前面配置报错:

[FATAL] [...am/Cardinal/internal/db/mysql.go:24 InitMySQL()] Failed to connect to mysql database: Error 1045: Access denied for user 'test'@'localhost' (using password: YES)

因为我们的 mysql 数据库下还没有 test 这个用户,我们需要手动创建并赋予权限 ,test 这个用户相当于是我们平台的一个后台管理账户,因此这里直接给 root 权限。

在你装好 mysql 数据库的前提下执行如下命令

进入 mysql :

mysql -u root -p

为 MySQL 数据库创建用户 test,密码为 test,并赋予 root 权限:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

创建我们比赛需要使用的数据库,上面我配置的名字叫 testdb:

create database testdb;

再次运行 Cardinal,即可加载成功:

./Cardinal

输入我们前面设置的管理员账号和密码,都是 test 

访问平台的 19999 端口,即可看到靶场搭建成功

访问后台管理平台:19999/manager

使用管理员账号密码进行登录:test test

至此我们完成了平台的基本搭建与初始化。

 

二、平台的基本使用

第一个界面是数据大屏,我们放在最后说,一般我们是需要先在队伍管理里面创建队伍。

1、队伍管理

这里以创建两个队伍为例做演示:

添加后你会得到两个队伍的登录账号和密码:

请保存队伍密码

账号:test1 密码:2z7jRpKzb8Yz3YO1

账号:test2 密码:yjm7GNtrqECP7ZnB

队伍创建成功:

如果你忘了保存,可以在编辑里面重置密码:

我们使用其中一个账号进行登录测试:test 2z7jRpKzb8Yz3YO1

这里是选手进行登录,还是访问 19999 端口

登录成功 

 

2、题目管理

添加新题目

比赛的时候需要设为可见,每个队伍才能看到相应的题目信息

 

3、 靶机管理

添加靶机,关于题目 IP 和端口,以及 SSH 连接的端口、密码,我会在后面的制作 docker 题目环境中介绍,因为题目环境也需要我们自己进行搭建和配置。

添加后测试 SSH 连接:SSH 连接成功!

看到这里你可能还不明白这个 ssh 连接是拿来干啥的,准确来说,每个题目环境,我们需要手动配置两个 ssh 连接的用户:

(1)普通用户权限的 ssh 账户

选手拿到题目地址和连接地址后,需要通过 ssh 连接上我们的靶机,去对 /var/www/html 下的文件进行分析和修复,该账户只能更改 html 目录下的文件,其他目录下的文件是没有写入权限的。

(2)root 权限的 ssh 账户

我们需要有一个 root 权限的用户去对根目录下的 flag 进行写入,每一轮结束后我们需要自动写入一次新的 flag,这就是我们上面填的 Flag SSH 用户。

访问题目地址,我这里设置的 2001 端口,这个是我之前已经搭好的一个题目环境:

4、配置管理

这里可以手动设置比赛名以及 flag 的包裹格式

5、Flag 管理

首先我们需要生成每一轮的 flag

回到靶机管理更新所有的 flag

我们可以连上靶机终端看一看 flag,已经更新成我们要求格式的了

6、大屏管理

参考官方使用手册自行下载与配置:简介 | Cardinal

7、flag 提交

接下来我们测试一下 flag 提交:

这道题有一个自带木马

SNERT{69a21c21949e2f06a7d94157ed96fe01d4d25e05}

这是从 team2 的靶机上拿到的 flag,因此我们使用 team1 的账号进行提交:

三、docker 题目环境部署

这里以 team2 的题目为例,有四个题:web1、web2、pwn1、pwn2

这四个题是属于一个队伍的,也就是说其他的每个队伍都有这四个题,都需要重新拉取独立的容器,而每个题目至少需要使用到两个端口,一个是题目所在的地址,另一个是选手进行 ssh 连接的地址,包括 ssh 连接的账号和密码也需要我们提前手动配置好后再拉取 docker 容器。

1、web 题目

给大家看看 web1 题目下有哪些东西:

包括两个东西,一个是 Dockerfile,另一个就是我们的题目文件,也就是 html 下的文件。 

 Dockerfile 需要针对自己的题目对一些文件名进行修改

 下面主要是对选手 ssh 连接的用户名、密码、文件目录权限、暴露端口的一些配置

附上 web1 题目的 Dokcerfile ,仅供参考:

FROM ubuntu:14.04

COPY html/ /var/www/html/

RUN sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/mirrors.tuna.tsinghua.edu.cn\/ubuntu\//g' /etc/apt/sources.list && \
    sed -i '/security/d' /etc/apt/sources.list && \
    apt-get update -y && \
    apt-get -yqq install supervisor mariadb-server apache2 php5 libapache2-mod-php5 \
    php5-mysql php5-mcrypt ssh && \
    # config
    sed -i "154s/Indexes//" /etc/apache2/apache2.conf && \
    sed -i "165s/Indexes//" /etc/apache2/apache2.conf && \
    /etc/init.d/apache2 start && \
    # mysql
    rm -rf /var/lib/mysql && \
    mysql_install_db --user=mysql --datadir=/var/lib/mysql && \
    sh -c 'mysqld_safe &' && \
    sleep 5s  && \
    mysqladmin -uroot password '334cc35b3c704593' && \
    mysql -e "source /var/www/html/geez.sql;" -uroot -p334cc35b3c704593
    # supervisor
RUN mkdir -p /var/log/supervisor && \
    mv /var/www/html/supervisord.conf /etc/ && \
    #
    chown -R www-data:www-data /var/www/html/ && \
    chmod -R 755 /var/www/html/ && \
    rm /var/www/html/geez.sql /var/www/html/index.html && \
    cat /dev/null > /var/www/html/log.php

RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN useradd -g www-data team2 -m && \
    password=$(openssl passwd -1 -salt 'abcdefg' 'V7d4pW9x2T') && \
    sed -i 's/^team2:!/team2:'$password'/g' /etc/shadow

RUN chmod -R 777 /var/www/html

RUN mkdir /var/run/sshd

RUN echo 'flag{team2_wants_a_girl_friend}' > /flag

EXPOSE 80
EXPOSE 22

ENTRYPOINT ["supervisord", "-n"]

 

2、pwn 题目

 接下来我们看一下 pwn 题下面是个什么情况:

flag 其实不影响,因为最终都会被我们更新 flag 所替换,主要是另外两个文件,一是 Dockerfile,二是我们 pwn 题的附件。

pwn 题附件就是我们正常 CTF 题目的附件

附上 pwn 题参考 Dockerfile: 

# 使用基础镜像
FROM ubuntu:22.04@sha256:b492494d8e0113c4ad3fe4528a4b5ff89faa5331f7d52c5c138196f69ce176a6

# 更新软件包列表并安装所需软件包
RUN apt-get update && \
    apt-get install -y openssh-server socat && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 创建 SSH 服务运行目录
RUN mkdir /var/run/sshd

# 添加用户 team2
RUN useradd -m -s /bin/bash team2

# 设置用户 team2 的密码
RUN echo 'team2:testtest123' | chpasswd

# 配置 SSH 服务以允许 root 登录和密码认证
RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config && \
    echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && \
    echo 'ChallengeResponseAuthentication no' >> /etc/ssh/sshd_config && \
    echo 'UsePAM yes' >> /etc/ssh/sshd_config

# 设置工作目录并复制文件
WORKDIR /app
COPY pwn2 flag /app/

# 设置文件权限
RUN chmod +x /app/pwn2 && \
    chmod a-w /app/pwn2 && \
    chmod a-w /app/flag && \
    chown -R root:root /app

# 设置 app 目录及其内容的所有者为 team2 用户,并赋予 team2 用户对该目录及其内容的写入权限
RUN chown -R team2:team2 /app && \
    chmod -R u+w /app

# 暴露 SSH 端口 22 和 socat 服务端口 9999
EXPOSE 22 9999

# 启动 SSH 服务和 socat 服务
CMD ["/bin/bash", "-c", "service ssh start && socat TCP-LISTEN:9999,reuseaddr,fork EXEC:/app/pwn2"]

3、docker-compose.yml

附上 docker-compose.yml,仅供参考:

需要结合自己题目的实际情况进行修改,主要就是对端口做映射

version: "3"
services:
    pwn1:
       build: ./pwn1
       ports:
           - "2003:9999"
           - "2004:22"
       restart: always

    web1:
       build: ./web1
       ports:
           - "2001:80"
           - "2002:22"
       restart: always  # 确保缩进正确
    pwn2:
       build: ./pwn2
       ports:
           - "2007:9999"
           - "2008:22"
       restart: always

    web2:
       build: ./web2
       ports:
           - "2005:80"
           - "2006:22"
       restart: always  # 确保缩进正确

当我执行:

docker-compose up -d --build

就可以一并拉取出四道题目的环境,两道 web 和两道 pwn 

根据这些端口号和账户密码去对应填写靶机信息即可

 

四、其他补充

1、Flag SSH 用户

关于我们用于更新 flag 的 root 用户(Flag SSH 用户),这个可以等容器创建好后,对 root 用户的密码进行修改。

两种方法:

(1)直接对容器进行操作

docker exec -it mycontainer passwd root

(2)进入容器后修改

docker exec -it d3d01433b376 /bin/sh
password

当我们修改不同密码后,SSH 连接就失败了

改回 123456 即我们添加靶机时填写的密码,再次测试:连接成功!

2、将 Cardinal 放入后台运行

正常 ./ 执行我们需要一直在这个终端挂着,否则 Cardinal 就会断掉,靶场页面也就无法访问。

使用命令实现一直运行:

nohup ./Cardinal &

查看 19999 端口的进程:

lsof|grep 19999

这样,即使我们关闭终端,Cardinal 也会一直处于运行状态。

3、新比赛的创建与配置

当比赛时间结束或者说我们想要创建一个新的比赛,需要先修改 conf 里面的配置文件

主要是这三个:开始时间、结束时间、数据库名

需要在 mysql 数据库里新建一个用于新的比赛的数据库,之后运行 Cardinal 即可。

关于平台的其他功能各位可以自行研究, awd 靶场搭建以及基本使用与 docker 题目环境部署的介绍至此结束。

人工智能教程icon-default.png?t=N7T8https://www.captainbed.cn/myon/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768612.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Winform使用HttpClient调用WebApi的基本用法

Winform程序调用WebApi的方式有很多,本文学习并记录采用HttpClient调用基于GET、POST请求的WebApi的基本方式。WebApi使用之前编写的检索环境检测数据的接口,如下图所示。 调用基于GET请求的无参数WebApi 创建HttpClient实例后调用GetStringAsync函数获…

2.4 C#开发环境 xml格式保存参数----范例实现

2.4C#开发环境 xml格式保存参数----范例实现 1 程序参数保存目录层次说明 1 选择程序号| 相机号|窗口号 2 导入参数:就会从本地目录读取参数,并且显示图片和ROI 3 保存参数:把当前控件图片和ROI信息保存到指定程序号|相机号|窗口号中 2 参数…

剪映数字人口播原理终于搞清楚了

剪映版本升级了,新版本支持数字人定制,于是我赶紧申请了使用资格 目前的价格是49元单个价格/30天 支付49元之后剪映要求上传2.5至10分钟的视频 接着要阅读一段话并录制视频上传 第三步提交,提交完成之后大概两三个小时就会有一个特定数字人形象出现:

不只是咨询,更是转型加速器——精益生产咨询!

以前咱们说精益生产,总觉得是套现成的模板,每家企业都得照葫芦画瓢。但现在不一样了,精益生产咨询就像是个高级定制师,它深入了解你的企业现状、行业特点、市场趋势,然后给你量身打造一套专属的精益转型方案。这种既接…

java内存管理机制详解之运行时数据区

正文 C与java之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外的人想进去,墙里的人却想出来…… 与C、C程序员时刻要关注着内存的分配与释放,会不会又有哪里出现了内存泄露不同是,java程序员可以“高枕无忧”。因为…

Visual Studio 中的键盘快捷方式

1. Visual Studio 中的键盘快捷方式 1.1. 可打印快捷方式备忘单 1.2. Visual Studio 的常用键盘快捷方式 本部分中的所有快捷方式都将全局应用(除非另有指定)。 “全局”上下文表示该快捷方式适用于 Visual Studio 中的任何工具窗口。 生成&#xff1…

【C语言】指针经典例题

题1&#xff1a; #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 解答如下&#xff1a; 题2&#xff1a; #include <std…

Access数据操作

Access Access 作为 Office的组件之一&#xff0c;在很多 Excel难以施展其能力的场所&#xff0c;也能轻松应对。同为Office组件之一的Excel具有灵活的数据处理和分析能力&#xff0c;然而&#xff0c;其能力是有局限的&#xff0c; 比如当涉及两个数据表之间的“关联”操作时&…

【分布式数据仓库Hive】HivQL的使用

目录 一、Hive的基本操作 1. 使用Hive创建数据库test 2. 检索数据库&#xff08;模糊查看&#xff09;&#xff0c;检索形如’te*’的数据库 3. 查看数据库test详情 4. 删除数据库test 5. 创建一个学生数据库Stus&#xff0c;在其中创建一个内部表Student&#xff0c;表格…

快速下载!Windows 7旗舰版系统:集成所有补丁!

微软对Windows7系统停止支持后&#xff0c;Windows7设备不再收到安全补丁程序、修补程序。尽管如此&#xff0c;许多用户仍然认为Windows7是最好用、最经典的系统。有用户就特别喜欢Windows7旗舰版系统&#xff0c;那么接下来系统之家小编为大家带来的全补丁版本的Windows7系统…

互联网应用主流框架整合之SpringCloud微服务治理

微服务架构理念 关于微服务的概念、理念及设计相关内容,并没有特别严格的边界和定义,某种意义上说,适合的就是最好的,在之前的文章中有过详细的阐述,微服务[v1.0.0][Spring生态概述]、微服务[设计与运行]、微服务[v1.0.0][服务调用]、微服务[开发生命周期]、微服务[面临的…

LLM应用:传统NLP任务

LLM出来以后&#xff0c;知乎上就出现了“传统NLP已死”的言论&#xff0c;但是传统NLP真的就被扔进历史的垃圾桶了吗&#xff1f; 其实&#xff0c;尽管LLM具有出色的通用能力&#xff0c;但仍然无法有效应对低资源领域的自然语言处理任务&#xff0c;如小语种翻译。为了更好地…

springboot+vue+mybatis前台点菜系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

Linux静态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&a…

【目标检测】DINO

一、引言 论文&#xff1a; DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 作者&#xff1a; IDEA 代码&#xff1a; DINO 注意&#xff1a; 该算法是在Deformable DETR、DAB-DETR、DN-DETR基础上的改进&#xff0c;在学习该算法前&#…

一个专为Android平台设计的高度可定制的日历库

大家好&#xff0c;今天给大家分享一个高度可定制的日历库kizitonwose/Calendar。 Calendar专为Android平台设计&#xff0c;支持RecyclerView和Compose框架。它提供了丰富的功能&#xff0c;允许开发者根据需求定制日历的外观和功能。 项目介绍 此库是开发Android应用时&…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验14 聚合了不存在的网络导致的路由环路问题

一、实验目的 1.验证由于聚合了不存在的网络而导致静态路由的路由环路问题&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证路由…

【最长公共前缀 动态规划】2430. 对字母串可执行的最大删除数

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 最长公共前缀 动态规划 动态规划汇总 LeetCode 2430. 对字母串可执行的最大删除数 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a; 删除 整个字符串 s &#xff0c;或者 …

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)一些样式的调整使用

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、比如下面的发起人双击后出现的界面不正常&#xff0c; 看它的样式主要是这个里面的margin-left应该太小了&#xff0c; [data-v-45b533d5] .el-tabs__content { margin-top: 50px;mar…