CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

 写在前面

╔══════════════════════════════════════════════════════════════════════════╗

哈喽大家好!我是Myon,趁着我的云服务器还没过期,这次给大家出一期很详细的CTF比赛的靶场搭建以及关于Web赛题的制作与docker环境的部署教程,由于本人能力有限,也只能给大家讲一些基础简单的东西,欢迎大家在评论区互相交流学习,希望通过这篇博客大家能学到一些新东西,也期待大家的关注和支持!

╚══════════════════════════════════════════════════════════════════════════╝

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

因为这种CTF的靶场我之前搭过,如果你们看过我之前写的博客就知道,之前介绍的是单纯基于CTFd搭建,而这次是基于H1ve(这个外观看着更好)。我们学校上次的CTF比赛就是我负责搭建和运维的,以及Pwn和Web赛题的环境部署,后面我会一并介绍。

先给大家看一下成品效果图

首页:

排行:

challenges:

公告:

写这篇博客主要是对之前一些内容的补充和总结吧,如果在阅读过程中有不懂的也欢迎大家参考我前面的文章,在《网站搭建》专栏里,再次感谢大家的支持和关注!

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

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用服务器:centos8               OK正文开始   ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

目录

Part1、CTF靶场搭建

1、从github上克隆H1ve

2、安装 docker

3、安装 python-pip 

4、安装 docker-compose 

5、拉取镜像并启动 Single Mode

6、将H1ve整个目录下的所有容器设置为自启动

Part2、Web赛题制作与终端docker环境部署

1、题目文件的制作

(1)files文件夹

(2)Dockerfile

​(3)docker-compose.yml

2、docker环境部署

3、赛题前端部署

4、终端赛题运维


Part1、CTF靶场搭建

如果是新的服务器是没有git命令的,我们先安装

yum install git

1、从github上克隆H1ve

位置大家随便放就行了,我这里是在root目录下创了一个Myon的文件夹然后克隆到里面

git clone https://github.com/D0g3-Lab/H1ve.git

克隆好之后,我们还需要先安装一些东西

设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、安装 docker

yum install -y docker-ce

 看到complete代表安装完成

我们查看一下docker的版本并设置开机自启动

docker versionsystemctl start dockersystemctl enable docker

接着我们安装 docker-compose

(这个docker-compose命令在后面拉取镜像以及赛题的环境时会经常用到)

3、安装 python-pip 

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

注意这里默认安装的pip会导致一个错误,先不要执行下面命令,先看后面的报错解释

默认安装的是Python2.7的版本,而这里我们需要Python3版本的pip

✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧ ✦ ✧

yum -y install epel-releaseyum -y install python-pip

看到complete则代表安装成功,我们也可以使用命令检查一下

pip -V

但是当我们尝试安装 docker-compose 时就会遇到报错

pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

大概意思就是我们的pip版本太老了,找不到合适的 docker-compose 版本满足

 尝试升级pip版本 

pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pip

但是大概率你们会遇到以下的报错:

Could not find a version that satisfies the requirement docker-compose (from versions: )
No matching distribution found for docker-compose

You are using pip version 8.1.2, however version 23.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

解决方法:安装python3的pip

由上面pip -v我们知道默认安装的是Python2.7的版本

因此这里我们安装Python3的pip并且进行升级

yum install python3-pippip3 install --upgrade pip

可以看到 pip 成功升级到21.3.1 

 之后的pip操作都用pip3代替

4、安装 docker-compose 

pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple 

可以看到安装成功,至于那个warning不用管它

接下来我们进入到之前克隆好的H1ve目录下

修改配置文件

(这一步最好先不要操作,因为我不确定后面的报错是否与这步有关,建议先尝试直接进行后面的镜像拉取操作,如果有问题可以尝试删掉H1ve再次克隆)

sed -i 's/mariadb:10.4/mariadb:10.4.12/g' single.ymlsed -i 's/mariadb:10.4/mariadb:10.4.12/g' single-nginx.yml

5、拉取镜像并启动 Single Mode

docker-compose -f single.yml up

遇到如下的报错:

ERROR: manifest for mariadb:10.4.12.12.12.12 not found: manifest unknown: manifest unknown 

这种情况意思是docker需要我们指定下载镜像的版本号

但是我并没有找到解决办法,因此我替换了它的single.yml文件

然后就可以拉取了(我怀疑是前面修改配置文件导致的)

之后访问 8000 端口

但是这个主题不一样,就是纯CTFd的版本

接着我又尝试拉取了一下我之前搭建的版本镜像

然后我又对比了一下两者的文件信息,发现文件名并没有什么差别,但是内容应该是有差别的

于是我删掉了H1ve重新克隆进行测试

确定是否因为修改配置文件导致single.yml出了问题

克隆好之后什么都不要做,进入目录直接拉取,居然成了

接着尝试拉取Single-Nginx Mode 

docker-compose -f single-nginx.yml up

 这里可以拉取成功但是无法访问

修改配置文件进行验证,发现也可以拉取成功

就很奇怪了,当然不排除是我拉取之前的版本时对我刚从github上克隆下来的版本环境这些有影响

