HTB: Netmon — 匿名 FTP 挖 PRTG 密碼 → 命令注入拿 SYSTEM
| 靶機 | Netmon (HackTheBox) |
|---|---|
| 作業系統 | Windows Server 2016 (Build 14393) |
| 難度 | Easy |
| Target IP | 10.129.119.178 |
| Attacker IP | 10.10.15.48 |
| 關鍵技術 | Anonymous FTP、PRTG 設定檔密碼洩漏、密碼年份遞增、PRTG 命令注入 (CVE-2018-9276)、psexec |
匿名 FTP 根目錄就是 C:\,直接撈 user.txt 並下載 PRTG Configuration.old.bak 挖出明文密碼 PrTg@dmin2018 → 密碼年份 +1 猜出現行密碼 PrTg@dmin2019 登入 PRTG → 用通知功能的 Execute Program 命令注入 (CVE-2018-9276) 建立本機管理員帳號 anon → impacket-psexec 取得 NT AUTHORITY\SYSTEM。
1. 偵察 Recon
1.1 全port 掃描
先用高速率掃全部 65535 個 TCP port,確認攻擊面。
1.2 服務版本與腳本掃描
針對開放 port 跑 -sCV(服務版本 + 預設腳本)。
兩個關鍵發現,決定整條攻擊路線:
| Port | 服務 | 意義 |
|---|---|---|
| 21 | Microsoft ftpd | ftp-anon: Anonymous FTP login allowed,列出的目錄是 inetpub / Program Files / Users / Windows → FTP 根目錄就是 C:\ |
| 80 | Indy httpd — PRTG/18.1.37.13946 | PRTG Network Monitor,版本 18.1.37.x 有已知的通知命令注入 (CVE-2018-9276) |
| 135/139/445 | MSRPC / NetBIOS / SMB | Windows 標準服務,之後拿到帳密要用 psexec 走 445 |
| 5985/47001 | WinRM | 備用的遠端執行管道 |
Windows\、Program Files\ → root 幾乎就是 C:\,整顆硬碟可讀。看到第三方軟體(PRTG)要立刻記下版本,回頭查「它把密碼存在哪個檔」。2. 立足:匿名 FTP 讀取檔案系統
2.1 匿名登入
以 anonymous 登入,密碼留空。
# Name: anonymous Password: (直接 Enter)
2.2 撈 user.txt
user flag 放在 \Users\Public\(Administrator 家目錄匿名進不去,Public 可以)。
ftp> get user.txt
user.txt = 910506490ca14ebc1226a3ab1fd0f93f
3. 取得憑證:PRTG 設定檔挖密碼 → 登入
3.1 定位 PRTG 設定檔
PRTG 把設定(含密碼)存在 C:\ProgramData\Paessler\PRTG Network Monitor\。注意 ProgramData 是隱藏目錄,ls 不顯示,但照樣 cd 得進去。
ftp> ls
3.2 下載設定檔
切成 binary 模式(避免 ASCII 換行轉換弄壞大檔),一次抓三個比對。
ftp> mget “PRTG Configuration.*”
wget -m --no-passive "ftp://anonymous:[email protected]/ProgramData/Paessler/PRTG%20Network%20Monitor/PRTG%20Configuration.old.bak"3.3 挖出明文密碼
設定檔是上百萬 bytes 的 XML,用 grep 直接鎖定 dbpassword 欄位,一次比對三個檔。
- 現行的
.dat/.old:密碼是<encrypted/>,看不到明文。 - 最舊的
.old.bak(日期早一年多):明文 PrTg@dmin2018,註解還直接洩漏帳號 prtgadmin。
.bak / .old / 帶年份的檔,優先翻最舊的那一個。3.4 密碼年份遞增 → 登入
瀏覽器開 http://10.129.119.178,先試撈到的原始密碼。
用 prtgadmin / PrTg@dmin2018 → 失敗。密碼顯然被改過。
人改密碼最常見的是「年份 +1」。試 prtgadmin / PrTg@dmin2019 → 成功進入 dashboard。
PrTg@dmin2019(PRTG 系統管理員)4. 提權:PRTG 命令注入 → SYSTEM
原理:PRTG 通知功能的「Execute Program」會在觸發時執行一支程式,18.1.37.x 版把使用者填的參數原封不動串進 PowerShell 命令列、未做過濾(CVE-2018-9276)。PRTG probe 服務以 SYSTEM 身分執行,所以注入的指令即 SYSTEM 權限。
4.1 建立惡意通知
路徑:Setup > Account Settings > Notifications > Add new notification(或直接開 http://10.129.119.178/notifications.htm)。
捲到最底 Execute Program 區塊:Program File 選內建 demo 腳本,Parameter 填注入字串,Username / Password 兩欄務必留空(原因見第 5 節)。
- Program File:
Demo exe notification - outfile.ps1 - Parameter: 下方字串
- Username / Password: 留空
# test.txt → 餵給 demo 腳本的正常參數
# ;net user anon p3nT3st! /add → 建立本機帳號 anon
# ;net localgroup administrators anon /add → 把 anon 加進本機 Administrators 群組
# 只用字母/空白/分號,避開這版會過濾的特殊字元;故採「先建 admin 帳號再登入」而非直接彈 shell。
4.2 觸發通知
存檔後回清單,勾選該通知,點上方鈴鐺圖示送出測試通知,強制立即執行。等 10–15 秒讓指令跑完。
4.3 驗證帳號與權限
切回 Kali,用 smbmap 確認 anon 建好且為管理員(能讀寫 ADMIN$ / C$ 就是 admin)。
nxc smb 10.129.119.178 -u anon -p 'p3nT3st!',帳號是 admin 時行尾會標 (Pwn3d!)。4.4 取得 SYSTEM shell
用新帳號透過 psexec 起 shell:丟服務二進位到可寫的 ADMIN$、註冊服務啟動,服務預設以 SYSTEM 執行。
nt authority\system
C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
root.txt = f7d2849c77182fb5438aaadbfc85f197
impacket-wmiexec anon:'p3nT3st!'@10.129.119.178。5. 失誤與教訓
5.1 最大的坑:Execute Program 的 Username/Password 欄
第一次設定通知時,我在 Execute Program 的 Username/Password 填了 prtgadmin / PrTg@dmin2019,以為是「執行所需的登入」。
結果觸發後帳號根本沒建出來,smbmap 顯示 0 authenticated session(s)。
換 nxc 做乾淨診斷,明確回 STATUS_LOGON_FAILURE → 確認帳號不存在,問題在「執行」而非「payload 語法」。
prtgadmin 是 PRTG 的網頁登入帳號,不是 Windows 系統帳號,PRTG 嘗試用不存在的 Windows 使用者 runas → 執行直接失敗、靜默不報錯,注入當然沒跑。修法:清空 Username / Password,讓 PRTG 以自身服務身分(SYSTEM)執行 → 重新觸發 → 帳號成功建立。
PRTG Configuration.dat / .old → <dbpassword><flags><encrypted/></flags></dbpassword> (加密,無明文)
PRTG Configuration.old.bak → <dbpassword>
<!– User: prtgadmin –>
PrTg@dmin2018
</dbpassword>