banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

CTFd平台搭建記錄

image

CTFd 簡介#

CTFd 是一個免費的開源 CTF(Capture the Flag)平台,它提供了一套強大的工具和解決方案,用於創建、組織、管理和托管 CTF 比賽和挑戰性活動。CTFd 旨在滿足有各種技能水平和背景的用戶的需求,並提供了易於使用和可配置的界面。

CTFd 支持多種類型的挑戰,包括 Web、逆向工程、加密、二進制文件、取證、雜項等,並提供了多種比賽類型,包括單人比賽、團隊比賽、定向比賽等。

CTFd 還提供了一系列強大的插件和主題,可以根據需求進行配置和擴展。

CTFd 安裝#

  • 通過這篇文章搭建,簡單易懂

https://mp.weixin.qq.com/s/oMI9h_hBc373poVsR2CiVw

上述文章基於的項目地址:

GitHub - Un1kTeam/CTFd: CTFs as you need them

此項目版本是 3.3.0,可以進行漢化,同時也包括了 frp、ctfd-whale @ 138b042,ctf-whale 單獨下載安裝。

大概流程如下:

1、創建一個單個伺服器的集群,然後加入集群

sudo docker swarm init

2、查看節點,取 id 值

sudo docker node ls

3、更新 docker 節點上的標籤(label)信息

sudo docker node update --label-add='name=linux-1' nfvla0597w8zpkoing2mvpe89

4、設置完成後,就可以開始構建鏡像了

sudo docker-compose up -d

5、結束後,打開瀏覽器訪問http://127.0.0.1:9124 端口

注意點:

  • 有時由於網絡問題,可能要多次docker-compose up -d
  • docker 拉環境時,會出現 docker 內部 ubuntu 容器無法訪問 aliyun 源的問題,需要設置 ubuntu 中的 dns 解析,如下:
sudo vim /etc/resolve.conf

nameserver 114.114.114.114
nameserver 223.5.5.5

簡化安裝#

直接用別人做好的虛擬機搭建,自已搭建起來有點麻煩,這裡會記錄一些使用過程中的問題及使用心得。

  • 這裡也有一個自動搭建 ctfd 的腳本,用到的是 nip.io 的域名。

項目地址:GitHub - pwnthebox/ctfd-auto-deploy

sh <(curl -s https://raw.githubusercontent.com/pwnthebox/ctfd-auto-deploy/master/install.sh)

需要手動輸入的值如下:

Http Domain Suffix :域名/ip
External Http Port : 靶機http映射端口 (這裡不能寫 80,因為 80 給了 ctfd)
Direct Minimum/Maximum Port : 靶機端口開放範圍

image

CTFd 環境測試#

打開瀏覽器,輸入http://127.0.0.1:9124訪問,返回如下界面:

image

一步一步設置完,在樣式處,banner 如果尺寸太大有點問題,設置完成後,就可以使用了。

動態靶場配置#

登錄後,進入管理界面,點擊 Whale 插件

image

沒有域名Http Domain Suffix可以不填寫

image

Direct IP Address填寫虛擬機的 ip 地址。

image

創建題目#

選擇dynamic_docker

image

寫題目名、分類、描述等內容,docker image 填寫 docker 鏡像的地址,Frp Redirect Type 換成 Direct,Frp Redirect Port 設置成 docker 容器的內部端口,通常 dockerfile 中指定。

image

題目的分值設定,Initial Value 是初始分值,Decay Limit 衰減次數,一道題被兩次解答後,開始使用 Minimum Value 中設置的分值,Score Type 設置成 Dynamic Score(動態分值),如果把 Decay Limit 衰減次數設置成 0 不進行最小分值設置,那麼 Score Type 只能換成 Static Score(靜態分值)。

image

題目創建完成後,測試下。

image

image

訪問題目環境

image

測試下提交 flag。

image

image

至此,環境搭建完成。

其他一些設置及注意點#

dockerfile 動態 flag 生成#

CMD ["/bin/sh", "-c", "docker-php-entrypoint"]

echo $FLAG > /flag && export FLAG=not_flag && FLAG=not_flag

CTFd 頁面管理設置#

  • 修改首頁

image

<style>
  body {
	  # 替換首頁背景圖片
      background-image: url("/files/f28557e77fc748c85633ae868e2f0742/background.png");
      background-size:cover;
  }
	</div>
	</main>
	<footer class="footer">
		<div class="container text-center">
			<a href="https://ctfd.io" class="text-secondary">
				<small class="text-muted"></small>
			</a>
		</div>
	</footer>
	<script defer src="/themes/core/static/js/vendor.bundle.min.js?d=59b78ea4"></script>
	<script defer src="/themes/core/static/js/core.min.js?d=59b78ea4"></script>
	<script defer src="/themes/core/static/js/helpers.min.js?d=59b78ea4"></script>
	<script defer src="/themes/core/static/js/pages/main.min.js?d=59b78ea4"></script>
</body>
</html>
</style>

CTFd 平台映射到外網#

在 ctfd 平台安裝完成後設置都行,不一定要在 ctfd 平台搭建之前設置,需要設置如下地方,

1、在互聯網出口的路由器上映射平台端口(9124)
2、在互聯網出口的路由器上映射環境端口(28000-28200)
3、配置 whale(如下圖)

image.png

往下拉Frps config template [generated]中設置subdomain_host為公網 ip 或域名。

image.png

如上設置就可以了。

Read-only file system 解決(未測試)#

修改docker-compose.yml文件,第 22 行有個:ro,去掉就行

部分靶場無法訪問互聯網(未測試)#

需要修改 docker-compose.yml 文件,如下圖所示:

image

容器已啟動,如果修改這個地方會報錯

CTFd 漢化#

導入文件到 ctfd 目錄下即可

項目地址:GitHub - Gu-f/CTFd_chinese_CN: 對 CTFd 平台各版本的漢化記錄。key: 中文、漢化、翻譯、chinese、CN、CTFd

漢化版已推送到 hub docker 中。

docker pull liangchenga/ctfd-341_ctfd:latest

參考#

ctfd-whale/install.zh-cn.md at master · frankli0324/ctfd-whale · GitHub

如何正確使用 Docker 出一道 CTF 題目 - Von 的博客 | Von Blog

GitHub - antlers12/CTFd_sqlilabs

CTFd&ctfd-whale 動態靶機搭建與維護・語雀

GitHub - CTFTraining/CTFTraining: CTF Training 經典賽題復現環境

BUUCTF 題目貢獻指南 – glzjin

https://www.lewiserii.top/%E7%AB%9E%E8%B5%9C/ctf%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA%E5%92%8C%E5%87%BA%E9%A2%98%E6%8C%87%E5%8D%97.html

https://www.r00team.cc/wiki/ctf_deploy.html#web%E7%B1%BB

GitHub - frankli0324/ctfd-whale: A plugin for CTFd which allow your users to deploy standalone instances for challenges.

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。