总的来说给大家的建议就是克隆好之后先直接尝试拉取镜像,如果不行再设置配置文件,操作错误也可以尝试删除H1ve之后重新克隆。

顺便说一下,你们还需要确保用到的端口那些是允许的,在服务器的安全组规则里面设置。

当然如果你希望直接访问ip就到靶场,那么这里可能需要设置代理转发,将80端口转发到8000。

(在我之前讲的完全基于CTFd搭建的那个里是不需要的,直接访问ip即是靶场首页)

具体内容可以参考我之前的博客:《基于云服务器的博客和靶场搭建-经验教训》

怎么说呢,这个github克隆的H1ve项目感觉有点问题,因此下面我用自己之前的版本继续后面操作

关于我之前搭建那个版本的H1ve,如果可以我会放到资源里面,比github上的好多了)

我们需要将与H1ve有关的容器都开启并设置为自启动

查看容器

docker ps -a

启动容器 

docker start 容器名

6、将H1ve整个目录下的所有容器设置为自启动

docker update --restart=always $(docker ps -aq)

 查看开启的容器

docker ps

现在我们不用再拉取镜像,直接访问靶场地址+端口号即可,靶场将一直处于开启状态

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

接下来进入第二部分 ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Part2、Web赛题制作与终端docker环境部署

为了方便测试,我这里将服务器的所有端口都开放了,你们可以根据题目所在的端口自行添加

1、题目文件的制作

每个网页它至少应该包含一个index.php或者index.html(首页文件)

我们先做一个最简单的web题,比如将flag藏在一个网页的源码里

该文件命名为index.php,内容如下图

内容可能看着复杂,其实它就是一个页面而已。 

(1)files文件夹

这样我们的题目文件就有了,新建一个文件夹files,将这个文件index.php放到files目录下

(为什么文件夹叫files,因为后面我会给你们两个模版文件,按照我说的来就行)

当然如果你会自己写Dockerfile和docker-compose.yml,那么你可以自己想怎么来就怎么来。

我让ChatGPT写过,是可行的,但是这里我主要是讲基础的套路方法,所以给你们模版,按照我说的来,你就可以部署简单的web赛题。

除了files,我们还需要另外两个文件:

(2)Dockerfile

(这个文件你可以直接用,不用修改)

内容如下:

