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.pswp.cn/news/160203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用ChatGPT創建Makefile構建系統:使用Make運行Docker

使用ChatGPT創建Makefile構建系統:使用Make運行Docker 芯語芯愿(知乎/紛傳/CSDN/);小石頭的芯語芯愿(微信公眾號) 開發高效現代的構建系統對于滿足開發周期需求至關重要。原先,嵌入式開發者一…

Unity 場景烘培 ——LensFlare鏡頭光暈(三)

提示:文章有錯誤的地方,還望諸位大神指出! 文章目錄 前言一、鏡頭光暈 (Lens Flares)是什么?二、使用Lens Flares組件總結 前言 一般情況下都會忽略的東西,鏡頭光暈。理論上不加鏡頭光暈,也不會有什么影響…

vue3的兩個提示[Vue warn]: 關于組件渲染和函數外部使用

1. [Vue warn]: inject() can only be used inside setup() or functional components. 這個消息是提示我們,需要將引入的方法作為一個變量使用。以vue-store為例,如果我們按照如下的方式使用: import UseUserStore from ../../store/module…

數據治理之考評環節

考評的流程(批處理) 周期調度,每天一次:采集hive, hdfs元數據存放到mysql中的dga庫的metainfo表手動通過管理頁面補充輔助信息指標考評 讀取要考評的表的元數據及輔助信息讀取要考評的指標對每張表的每個指標逐個進行考評保存考評…

RabbitMQ快速入門(簡單收發消息)

文章目錄 前言一、數據隔離1.用戶管理2.virtual host 二、控制臺收發1.交換機2.隊列3.綁定 三、編程式收發1.依賴和配置2.收發信息 總結 前言 1.了解數據隔離 2.RabbitMQ控制臺收發信息 3.SpringBoot整合RabbitMQ收發信息 一、數據隔離 1.用戶管理 點擊Admin選項卡&#xff0…

mmdet全教程

官方給的文檔一言難盡,網上的教程又沒有從大綱到源碼的完整解讀,計劃年后開個系列記錄一下

依賴庫:Ceres-solver-2.0.0安裝

依賴庫:Ceres-solver-2.0.0安裝 前言安裝ceres-solver-2.0.0驗證 前言 Ceres Solver是谷歌開源的C非線性優化庫,能夠解決有約束或無約束條件下的非線性最小二乘問題。2010年之后大量的運用在谷歌的產品開發中,尤其在谷歌開源的cartographer中…

圖像分類單張圖片預測準確率達到百分之百

在圖像分類任務中,針對單個圖片得到100%的準確率是有可能但極其罕見的,并且不代表模型在整個測試集上也能達到100%的準確率。 ??針對單個圖片獲得100%準確率的情況可能包括以下幾種情形: 圖片本身特殊性: 如果測試集中的某張圖片在訓練集中…

【python基礎(1)】變量和簡單數據類型

文章目錄 一. 變量的命名和使用二. 字符串1. 修改字符串的大小寫2. 在字符串中使用變量3. 使用制表符或換行符來添加空白4. 刪除空白 三. 數1. 整數2. 浮點數3. 整數和浮點數4. 數中的下劃線5. 同時給多個變量賦值6. 常量 三. 注釋四. Python之禪 一. 變量的命名和使用 變量規…

各種LLM數據集包括SFT數據集

各種LLM數據集包括SFT數據集 數集介紹和 hf上的名字對話數據生成方法交通領域數據集SFT 的解釋數集介紹和 hf上的名字 通用預訓練數據集 SFT datasets SFT 數據集 50萬條中文ChatGPT指令Belle數據集:BelleGroup/train_0.5M_CN 100萬條中文ChatGPT指令Belle數據集:BelleGrou…

C++學習 --stack

目錄 1, 什么是stack 2, 創建stack 2-1, 標準數據類型 2-2, 自定義數據類型 2-3, 其他創建方式 3, 操作stack 3-1, 賦值 3-2, 插入元素(push) 3-3, 查詢元素 3…

Linux的簡單使用

Linux命令使用技巧 Tab鍵自動補全連續兩次Tab鍵,給出操作提示使用上下箭頭快速調出曾經使用過的命令使用clear命令或者Ctrll快捷鍵實現清屏Linux的常用命令 命令作用詳細說明ls [-al] [dir]顯示指定目錄下的內容 -a 顯示所有文件及目錄 (. 開頭的隱藏文件也會列出) …

sonar對webgoat進行靜態掃描

安裝sonar并配置 docker安裝sonarqube,sonarQube靜態代碼掃描 - Joson6350 - 博客園 (cnblogs.com) 對webgoat進行sonar掃描 掃描結果 bugs Change this condition so that it does not always evaluate to "false" 意思是這里的else if語句不會執行…

“我,24歲,年薪20萬”:選對了行業究竟多重要?

那些在職場上順風順水,按部就班拿到高薪的人都有什么特點? 今天的主人公Flee告訴我,是穩。 在她的故事里,我看到一個“別人家的姑娘”,是怎樣在職場上穩步晉升,大學畢業僅2年,就拿到18.6K月薪&a…

「go查漏補缺」命名規則以及 GROM 結構體的應用

概述: 在學習GORM過程中,總是在調用結構體和文件導入這里出錯,所以整理了以下文檔用于梳理變量/結構體命名規則和import導入的知識點 一、變量/結構體命名規則 變量/結構體都遵守同樣的命名規則:可見性由首字母大小寫決定 大寫…

單一職責原則 (Single Responsibility Principle)

定義: 單一職責原則指一個類應該僅有一個引起它變化的原因。這個原則強調一個類應該只負責一個功能領域中的相應職責,或者可以理解為一個類應該只有一個改變的原因。 解決的問題: 降低類的復雜度,一個類只負責一項任務會更加清…

2022年12月 Scratch(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 一個骰子,從3個不同角度看過去的點數如圖所示,請問5的對面是什么點數?(?) A:1 B:3 C:4 D:6 答案:A 根據圖三,用右手定則,大拇指朝上指向6所對的方向,其余四指握起來…

目標檢測框存在內嵌情況分析與解決

這里寫目錄標題 問題描述原因分析與解決方法:后續及思考參考文檔 問題描述 目標檢測模型輸出的檢測框存在內嵌情況。 原因分析與解決方法: 根據經驗,第一感覺是后處理nms部分出了問題。來看下對應的代碼: static float CalcIou…

通過對比 入庫申請->入庫審核流程 與 直接入庫 代碼實現,解決前者誤修改stock_info表is_in=1或2數據的bug

入庫申請->入庫審核流程&#xff1a; 提交按鍵定義位置&#xff1a;src\views\purchase\rurchase\RurchaseAdd.vue <a-button click"handleSubmit" type"primary" :loading"loading">確認物品已入庫</a-button> <template&…

二、類與對象(二)

8 this指針 8.1 this指針的引入 我們先來定義一個日期的類Date&#xff1a; #include <iostream> using namespace std; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year <&l…