- Java代碼審計實戰
- 王月兵 柳遵梁 覃錦端 劉聰
- 2160字
- 2025-06-19 18:37:52
1.2.2 遠程動態調試
遠程動態調試是對應于本地動態調試的一種調試技術,并非傳統意義上的對遠端應用進行調試。遠程動態調試是在沒有應用程序完整源碼的情況下使用的調試手段。下面分別介紹常見的Docker環境下的遠程動態調試和jar包文件遠程動態調試。
1.Docker環境下的遠程動態調試
在漏洞研究與挖掘過程中,Docker出現的頻率非常高,Docker可以幫助安全研究人員快速搭建應用程序運行環境,從而大大提高漏洞研究的效率。在本節中,將基于Docker搭建一個存在CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞的WebLogic應用程序環境,以介紹使用IDEA對Docker環境進行遠程動態調試的方法。
Vulhub是一個基于Docker和Docker Compose的漏洞環境集合,進入對應目錄并執行一條語句即可啟動一個全新的漏洞環境,讓漏洞復現變得更加簡單,讓安全研究者專注于研究漏洞的原理。Vulhub中具備WebLogic各個歷史漏洞所對應的環境,可以快速搭建起存在CVE-2017-10271漏洞的歷史環境。首先將Vulhub克隆到本地的kali測試主機上,如圖1-28所示??寺∶钊缦?。
git clone https://github.com/vulhub/vulhub.git

圖1-28 克隆Vulhub環境
通過cd vulhub/weblogic/CVE-2017-10271/命令進入WebLogic CVE-2017-10271漏洞環境的目錄中,并通過vim docker-compose.yml命令修改docker-compose.yml配置文件,開啟配置項ports中的“8453:8453”遠程調試端口,如圖1-29所示。IDEA需要連接該調試端口才能進行遠程動態調試。

圖1-29 修改docker-compose.yml配置文件開啟調試端口
修改上述配置后,通過運行docker-compose up -d命令即可下載并運行相應的Docker鏡像環境,如圖1-30所示。

圖1-30 運行相應的Docker鏡像環境
通過上述過程,已經成功搭建并啟動了存在CVE-2017-10271漏洞的WebLogic應用程序環境,并開啟了Docker環境遠程調試端口。但是,對于WebLogic而言,如果想要對其進行動態調試,還需要開啟WebLogic自身的調試模式。通過docker ps查詢容器ID后可以使用下面的命令進入相應的容器Shell環境中。
docker exec -it c4347c88fe68 /bin/bash
如圖1-31所示,成功獲得了有WebLogic CVE-2017-10271漏洞環境的Shell環境。

圖1-31 成功獲得Shell
獲得Shell后,即可通過編輯WebLogic應用程序的配置文件來開啟調試模式,通過下面的命令編輯WebLogic配置文件。
vi /root/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh
并在配置文件中加入如下兩行代碼。
debugFlag="true" export debugFlag
圖1-32所示為修改后的WebLogic配置文件內容。

圖1-32 修改后的WebLogic配置文件
保存修改后的WebLogic配置文件,通過exit命令退出容器Shell環境回到宿主機中。如圖1-33所示,通過docker restart cve-2017-10271-weblogic-1命令重啟相應的漏洞環境,使配置生效。

圖1-33 重啟漏洞環境
通過上述過程即可搭建起支持遠程動態調試的WebLogic CVE-2017-10271漏洞環境,接下來需要通過下面的兩條命令復制并打包Docker環境中的WebLogic應用程序目錄文件。
docker cp cve-2017-10271-weblogic-1:/root ./weblogic_jars tar czf weblogic_jars.tar.gz weblogic_jars/
如圖1-34所示,將所需文件復制到宿主機中并打包。

圖1-34 復制所需文件
將壓縮包傳輸到安裝了IDEA的調試主機上并解壓,使用IDEA打開壓縮包中待調試的Oracle\ Middleware\wlserver_10.3目錄,如圖1-35所示。

圖1-35 使用IDEA打開待調試的目錄
將Oracle\Middleware\目錄下所有子目錄中的jar包文件復制到同一個文件夾中,在Windows系統下可以直接在Oracle\Middleware\目錄搜索.jar進行快速復制(如圖1-36所示);或者在Linux/macOS下使用“find ./ -name *.jar -exec cp {} ./test/ \;”命令進行快速復制。

