ctf簡(jiǎn)單出題流程
ctf簡(jiǎn)單出題流程
文件介紹
index
src 寫(xiě)一些題目的文件
index.php
dockerfile
首先肯定是要安裝好Docker的
Docker的流程網(wǎng)上有,這里就不再追述了
首先可以查看鏡像
sudo docker images

文件創(chuàng)建
我們可以在我們的/app目錄下創(chuàng)建一個(gè)文件夾用于存儲(chǔ)我們的文件index
sudo mkdir index
god@localhost:/app$ sudo mkdir index
我們創(chuàng)建好了文件夾之后,進(jìn)入文件夾。
在新的文件夾中創(chuàng)建新的目錄文件src
sudo makir src
god@localhost:/app/index$ sudo mkdir src
然后創(chuàng)建一個(gè)配置文件dockerfile
god@localhost:/app$ cd index
god@localhost:/app/index$ sudo mkdir src
god@localhost:/app/index$ sudo touch dockerfile
god@localhost:/app/index$ ls
dockerfile src
god@localhost:/app/index$

然后在src下創(chuàng)建index.php
<?php phpinfo();
然后在dockerfile里面寫(xiě)入
FROM ctftraining/base_image_nginx_mysql_php_56
COPY src /var/www/html
基于一個(gè)已有的鏡像 ctftraining/base_image_nginx_mysql_php_56 來(lái)構(gòu)建新的鏡像。
把當(dāng)前目錄下的 src 文件夾中的所有文件,復(fù)制到容器內(nèi)的 /var/www/html 目錄下。
這個(gè)目錄是 Nginx 默認(rèn)的 Web 根目錄,也就是說(shuō),你的網(wǎng)站代碼(PHP、HTML、JS 等)會(huì)被放到這里,供瀏覽器訪問(wèn)。
god@localhost:/app/index$ cat dockerfile
FROM ctftraining/base_image_nginx_mysql_php_56
COPY src /var/www/html
god@localhost:/app/index$
構(gòu)建文件
先到文件夾/app/index中
sudo docker build -t index:v1 .

鏡像已經(jīng)準(zhǔn)備好了
然后用
sudo docker images

啟動(dòng)docker
sudo docker run -d -p 2555:80 index:v1
2555:80端口映射
| 段落 | 含義 |
|---|---|
sudo |
以管理員身份運(yùn)行,避免權(quán)限不足。 |
docker run |
啟動(dòng)一個(gè)容器。 |
-d |
后臺(tái)運(yùn)行(detach),容器不會(huì)霸占當(dāng)前終端。 |
-p 2555:80 |
端口映射:把宿主機(jī)的 2555 端口映射到容器內(nèi)部的 80 端口。 |
index:v1 |
使用剛才構(gòu)建的鏡像。 |

修改完必須把容器刪了才能重新開(kāi)啟
把容器停掉和刪除容器
# 1. 停容器
sudo docker stop 300c2a6cc488
300c2a6cc488 id號(hào)
# 2. 刪容器
sudo docker rm 300c2a6cc488
# 3. 再刪鏡像
sudo docker rmi index:v1
修改網(wǎng)頁(yè)文件構(gòu)建真正題目
index.php
<?php
error_reporting(0);
highlight_file(__FILE__);
include 'flag.php';
if (isset($_GET['flag'])) {
echo $flag;
} else {
echo '666';
}
?>
flag.php
<?php
$flag="flag{123456}"
直接運(yùn)行
sudo docker build -t index:v1 .
sudo docker run -d -p 2555:80 index:v1
god@localhost:/app/indexsudo docker build -t index:v1 .
[+] Building 3.7s (7/7) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 165B 0.0s
=> [internal] load metadata for docker.io/ctftraining/ba 3.1s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 456B 0.1s
=> CACHED [1/2] FROM docker.io/ctftraining/base_image_ng 0.0s
=> [2/2] COPY src /var/www/html 0.2s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:62ef83cb7df28e6cac2bd047958b7 0.0s
=> => naming to docker.io/library/index:v1 0.0s
god@localhost:/app/index$ sudo docker run -d -p 2555:80 index:v1
da1df97450eed98d71a2061114e930d50fc36a11ef27a7665c4fd7c86a2366d5


改進(jìn)
由于上面的問(wèn)題總是要重新啟動(dòng)容器才能對(duì)修改的內(nèi)容起作用,所以進(jìn)行方案調(diào)整
把一堆 Docker 參數(shù)從命令行搬進(jìn)文件,讓“基礎(chǔ)設(shè)施”可復(fù)制、可版本化、一鍵啟停。
我們可以運(yùn)用一個(gè)東西進(jìn)行掛載
啟動(dòng)docker-compose.yml
version: "2"
services:
web:
image: ctftraining/base_image_nginx_mysql_php_56
container_name: index
ports:
- "2556:80"
volumes:
- ./src/index.php:/var/www/html/index.php
- ./src/flag.php:/var/www/html/flag.php
啟動(dòng)
sudo docker-compose up -d
sudo docker compose up -d
如果沒(méi)安裝
# Ubuntu / Debian 示例
sudo apt update
sudo apt install docker-compose -y

然后我們更改內(nèi)容的時(shí)候就不需要重新啟動(dòng)容器了
想停止
cd /app/index # 確保和 docker-compose.yml 同目錄
sudo docker compose down # 停+刪容器+網(wǎng)

浙公網(wǎng)安備 33010602011771號(hào)