Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863102705

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00 前言對於Sophos UTM設備,介紹利用方法的資料很少,本文將要介紹從零研究導出配置文件的過程,記錄細節,開源利用腳本。

0x01 簡介本文將要介紹以下內容:

Sophos UTM測試環境搭建

導出配置文件的研究過程

開源腳本

0x02 Sophos UTM測試環境搭建1.下載鏡像下載頁面:https://www.sophos.com/en-us/support/downloads/utm-downloads

這裡選擇版本9.711-5.1,分別有以下兩個鏡像文件:

ssi-9.711-5.1.iso,需要在Sophos設備上安裝,如果直接在VM中安裝,會提示'No appliance hardware has been detected' on appliance hardware

asg-9.711-5.1.iso,可在VM中安裝

測試環境使用VMware搭建,所以下載asg-9.711-5.1.iso

2.安裝鏡像配置好後等待系統重啟,訪問配置頁面:https://ip :4444/

設置admin account password,作為登錄配置頁面的用戶名和口令

3.配置需要填入License

4.開啟ssh登錄進入配置頁面後,依次選擇Management-System Settings-Shell Access,分別設置root用戶和loginuser用戶的口令

如下圖

b530cdf7a41d94e6689cc4bdf0e96a1.png

5.允許root用戶口令登錄sshsed-i's/PermitRootLoginno/PermitRootLoginyes/g'/etc/ssh/sshd_config

/var/mdw/scripts/sshdrestart0x03 導出配置文件的研究過程1.查詢postgresql數據庫配置文件的位置:/var/storage/pgsql92/data/postgresql.conf

默認配置下,連接數據庫不需要口令

連接命令:

psql-hlocalhost-Upostgres數據庫內容如下圖

49e2ee52ff31e485e5037576a911104.png

但我在數據庫中沒有找到配置信息

2.查詢文檔獲得查看配置的思路依次執行以下命令:

cc

webadmin

port$獲得了webadmin的port信息,如下圖

d28c5771af3f08a4229e8cc6d4d2fc1.png

從輸出內容上,發現cc命令連接了127.0.0.1的4472端口,接下來打算從端口入手

3.定位同4472端口相關的進程獲得4472端口對應的進程pid:

netstat-ltp|grep4472返回內容如下圖

621e7e46b449960b11096a59a03ecfd.png

從返回內容可以看到對應的進程pid為4407

4.查看pid 4407的進程信息依次執行以下命令:

cd/proc/4407/cwd

ls返回內容如下圖

386ae6b895d3fb67515ee5cce4e206e.png

從返回內容獲得以下信息:

目錄為/var/confd

配置文件為config.pm

主程序為confd.plx,無法直接查看源代碼

5.反編譯confd.plx經過搜索,在《网络设备分析实战 | Sophos UTM固件反编译Perl源码》 獲得提示:plx文件是由PerlAPP工具編譯而來,可通過動態調試的方法使用IDA反編譯出源碼

經過搜索,在《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 獲得更為簡單的反編譯方法:通過Python實現靜態反編譯

參照《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 中的方法在反編譯confd.plx的過程中,會遇到bug,我們需要修改《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 中提到的bfs_extract.py

整合yank.py和bfs.py,修復bfs_extract.py中的bug,完整的代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/SophosUTM_plxDecrypter.py

使用SophosUTM_plxDecrypter.py能夠獲得confd.plx的反編譯代碼

6.代碼分析經過分析,得知Export-confd.plx\confd.pl為主要功能,在代碼中發現配置文件的位置為$config:storage_dir/cfg

如下圖

60ddeb2d269773114168fecddb223c8.png

對應的絕對路徑為/var/confd/var/storage/cfg

7.文件格式分析查看cfg的文件格式:

file/var/confd/var/storage/cfg返回結果:

/var/confd/var/storage/cfg:perlStorable(v0.7)data(major2)(minor7)得知格式為perl Storable data,這是Perl經過序列化(Perl中稱為凍結)生成的二進制數據