FROM php:5.6-fpm-alpineRUN rm -rf ar/wwwml/*COPY ./files ar/wwwmlEXPOSE 80WORKDIR ar/wwwml
CMD ["php", "-S", "0.0.0.0:80"]



(3)docker-compose.yml

(这个文件需要将端口修改为你自己题目部署在的端口)

内容如下:

version: "2"services:web:build: .restart: alwaysports:- "0.0.0.0:8001:80"environment:- FLAG=Myon{s0_eaSyest_wEb_fl2}

关于第二个文件内容解释:

0.0.0.0:8001:80  # 题目部署在8001端口,选手访问8001端口即可访问到题目环境

80是ngnix所在端口,具体取决于自己环境,一般都是在80,当然我之前部署Pwn赛题时遇到过其他问题,需要修改配置文件的,具体你们可以参考我之前的博客:

《基于CTFTraining在CTFd部署Web题目》 和

《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》

FLAG=Myon{s0_eaSyest_wEb_fl2}  # 这个其实后面我发现它似乎没什么影响,因为正确的flag是你自己放在文件里的,除非题目是那种与环境变量有关系的可能会影响,因此保险起见,你可以把这里的FLAG值改为自己题目的flag值,只是为了进一步确保一致。

其他内容保持不变。

将上述文件:files、Dockerfile、docker-compose.yml 统一放进一个新的文件夹

为了方便记忆和运维,我喜欢以题目名字来命名,比如就叫 f12 (查看源码的题)

这样我们web赛题的文件就都准备好了,将f12这个文件夹放入终端

我这里先建了一个testctf的文件夹,里面用来存放CTF赛题

新建文件夹的命令

mkdir 文件夹名

传文件的话我比较喜欢用xftp,直接拉动或者粘贴复制

2、docker环境部署

进入f12这个目录,使用命令拉取镜像

docker-compose up -d

拉取成功后,使用命令查看该容器

docker ps

访问该题目所在端口,这里是8001

使用F12,在网页源码里找到flag

3、赛题前端部署

那么关于赛题如何放上去,添加到我们靶场的前端,设置flag,分数这些,在我博客《基于CTFTraining在CTFd部署Web题目》里面已经详细讲过,这里就不再赘述。

http://t.csdnimg.cn/TRiOo

链接应该会过期,你们直接搜索我博客的名字即可找到,或者在《网站搭建》的专栏里面

此外,我这里还有一些其他类型的Web题的源码,小游戏、基本传参、php反序列化、命令执行、文件上传、php绕过、信息泄露这些题搭建起来还是很容易的,欢迎大家找我交流讨论。

sql注入的话就需要结合数据库了,有些题的源码也可以让ChatGPT帮写。

4、终端赛题运维

如果我们部署docker环境时遇到问题,比如无法访问,或者有些文件信息没有修改,但是又已经拉取了题目的镜像环境,那么我们就需要先删除这个容器,然后重新拉取:

查看题目容器名字

docker ps

使用命令删除有问题的容器

docker rm -f 容器名

此时题目页面已经无法访问

但是,重点来了,我们还能直接使用docker-compose up -d去拉取吗

这样操作是不行的,拉取之后你会得到一个与你删除前一样的容器,尽管你已经修改了文件内容

这个问题还是可以看我之前的博客《基于xinetd部署pwn题(百分百搭成并且可以nc靶场地址)》

http://t.csdnimg.cn/3QPno

因为docker搭建的是一个容器,你可以理解为一个独立的环境,里面的文件所在路径这些是不一样的。为什么我们敢把漏洞直接部署在自己的服务器上,正因为docker的安全性还是很强的,当然也可能存在docker容器逃逸到本地,但是一般用docker搭建的东西还是很安全的,就算容器里的东西被打烂了,也不会影响到你服务器本地的东西,它是一个单独的环境。

要想真正替换掉题目环境,正确的操作有两种:

方法一:重命名题目文件夹(比如f12改为F12)使用mv命令

当然你需要确保你重命名的名字是未被拉取过镜像的名字,即一个全新的名字

mv f12 F12

这个时候,我们进入到F12进行镜像拉取,也是使用

docker-compose up -d

方法二:删除所有未使用的网络,未使用的网络是不被任何容器引用的网络。

docker network prune

因为这个网络原本的容器已经被我们删除了,但是它的网络还存咋,但是未被容器引用,所以需要先清除掉,之后再进行镜像拉取才会拉取到你修改后的文件内容。

建议使用方法二,不过也可以用重命名的方法,等未使用的网络堆积一段时间后再统一进行清除。

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

文章至此结束 希望你们看完有所收获 期待大家的关注与支持 ◉ ‿ ◉

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 synchronized 原理

目录 一. 前言 二. Java对象的内存布局 2.1. 对象头 2.2. Mark Word 2.3. Class Metadata Pointer 2.4. Length 三. 偏向锁 3.1. 偏向锁的工作流程 3.2. 偏向失效 3.2.1. 误区一 3.3. 偏向撤销 3.3.1. 误区一 3.4. 偏向撤销的底层实现 3.5. HashCode与偏向撤销 …

前端入门(二)Vue2基本语法、样式渲染、数据代理与监测

文章目录 Vue简介Vue的特点Hello, Vue Vue基本语法模板语法数据绑定(v-bind、v-model)el与data的两种写法 事件处理(v-on:click / click)事件修饰符键盘事件(缺) 计算属性与监视(computed、watc…

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py,运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行,如果未出现预期结果,可以把e…

邦永PM2项目管理系统 SQL注入漏洞复现

0x01 产品简介 邦永PM2项目管理系统科学地将项目管理思想和方法和谐、统一,使得长期以来困扰项目管理工作者的工期、进度、投资和成本情况无法整体动态管理的问题得到了全面而彻底的解决。 0x02 漏洞概述 邦永科技PM2项目管理平台Global_UserLogin.aspx接口处未对用…

QT搭建的Ros/librviz的GUI软件

1.前言 开发初期学习了下面博主的文章,也报了他在古月局的课,相当于感谢吧。 ROS Qt5 librviz人机交互界面开发一(配置QT环境)-CSDN博客​​​​​​​r 软件前期也是参考他的开源项目 GitHub - chengyangkj/Ros_Qt5_Gui_App …

拆解现货黄金隔夜利息计算公式

在讨论现货黄金投资手续费的时候,隔夜利息是经常被忽略的一个方面,但它是投资者不得不考虑的成本因素,特别是在中长线交易的情况下。隔夜利息是根据投资者的持仓数量和交易方向所计算出的利息,如果投资者需要持仓过夜,…

APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…

【亚太杯思路助攻】2023年第十三届APMCM亚太地区大学生数学建模竞赛——(文末领取方式)

2023年第十三届APMCM亚太地区大学生数学建模竞赛——来啦!!! 大家准备好了吗?别担心,【数模加油站】会像数模国赛、研赛一样,第一时间提供无偿解题思路、代码、参考文献等资料帮助大家。 祝各位小伙伴都能…

性能测试:系统架构性能优化思路

今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。 系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题&#x…

什么是索引下推

索引下推介绍 索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

sso 四种授权模式

单点登录 单点登录,英文是 Single Sign On(缩写为 SSO)。即多个站点共用一台认证授权服务器,用户在站点登录后,可以免登录访问其他所有站点。而且,各站点间可以通过该登录状态直接交互。例如: …

Instant Web API .Net Core Crack

Instant Web API .Net Core 是立即构建即时数据库 Web API,无需编码。在几分钟内生成您的 Web API,以更快地构建应用程序。使用 VS 2022 和 Entity Framework Core 为任何 MS SQL 数据库生成 Web API。 新功能 - 使用 Visual Studio 2022 为 PostgreSQL …