準備工作
安裝docker
sudo apt-get update
sudo apt-get install -y docker.io
這裡要耐心等待
systemctl start docker
systemctl enable docker
設定開機就啟動docker
systemctl enable docker
檢視docker是否安裝成功
docker -v
驗證一下是否裝好
pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝docker-compose
然後是安裝H1ve
git clone https://github.com/D0g3-Lab/H1ve.git
先進入到H1ve目錄
然後docker-compose -f single.yml up
拉取映象
docker update --restart=always $(docker ps -aq)
此命令將各個容器都設定成自啟動
CTFd-Owl
參考:https://5ime.cn/h1ve.html
後臺導航欄-->Plugins-->CTFd-Owl
或者 靶場地址/plugins/ctfd-owl/admin/settings
Docker Settings
Docker Flag Prefix
:動態生成的flag字首Docker APIs URL
:API名字(預設為unix://var/run/docker.sock)Max Container Count
:最大啟動容器數量(預設無限制)Max Renewal Time
:最大容器延長時間(超過將無法延長,達到時間後會自動摧毀)
FRP Settings
FRP Http Domain Suffix
:FRP域名字首(如開啟動態域名轉發必填)FRP Direct Ip Address FRP
:frp伺服器IPFRP Direct Minimum Port
:最小埠FRP Direct Maximum Port
:最大埠FRP Config Template Frpc
:熱過載配置頭模版(如不會自定義,儘量按照預設配置)
[common]
token = random_this
server_addr = frps
server_port = 80
admin_addr = 0.0.0.0
admin_port = 7400
題目編寫
目錄結構
test # 題目存放資料夾必須小寫英文
├─ Dockerfile
├─ docker-compose.yml
├─ files
│ ├─ index.php
│ └─ start.sh
└─ flag
Dockerfile
FROM php:7.3-apache
COPY files /var/www/html
RUN chmod 755 /var/www/html && \
chown root:root /var/www/html && \
chmod +x /var/www/html/start.sh
CMD /var/www/html/start.sh
EXPOSE 80
docker-compose.yml
version: '2'
services:
service:
# build 該置頂目錄下的dockerfile
build: .
# image 指定build Dockerfile生成映象的名稱
image: test
ports:
- 9999:80
volumes:
# 掛載的 Flag
- "$PWD/flag:/flag"
tty: true
networks:
- net
networks:
# 配置docker network
net:
external:
name: h1ve_frp_containers
files/start.sh
#!/bin/bash
v=`cat /flag`
cat /var/www/html/index.php | sed -i "s/flag{test_flag}/$v/" /var/www/html/index.php # 用於正則匹配flag並替換
apache2-foreground
files/index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>測試題目</title>
</head>
<body>
flag{test_flag}<!--這裡會被start.sh替換成動態flag-->
</body>
</html>
flag
flag{this_test_flag}
docker搭建環境部署ctf題目
參考:https://blog.csdn.net/q20010619/article/details/108587879
拉取映象
docker search lamp
docker pull tutum/lamp #隨便pull了一個lamp
docker images 檢視映象
啟動容器
docker run -it -d --name=myweb -p [host port]:[docker port] [image]
#對映埠前首先確定埠沒有被佔用lsof -i :8080
#-d //容器後臺執行。
#-p //指定對映埠。
#--name=myweb //容器命名
#-it //是以互動模式執行容器
eg:
docker run -it -d --name=myweb -p 78:80 -p 3306:3306 docker.io/linode/lamp
將伺服器apach2的78埠對映到docker的80埠,將3306mysql對映到docker上3306埠
重啟
systemctl restart docker
環境已經搭建完畢,可以將ctf題目原始碼複製到container的主目錄中
docker cp ez_php a9277ea0259a:var/www/html
#docker cp [本地路徑] [container id]:[container 路徑]
進入docker container
docker exec -it 763c32535da7 /bin/bash
#如果從這個容器退出,不會導致容器的停止,推薦使用 docker exec
#-i //讓容器的標準輸入保持開啟。
#-t //讓docker分配一個偽終端並繫結到容器的標準輸出上。
進入容器中的資料庫,建立好ctf題目需要的資料庫、資料表等等(資料庫密碼為空)
cd var/www/html
mysql -uroot -p
之後訪問網站就行
匯出容器
docker export 1e560fca3906 > example.tar