圖1-36 復制jar包文件到同一個文件夾中
如圖1-37所示,打開IDEA,選擇File→Project Structure→Libraries選項,單擊圖1-37中框起來的“+”按鈕,將上述存放了所有jar包的文件夾導入項目依賴中。

圖1-37 導入項目依賴jar包
同時選擇File→Project Structure→Project選項,將項目Java環境版本設置為源碼包中自帶的JDK 1.6環境,如圖1-38所示。

圖1-38 設置項目Java環境版本
接下來進行遠程動態調試的連接配置,在IDEA中,單擊Run→Edit Configurations按鈕,添加一個“Remote JVM Debug”調試器。在圖1-39所示的界面輸入Docker漏洞環境的IP地址以及配置的調試端口,并配置項目路徑。

圖1-39 IDEA遠程動態調試配置
保存上述配置,單擊Debug按鈕運行項目,若IDEA的Console窗口出現如圖1-40所示的日志提示,則證明遠程動態調試配置無誤。

圖1-40 日志提示
此時使用瀏覽器訪問http://ip:7001,在上述配置無誤的情況下則會出現如圖1-41所示的WebLogic默認404頁面。

圖1-41 瀏覽器訪問WebLogic頁面
依據CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞的觸發特征,使用IDEA在/wlserver_ 10.3/server/lib/weblogic.jar!/weblogic/wsee/jaxws/WLSServletAdapter.class文件的126行設置斷點,然后使用瀏覽器或Burp Suite請求鏈接http://ip:7001/wls-wsat/CoordinatorPortType。如圖1-42所示,應用程序運行到上述斷點位置后停止運行,并輸出了當前位置的參數傳遞、方法調用棧等信息。
接下來就可以按照CVE-2017-10271漏洞的形成原因一步步進行調試,該漏洞后續的調試分析過程這里不再展開介紹。

圖1-42 設置斷點進行遠程動態調試
2.jar包文件遠程動態調試
除了Docker環境遠程動態調試,在Java代碼審計中還有一種場景比較常見,那就是獲得了應用程序的可執行jar文件,需要對應用程序進行調試。這里以功能十分強大的Webshell管理工具——哥斯拉為例,展開對jar包文件遠程動態調試的介紹。
首先下載哥斯拉工具的可執行jar文件,下載頁面如圖1-43所示。

圖1-43 哥斯拉工具的下載頁面
使用IDEA創建一個Java項目,然后在項目下新建一個文件夾,并將可執行jar文件復制到該文件夾中,如圖1-44所示。該文件夾用于存放jar包文件。

圖1-44 創建項目并復制jar文件
在放置了jar包的文件夾上右擊,在彈出的快捷菜單中選擇Add as Library選項,將該文件夾設置為項目依賴文件夾,單擊OK按鈕,如圖1-45所示。

圖1-45 將文件夾設置為項目依賴文件夾
上述設置完畢后,jar包即可展開,圖1-46為展開的jar文件目錄。

圖1-46 展開的jar文件目錄
接下來配置遠程調試器,單擊Add Configuration按鈕,在彈出的對話框中單擊“+”按鈕,添加一個遠程調試器“Remote JVM Debug”,如圖1-47所示。

圖1-47 添加一個遠程調試器
配置遠程調試器,使用默認設置(也就是Host設置為localhost,Port設置為5005),然后復制自動生成的啟動參數(也就是“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005”),如圖1-48所示。

圖1-48 配置遠程調試器
將上述得到的啟動參數進行拼接,得到如下啟動哥斯拉jar文件的命令,使用cmd運行該命令啟動哥斯拉工具,如圖1-49所示。
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 godzilla.jar

圖1-49 啟動哥斯拉工具
如圖1-50所示,設置斷點(第38行),開啟調試,即可對哥斯拉jar文件進行動態調試。

圖1-50 對哥斯拉jar文件進行動態調試
- PHP動態網站程序設計
- 數據庫系統教程(第2版)
- Visual C++串口通信開發入門與編程實踐
- Cassandra Design Patterns(Second Edition)
- PLC編程及應用實戰
- 用Python實現深度學習框架
- Redis Essentials
- Hands-On Swift 5 Microservices Development
- C語言程序設計
- Spring+Spring MVC+MyBatis整合開發實戰
- Spring快速入門
- MongoDB,Express,Angular,and Node.js Fundamentals
- SQL Server 2008 R2數據庫技術及應用(第3版)
- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- 零基礎學HTML+CSS