本文介紹如何在 Ubuntu Linux 中使用 Docker 快速搭建 Kali Linux 與各種 CVE 漏洞靶機的環境,透過 PentestCode 進行滲透測試演練。
建立 Docker 網路環境
我們希望將 Kali Linux 攻擊機與各種 CVE 漏洞的靶機都放在相同的 Docker 網路環境內,所以先在 Docker 內建立一個 pentest01 網路環境:
# 建立 Docker 網路環境
docker network create pentest01
確認新的 pentest01 網路環境有成功被建立:
# 檢查 Docker 網路環境
docker network ls
NETWORK ID NAME DRIVER SCOPE c05c983cd706 bridge bridge local f41726edfac5 host host local 38a1ba1521c1 none null local 14f3e931d7e9 pentest01 bridge local
Vulhub 靶機
Vulhub 上面有各種類型漏洞的靶機,先將整個專案下載下來:
# 下載 Vulhub 專案原始碼
git clone --depth 1 https://github.com/vulhub/vulhub.git
建立一台 CVE-2021-42013 靶機,先進入 CVE-2021-42013 對應的靶機目錄,將預設的 docker-compose.yml 備份起來:
# 進入 CVE-2021-42013 靶機目錄
cd vulhub/httpd/CVE-2021-42013
# 備份原始 Docker Compose 設定檔
cp docker-compose.yml docker-compose.yml.default
修改 docker-compose.yml 的內容,設定容器名稱,並且加入預先建立好的 pentest01 靶機網路:
services:
web01:
# 設定容器名稱,不要暴露 CVE 編號
container_name: web01
build: .
# 設定靶機網路
networks:
- pentest01
# 使用 PentAGI 建立好的靶機網路
networks:
pentest01:
name: pentest01
external: true
修改好之後,用 Docker Compose 啟動靶機:
# 啟動靶機,背景執行
docker compose up --detach
由於 Vulhub 的靶機預設會用漏洞的 CVE 編號作為容器名稱,這會讓 AI 直接識別出該漏洞,為了讓測試更符合真實情況,建議把容器名稱改為比較普通的名字。
再建立另外一台 CVE-2021-3129 靶機,做法都類似,只不過要注意容器名稱要用不一樣的:
# 進入 CVE-2021-3129 靶機目錄
cd vulhub/laravel/CVE-2021-3129
# 備份原始 Docker Compose 設定檔
cp docker-compose.yml docker-compose.yml.default
修改 docker-compose.yml 的內容:
services:
web02:
image: vulhub/laravel:8.4.2
# 設定容器名稱,不要暴露 CVE 編號
container_name: web02
# 設定靶機網路
networks:
- pentest01
# 使用 PentAGI 建立好的靶機網路
networks:
pentest01:
name: pentest01
external: true
啟動靶機,讓它背景執行:
# 啟動靶機,背景執行
docker compose up --detach --build
Docker 執行 Kali Linux 攻擊機
為了讓 PentestCode 可以有最大的權限與空間,也避免污染自己的主機環境,我們用 Docker 建立一台 Kali Linux 攻擊機,讓 PentestCode 的所有執行動作都關在這台 Docker 容器內。
# 執行 Kali Linux 容器
docker run --hostname kali --name kalilinux --network pentest01 -t -d kalilinux/kali-rolling:latest
建立一台 Kali Linux 的 Docker 容器,並放在背景執行之後,我們可以用以下指令進入這台 Docker 容器,進行各種操作。
# 進入 Kali Linux 容器環境
docker exec -it kalilinux bash
第一次進入 Kali Linux 的 Docker 容器時,先把套件的鏡像站改為離自己比較近的站點,再安裝 Kali Linux 的基本套件:
# 使用交大資工的套件鏡像站(Kali Linux 容器內)
cd /etc/apt/sources.list.d
sed -i 's!http\.kali\.org!kali.cs.nycu.edu.tw!' kali.sources
# 更新並安裝基本套件(Kali Linux 容器內)
apt update && apt -y install kali-linux-headless
接著安裝一些自己需要的工具:
# 安裝基本工具(Kali Linux 容器內)
apt install -y iputils-ping
# 安裝 uv(Kali Linux 容器內)
curl -LsSf https://astral.sh/uv/install.sh | sh
檢查一下攻擊機與靶機的網路是否正常:
# 確認靶機網路連線(Kali Linux 容器內)
ping web01
若可以成功連線至靶機,這樣就完成基本的攻擊機與靶機環境設置了。
安裝 PentestCode
參考 PentestCode 的 GitHub 說明 安裝 PentestCode:
# 安裝 PentestCode(Kali Linux 容器內)
curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
安裝好之後,將 ~/.local/bin 加入 PATH,並建立 PentestCode 的設定檔目錄:
# 將 ~/.local/bin 加入 PATH(Kali Linux 容器內)
echo 'export PATH="/root/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 建立 PentestCode 目錄(Kali Linux 容器內)
mkdir ~/.pentestcode
PentestCode 要搭配 LLM 模型來使用,建議可以使用 Ollama 或 vLLM 來運行 LLM 模型。
若搭配 Ollama 則參考 Ollama 官方文件,建立 ~/.pentestcode/pentestcode.jsonc 設定檔,範例如下:
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://172.17.0.1:11434/v1"
},
"models": {
"qwen3.8": {
"name": "qwen3.8"
}
}
}
}
}
若使用 vLLM,設定也是類似,以下是一個範例:
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow",
"provider": {
"vllm": {
"npm": "@ai-sdk/openai-compatible",
"name": "vLLM",
"options": {
"baseURL": "http://172.17.0.1:8000/v1"
},
"models": {
"Qwen/Qwen3.8-27B": {
"name": "Qwen/Qwen3.8-27B"
}
}
}
}
}
設定好 LLM 模型之後,執行 PentestCode:
# 執行 PentestCode(Kali Linux 容器內)
pentestcode
進入 PentestCode 環境之後,操作方式跟 OpenCode 非常類似,先用 /connect 指令將模型設定為自己的 LLM 模型,接著就可以對 web01 與 web02 兩台靶機進行滲透測試了,可以嘗試以下提示詞:
對 web01 與 web02 進行滲透測試,掃描所有開啟的服務,比對 CVE 漏洞,嘗試 RCE,提供 PoC 驗證指令稿。不要碰觸其他主機。使用繁體中文。
輸入提示詞之後 PentestCode 就會自動進行滲透測試了。

PentestCode 滲透測試工具
