CTFd動態靶機搭建筆記
聲明:本人堅決反對利用文章內容進行惡意攻擊行為,一切錯誤行為必將受到懲罰,綠色網絡需要靠我們共同維護,推薦大家在了解技術原理的前提下,更好的維護個人信息安全、企業安全、國家安全。
CTFd是一個Capture The Flag框架,側重于易用性和可定制性。它提供了運行CTF所需的一切,并且可以使用插件和主題輕松進行自定義。
官方網站:https://ctfd.io/下載ctfd:https://github.com/glzjin/CTFd.git下載frp:https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz下載ctf-whale:https://github.com/glzjin/CTFd-Whale
01
安裝部署frps服務
步驟1. 安裝啟動frps
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz tar -zxvf frp_0.36.2_linux_amd64.tar.gz cd frp_0.36.2_linux_amd64 sudo cp systemd/* /etc/systemd/system/ sudo mkdir /etc/frp sudo cp frpc.ini frps.ini /etc/frp/ sudo cp frpc frps /usr/bin/ sudo chmod a+x /usr/bin/frpc /usr/bin/frps


步驟2. 編輯frps.ini
sudo vim /etc/frp/frps.ini [common] bind_port = 7897 bind_addr = 0.0.0.0 token =thisistoken vhost_http_port=80 #如果是http動態域名需要這個。80端口開啟需要systemmd使用root權限啟用frp
步驟3. 啟動frps服務
sudo systemctl start frps

步驟4. 創建網絡并啟動frpc容器
sudo docker network create ctfd_frp-containers sudo docker network ls

sudo docker run -d -v ~/frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"

注意:如果執行上述命令行,產生的frpc容器一直循環啟動,通過指令docker logs 查看報錯內容為缺少配置文件,則可以將根目錄的frp_0.36.2_linux_amd64文件夾刪除(注意是系統生成的空文件夾),在下載的frp_0.36.2_linux_amd64文件夾目錄執行(本次操作在opt目錄下)
sudo docker run -d -v frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"
步驟5. 創建網絡frpcadmin用于ctfd容器和frpc容器通信
sudo docker network create frpcadmin sudo docker network connect frpcadmin #將frpc和ctfd容器單獨連接到網絡frpcadmin,注意要等容器創建好之后再連接,因此ctfd將在稍后連接 docker network inspect frpcadmin #查看frpcadmin網絡的連接情況并記錄frpc容器的網絡IP

步驟6. 編輯frpc.ini
vim ~/frp_0.36.2_linux_amd64/frpc.ini [common] server_addr = 172.17.0.1 # 這里填寫宿主機ifconfig之后docker0的ip,因人而異,不要一摸一樣填 server_port = 7897 token=thisistoken admin_addr = 172.19.0.2 #這里填寫frpc容器在frpcadmin網絡里的ip,因人而異,不要一摸一樣填,而且要和后續下圖插件配置界面中?的一樣。admin_port = 7400 log_file = ./frpc.log
編輯完之后記得重啟frpc容器

02
安裝靶場與插件
步驟1. 下載靶場與插件
將插件ctfd-whale 下載到CTFd/plugins目錄:
git clone https://github.com/CTFd/CTFd.git cd CTFd/ git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard #回滾到當前教程適合的版本 cd CTFd/plugins #打開ctfd插件目錄 git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale #確保插件文件夾小寫 cd ctfd-whale git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard #回滾到當前教程適合的版本 cd ../.. #返回ctfd主目錄 vim docker-compose.ym
步驟2. 配置docker-compose.yml
version: '2'services: ctfd: build: . user: root restart: always ports: - "8000:8000" #你自己的 environment: - UPLOAD_FOLDER=/var/uploads - DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd - REDIS_URL=redis://cache:6379 - WORKERS=1 - LOG_FOLDER=/var/log/CTFd - ACCESS_LOG=- - ERROR_LOG=- volumes: - .data/CTFd/logs:/var/log/CTFd - .data/CTFd/uploads:/var/uploads - .:/opt/CTFd:ro - /var/run/docker.sock:/var/run/docker.sock #添加這句即可,別的基本按照官方的不用動 depends_on: - db networks: default: internal: db: image: mariadb:10.4.12 #這里改成10.4.12,10.4.13會出錯 restart: always environment: - MYSQL_ROOT_PASSWORD=ctfd - MYSQL_USER=ctfd - MYSQL_PASSWORD=ctfd - MYSQL_DATABASE=ctfd volumes: - .data/mysql:/var/lib/mysql networks: internal: # This command is required to set important mariadb defaults command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0] cache: image: redis:4 restart: always volumes: - .data/redis:/data networks: internal:networks: default: external: name: frpcadmin internal: internal: true
步驟3. 重新build后啟動ctfd
FROM python:3.6-alpineRUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\ apk update && \ apk add python3 python3-dev linux-headers libffi-dev gcc make musl-dev py-pip mysql-client git openssl-dev g++RUN adduser -D -u 1001 -s /bin/bash ctfdWORKDIR /opt/CTFdRUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploadsRUN pip3 config set global.index-url https://pypi.doubanio.com/simpleRUN pip3 config set install.trusted-host pypi.doubanio.comCOPY requirements.txt .RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simpleCOPY . /opt/CTFdRUN for d in CTFd/plugins/*; do \ if [ -f "$d/requirements.txt" ]; then \ pip install -r $d/requirements.txt -i https://pypi.doubanio.com/simple; \ fi; \ done;RUN chmod +x /opt/CTFd/docker-entrypoint.shRUN chown -R 1001:1001 /opt/CTFdRUN chown -R 1001:1001 /var/log/CTFd /var/uploadsUSER 1001EXPOSE 8000ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]
步驟4. 構建啟動鏡像。
docker-compose build docker-compose up -d
步驟5. 將ctfd連接frpcadmin網絡
docker network connect frpcadmin

03
CTFd部署及插件配置
步驟1. 啟動ctfd后進入管理頁面選擇插件

步驟2. 填寫相關參數
進入后隨便設置,然后進Admin Panel進行設置
屬性 配置 Docker API URL unix://var/run/docker.sock Frp API IP frpc的ip配置 Frp API Port frpc的端口配置 Frp Http Domain Suffix Docker API URL to connect(可填None) Frp Http Port 80 Frp Direct IP Address 你的公網ip,本機即為127.0.0.1 Frp Direct Minimum Port 與之前frps最小端口呼應 Frp Direct Minimum Port 與之前frps最大端口呼應 Max Container Count 不超過最大-最小 Max Renewal Times 最大實例延時次數 Frp config template 填入frps的配置,只需填[common] Docker Auto Connect Containers ctfd_frpc_1 Docker Dns Setting 可填機器內DNS,沒有可填個外網DNS Docker Swarm Nodes linux-1 與前面swarm集群呼應 Docker Multi-Container Network Subnet 內網題大子網ip配置/CIDR Docker Multi-Container Network Subnet New Prefix 每個內網題實例的CIDR Docker Container Timeout 單位為秒 |
最后附上我的配置圖片



示例:接下來帶領大家創建一個web容器:
首先通過命令行,下載容器鏡像,記錄好鏡像名稱,然后在challenge進行配置:




版權申明:內容來源網絡,版權歸原創者所有。除非無法確認,都會標明作者及出處,如有侵權,煩請告知,我們會立即刪除并致歉!