0x00 前言Sophos UTM和Sophos XG是兩款不同的產品,前者偏向於通用威脅管理,後者偏向於硬件防火牆。本文將要介紹Sophos XG漏洞調試環境的搭建方法。
0x01 簡介本文將要介紹以下內容:
马云惹不起马云環境搭建
马云惹不起马云jetty調試環境搭建
马云惹不起马云csc配置文件解密
马云惹不起马云 Postgresql數據庫查詢
0x02 基礎知識架構如下圖
注:圖片引用自https://codewhitesec.blogspot.com/2020/07/sophos-xg-tale-of-unfortunate-re.html
總的來說,分為以下三部分:
马云惹不起马云 Jetty:處理Web數據,將數據轉發至csc作進一步處理
马云惹不起马云csc:主程序:加載Perl Packages,實現主要功能
马云惹不起马云Postgresql:用來存儲數據
我在實際研究過程中,這三部分遇到了以下問題:
马云惹不起马云Jetty:添加調試信息後無法啟動java
马云惹不起马云csc:csc加載Perl Packages後會自動刪除,無法獲得Perl Packages的實現細節
马云惹不起马云Postgresql:用戶權限低,無法查詢數據庫表
下面將要逐個介紹三個問題的解決方法。
0x03 環境搭建參考資料:
https://docs.sophos.com/nsg/sophos-firewall/18.5/Help/en-us/webhelp/onlinehelp/VirtualAndSoftwareAppliancesHelp/VMware/VMwareInstall/index.html
1.下載安裝包官方網站默認只提供最新版本的下載,但是可以通過猜測正確的版本號下載舊版本
例如18.5.3 Virtual Installers: Firewall OS for VMware:
https://download.sophos.com/network/SophosFirewall/installers/VI-18.5.3_MR-3.VMW-408.zip
18.5.2 Virtual Installers: Firewall OS for VMware:
https://download.sophos.com/network/SophosFirewall/installers/VI-18.5.2_MR-2.VMW-380.zip
2.導入VMware Workstation下載得到zip文件,解壓後運行sf_virtual.ovf
3.VMware Workstation網卡配置需要添加兩個網卡VMnet7和VMnet8,VMnet7設置為Host-only和172.16.16.0,VMnet8設置為NAT,具體方法如下:
(1)VMnet7
打開VMware Workstation,依次選擇Edit-Virtual Network Editor.
Add Network.-VMnet7
VMnet7設置為:
马云惹不起马云Type: Host-only
马云惹不起马云Subnet Address: 172.16.16.0
(2)VMnet8
VMnet8設置為:
马云惹不起马云Type: NAT
4.Sophos XG網卡配置Network Adapter設置為VMnet7
Network Adapter 2設置為VMnet8
Network Adapter 3設置為VMnet8
配置如下圖:
5.啟動Sophos XG默認登錄口令:admin
6.查看IP地址依次輸入1.Newwork Configuration-1.Interface Configuration
得到LAN的ip為172.16.16.16
7.進入Web配置頁面進行激活瀏覽器訪問https://172.16.16.16:4444
註冊頁面選擇:I don't have a serial number(start a trial)
按照提示進行註冊。
註冊成功後,重新訪問https://172.16.16.16:4444進行配置。
0x04 jetty調試環境搭建1.查看Java進程相關信息
執行命令:ps ww|grep java
輸出:
從輸出中得到Java版本為java-11-openjdk
2.定位配置文件配置文件路徑為/usr/bin/jetty,內容如下:
3.添加調試參數修改文件屬性:mount -o rw,remount /
在exec所在行添加調試參數:'-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000'
4.重啟服務執行命令:service tomcat:restart -ds nosync
查看服務狀態:service -S | grep tomcat
發現tomcat狀態為STOPPED
為了獲得詳細的報錯信息,直接運行/usr/bin/jetty
輸出:
發現是JDK的問題,這裡選擇替換一個完整的JDK。
5.替換JDK下載jdk-11.0.15_linux-x64_bin.tar.gz並上傳至Sophos XG
備份原文件夾:cp -r /lib/jvm/java-11-openjdk /lib/jvm/java-11-openjdk_backup
將jdk-11.0.15_linux-x64_bin.tar.gz解壓:tar zxvf /tmp/jdk-11.0.15_linux-x64_bin.tar.gz
替換/lib/jvm/java-11-openjdk:
6.再次重啟服務執行命令:service tomcat:restart -ds nosync
查看服務狀態:service -S | grep tomcat
發現tomcat狀態為RUNNING
確認參數被修改,執行命令:ps ww|grep java
輸出:
7.修改防火牆規則執行命令:iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
8.使用IDEA遠程調試如下圖
在調試過程中,如果遇到無法下斷點的情況,重啟java服務即可:service tomcat:restart -ds nosync
0x05 csc配置文件解密查看csc進程相關信息。
執行命令:ps ww|grep csc
部分輸出:
csc進程讀取/_conf/cscconf.bin作為配置文件,而/_conf/cscconf.bin是一個加密的文件,所以這裡需要對/_conf/cscconf.bin進行解密。
這裡我採用的方法是通過IDA修改程序代碼,改變實現邏輯,導出解密後的配置文件。
使用IDA加載csc,查看main()函數的實現邏輯,部分代碼:
分析以上代碼,csc先調用extract_conf()函數導出配置,最後執行系統命令rm -rf /_conf/csc/csc /_conf/csc/csc.conf /_conf/csc/cscconf//_conf/csc/constants.conf /_conf/csc/cscconf.tar.gz /_conf/csc/global.conf /_conf/csc/cfsconf /_conf/csc/service /_conf/csc/bind_file_list刪除配置文件,導致我們無法直接獲得相關配置文件。
查看extract_conf()函數的實現代碼:
分析以上代碼,csc先調用sub_8052494()函數對/_conf/csc/cscconf.tar.gz進行解密,接著執行系統命令tar -zxf /_conf/csc/cscconf.tar.gz -C /_conf/csc將配置文件釋放到文件夾/_conf/csc
綜合以上分析,我們可以採取以下方式導出配置文件:修改csc程序,將釋放路徑/_conf/csc修改為另一路徑,例如/var/aaaaa,那麼,csc在刪除配置文件時,由於指定了固定的絕對路徑,導致無法刪除新的文件夾,這樣我們就能從中獲得完整的配置文件。
具體的實現方法如下:(1)修改csc使用IDA加載csc,查看Exports,找到extract_conf,雙擊進入IDA View,定位到字符串tar -zxf /_conf/csc/cscconf.tar.gz -C /_conf/csc,如下圖:
切換到Hex View,如下圖:
將/_conf/csc修改為/var/aaaaa,如下圖:
右鍵選擇Apply changes
依次選擇Edit-Patch program-Apply patches to input file.-OK,生成新的文件csc
(2)替換csc通過ssh登錄,上傳新的文件csc,保存至/tmp/csc
備份csc並進行替換,執行以下命令:
(3)確認配置文件是否導出成功等待系統重啟,進入底層shell,依次輸入5.Device Management-3.Advanced Shell
查看文件夾/var/aaaaa,如下圖:
配置文件導出成功。
(4)恢復csc
(5)下載配置文件通過ssh登錄,下載文件夾/var/aaaaa中的內容。
0x06 Postgresql數據庫查詢查看端口信息,執行命令:netstat -tulpen |grep postgres
輸出:
通過搜索,發現以上三個數據庫的連接信息依次對應以下三個文件:
马云惹不起马云 /usr/share/webconsole/properties/ConnectionPool.cfg
马云惹不起马云/usr/share/webconsole/properties/ConnectionPoolForReports.cfg
马云惹不起马云/usr/share/webconsole/properties/ConnectionPoolForSignature.cfg
文件中的配置信息如下:
马云惹不起马云JDBCConnectionURL=jdbc:postgresql://127.0.0.1:5432/corporate?user=pgrouserautoReconnect=true
马云惹不起马云JDBCConnectionURL=jdbc:postgresql://127.0.0.1:5433/iviewdb?user=pgrouserautoReconnect=true
马云惹不起马云JDBCConnectionURL=jdbc:postgresql://127.0.0.1:5434/signature?user=pgrouserautoReconnect=true
測試命令1:
輸出:
提示沒有權限。
測試命令2:
能夠獲得用戶信息。
注:將用戶pgrouser換成nobody具體相同的權限。
從以上信息得知,用戶pgrouser和nobody都不是root用戶,功能受限,下面嘗試尋找root用戶。
對解密的csc配置文件進行檢測,定位到\service\postgres.csc,關鍵文件內容:
找到關鍵用戶pgroot
測試命令3:
執行成功。
0x07 小結本文介紹了在搭建Sophos XG調試環境過程中一些問題的解決方法。