8.文件格式解析(1)文件提取

這裡可以使用Python的storable模塊提取數據

安裝storable模塊:

pipinstallstorable簡單使用:

fromstorableimportretrieve

data=retrieve('cfg')

print(data)輸出結果為json數據

(2)文件分析

為了便於分析json數據,這裡使用Sublime Text的pretty json插件,安裝方法如下:

在Sublime text中依次選擇Tools - Command Palette.打開面板,輸入pci,選中PackageControl: Install Package,在彈出的輸出框中填入pretty json

設置調用pretty json插件的快捷鍵為ctrl+alt+j:

在Sublime Text中依次選擇Preferences - Key Bindings,在彈出的右側窗口添加如下內容:

[

{'keys':['ctrl+alt+j'],'command':'pretty_json'},

]在使用pretty json解析json時會提示格式錯誤,按照提示逐個修復即可

最終顯示的格式如下圖

631f7de722fed7fec962e64f8bfa2bf.png

9.數據提取為了提高效率,這裡可以使用Python提取出關鍵數據,開發細節如下:

(1)提取用戶信息

通過分析json文件,發現data['exclusive'][b'email_user']['u2v']中的key為每個用戶信息的標誌,例如user: REF_AaaUseVpn1

再通過對應標誌位置的鍵值能夠獲取用戶的完整信息,位置為data['objects'][ flag ]['data'],對應例子的位置為data['objects']['REF_AaaUseVpn1']['data']

實現代碼:

defGetUserDataFull(file):

data=retrieve(file)

print('[*]Trytogetthefulldataofuser')

forkey,valueindata['exclusive'][b'email_user']['u2v'].items():

index=key.rfind(':')

indexobject=data['objects'][key[index+1:]]['data']

print('[+]'+data['objects'][key[index+1:]]['data']['name'])

forkey1,value1inindexobject.items():

print(''+str(key1)+':'+str(value1))(2)提取網絡配置信息

通過分析json文件,發現data['index']['network']中的value為每個網絡配置的標誌,例如REF_DefaultInternalNetwork

再通過對應標誌位置的鍵值讀取完整信息,位置為data['objects'][ flag ]['data'],對應例子的位置為data['objects']['REF_DefaultInternalNetwork']['data']

實現代碼:

defGetNetworkConfig(file):

data=retrieve(file)

print('[*]Trytogettheconfigofnetwork')

forkey,valueindata['index']['network'].items():

print('[+]'+str(key))

forobjectvalueinvalue:

print('-'+objectvalue)

forkey1,value1indata['objects'][objectvalue]['data'].items():

print(''+str(key1)+':'+str(value1))(3)提取LastChange信息

位置:data['lastchange']

需要注意時間格式,默認為數字形式,例如1652930086,需要進行轉換

實現代碼:

defGetLastChange(file):

data=retrieve(file)

print('[*]TrytogetthedataofLastChange')

print('')

forkey,valueindata['lastchange'].items():

print('[+]'+str(key))

forkey1,value1invalue.items():

ifstr(key1)=='time':

print('time:'+str(datetime.fromtimestamp(value['time'])))

else:

print(''+str(key1)+':'+str(value1))完整的代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/SophosUTM_ConfigParser.py

代碼支持以下功能:

GetAdminDataFull,提取出管理員用戶的完整信息

GetAdminHash,提取出管理員用戶的md4 hash

GetLastChange,提取出LastChange信息

GetNetworkConfig,提取出網絡配置信息

GetRemoteAccess,提取出VPN配置信息

GetSSHConfig,提取出SSH連接信息

GetUserDataFull,提取出用戶的完整信息

GetUserHash,提取出用戶的md4 hash

Parsefile,提取出完整信息

0x04 小結本文介紹了導出Sophos UTM配置文件的研究過程,開源利用腳本以提高分析效率。