2.3 滲透測試實例
(1)在一次對某組織的內網滲透測試過程中,作者發現該組織啟用了192.168.xx.0/24網段,由于我們知道這個網段上可供分配的最大IP數量多達上百個,但并不是每一個IP都分配了服務器,此時對這個網段進行存活主機探測是十分有必要的。作者不可能去手工嘗試每個IP,這樣會浪費許多沒有意義的時間,這時我們便可以在Kali中通過使用如下Nmap指令來快速探測該網段內的所有存活主機:

可以看到Nmap在不到一秒的時間便完成了對該網段的掃描,成功探測到一個存活主機,對應IP為“192.168.xx.218”。
使用Nmap掃描存活主機如圖2-41所示。

圖2-41 使用Nmap掃描存活主機
(2)之后作者便需要再次使用Namp工具來對IP為“192.168.xx.218”的服務器進行一個端口檢測,我們需使用如下命令:

在檢測結果中讀者可以看到該服務器共開放了三個端口:postgresql數據庫5432端口、ajp服務8009端口及http服務8080端口。
使用Nmap掃描開放端口如圖2-42所示。

圖2-42 使用Nmap掃描開放端口
(3)在確定了服務器開放的端口之后我們需要針對每個端口上開放的服務定制對應的攻擊思路并尋找相關服務是否存在現成的可被利用的漏洞。首先作者嘗試使用postgresql數據庫管理軟件連接目標服務器的5432端口,發現連接失敗,限制只能通過“localhost”(本地主機)訪問,限制了其他IP的訪問,此時我們需先暫時放棄對這個端口的進一步探測。接著作者通過查閱資料得知8009端口上的ajp服務是Apache Tomcat軟件自動開放的一個服務,存在一個漏洞編號為cve-2020-1938的文件包含漏洞,我們可以優先對此端口進行一個漏洞檢測。最后我們在瀏覽器中訪問8080端口,作者發現服務器在此端口上開放了Apache Tomcat的默認Web操作界面。
Apache Tomcat默認界面如圖2-43所示。

圖2-43 Apache Tomcat默認界面
隨后作者繼續查閱資料得知在Apache Tomcat的默認Web操作界面中存在用戶登錄功能,作者可以在檢測完ajp服務之后嘗試爆破此服務器8080端口上的Tomcat登錄密碼。
(4)然后作者在Kali上開啟Nessus掃描器(注:Kali并不自帶該軟件),我們可以通過使用Nessus來便捷檢測8009端口是否存在文件包含漏洞,并且其他服務是否存在其他我們沒有搜索到的漏洞。在掃描結束之后我們發現Nessus并沒有提示該服務器8009端口上存在任何漏洞,除此之外也沒有其他危害性較高的漏洞(全部為INFO類型的提示)。在滲透測試過程中若掃描器沒有檢測出漏洞是十分正常的,這并不意味著此服務器的確不存在漏洞,此時我們需要耐心地進一步進行手工滲透測試工作。
未在Nessus中探測到有效漏洞如圖2-44所示。

圖2-44 未在Nessus中探測到有效漏洞
(5)在自動測試結束之后,作者進入8080端口的網頁界面,我們點擊網頁右上方的“Manager App”按鈕并同時在Kali上開啟Burp Suite使用瀏覽器抓包功能,可以看到瀏覽器中彈出輸入系統用戶名及密碼的提示框。
Tomcat登錄提示框如圖2-45所示。

圖2-45 Tomcat登錄提示框
接著作者隨便輸入一個用戶名及密碼(在此示例中輸入用戶名test和密碼123)然后點擊“OK”按鈕,再將界面切換到Burp Suite的歷史抓包數據欄內,讀者可以找到如圖2-46 Tomcat登錄數據包所示的含有登錄信息的歷史數據包。

圖2-46 Tomcat登錄數據包
在這個歷史數據中,響應包的狀態及HTML標題均為“401”,代表登錄用戶名及密碼不正確,未登錄成功(未授權);并且我們在請求包的HTTP頭中看到了“Authorization:Basic”開頭的頭部內容,這代表此服務是使用基礎身份認證,之后所接的一串內容便是Base64編碼之后我們輸入的用戶名及密碼。作者在Burp Suite的Decoder功能中對Base64編碼之后的內容快速解碼,可以看到解碼之后的內容格式為:用戶名+冒號+密碼。
使用Burp Suite解碼如圖2-47所示。

圖2-47 使用Burp Suite解碼
(6)在確認了這些基本信息之后,作者可以將此登錄數據包發送至Burp Suite的Intruder模塊中,并在“Positions”選項卡內對用戶名及密碼部分添加標記。
在Burp Suite中設置Payload位置如圖2-48所示。

圖2-48 在Burp Suite中設置Payload位置
隨后作者可以選擇在“Payloads”選項卡內的“Payload Options”中手動添加或者導入一份網上整理編碼好的用戶名及密碼爆破清單。在Burp Suite中導入Payload清單如圖2-49所示。

圖2-49 在Burp Suite中導入Payload清單
然后作者只需要點擊“Start Attack”按鈕開啟爆破即可,之后我們看到在爆破窗口中出現了一個返回狀態為“200”的用戶名及密碼爆破成功的數據包(并且我們可以觀察到登錄成功之后的返回包大小也比401狀態下的返回包大),作者將Payload解碼成功之后得知服務器管理員設置的Tomcat系統用戶名為:tomcat,密碼為:tomcat@2020。
在Burp Suite爆破窗口查看是否爆破成功如圖2-50所示。

圖2-50 在Burp Suite爆破窗口查看是否爆破成功
接著在瀏覽器中使用爆破出來的賬戶登錄,成功進入了Apache Tomcat的App包管理界面。
Tomcat App管理界面如圖2-51所示。

圖2-51 Tomcat App管理界面
(7)在成功進入管理界面之后,作者通過查閱資料得知在此系統中可以上傳任意的War數據包,此時我們可以在Kali中使用MetaSploit Framework來直接生成惡意War包一鍵獲取目標服務器權限。
打開MetaSploit Framework,使用“use payload/java/meterpreter/reverse tcp”來到惡意War生成模塊,并隨后配置好回連地址及端口,接著作者使用“generate-f war-o/home/kali/1.war”命令在/home/kali/生成名為1.war的包。
使用MSF生成惡意War包如圖2-52所示。

圖2-52 使用MSF生成惡意War包
之后作者使用“use exploit/multi/handler”和“set payload java/meterpreter/reverse tcp”命令切換至MetaSploit Framework的監聽模塊,再次配置好與之前相同的回連地址并使用“exploit”命令開啟監聽模式。
在MSF中開啟端口監聽如圖2-53所示。

圖2-53 在MSF中開啟端口監聽
隨后我們進入Tomcat App Manager界面的上傳區域,將作者生成的War包上傳至我們的目標服務器。
在Tomcat中上傳War包如圖2-54所示。

圖2-54 在Tomcat中上傳War包
之后,只需訪問作者上傳的文件目錄即可觸發Payload。
點擊前往對應程序如圖2-55所示。

圖2-55 點擊前往對應程序
可以看到MetaSploit Framework成功地收到了目標服務器回連過來的Shell,作者成功拿到了目標服務器的權限,這時我們可以在目標服務器上執行任意命令,滲透測試至此結束。
成功獲取目標服務器權限如圖2-56所示。

圖2-56 成功獲取目標服務器權限