由xml加密文件引起的滲透
在漏洞挖掘過程中,通過目錄泄漏漏洞發(fā)現(xiàn)某網(wǎng)站存在公民個(gè)人隱私泄露,后續(xù)發(fā)現(xiàn)該網(wǎng)站提供了客戶端和服務(wù)器端程序,將其下載到本地并進(jìn)行安裝,通過研究發(fā)現(xiàn)其客戶端和服務(wù)器端都有一個(gè)加密的config.xml文件,該xml文件包含了FTPIP、USERNAME、PWD等信息,這意味著客戶端或者服務(wù)器端必然會(huì)跟外界發(fā)生聯(lián)系,進(jìn)行更新或者讀取數(shù)據(jù)庫等操作,于是便有了本次的滲透。
1.1發(fā)現(xiàn)加密config.xml
安裝XXX客戶端和服務(wù)器端程序,在其程序安裝目錄發(fā)現(xiàn)有加密的config.xml文件,如圖1所示,本人比較好奇,從來沒有見過這種加密方式,于是開始了解密之路。
圖1加密xml文件
其代碼如下:
<ROOT>
<FTPIP VALUE="oaIR9zhtlTqQ3UxD7MVe08l3/oFvDp1ulMwo2GSY44I="
/>
<USERNAME VALUE="WjtHFu7uCp12XLCGYRcBnw==" />
<PWD VALUE="KZ6N2RwmqU3kLlvkPWZZKA==" />
<IPAddRESS VALUE="NzUif+K/r+z/I2isT+cx4U17mjANwri2GEtZeVgc/I9N2vVoEwTR8cKL9h5DTdCiQSJ0RU/zy4WQqKb1QgVtuQ=="
/>
<LASTIPADDRESS VALUE="net.tcp://42.***.***.140:54321/WCFService"
/>
<GETIPADDRESS
VALUE="3ddmo1CJhGkfJ8fo1ljZPUcbNnD0W699Jm+1tbkyWyEXaVCTiyzQCA=="
/>
<SERVERLOCALADDRESS VALUE="" />
<UPDATESERVER
VALUE="iWUfW9BA9VTPSPOa+sWiHqt9yoI6bFLkm0vAOw50ybg=" />
<DATACOMPRESSION VALUE="0" />
<VER VALUE="32" />
<XMLTYPE VALUE="CLIENT" />
</ROOT>
通過對(duì)代碼進(jìn)行讀取,發(fā)現(xiàn)僅僅對(duì)xml中的值進(jìn)行了加密,這種xml加密的文件,曾經(jīng)在web.config中見過,僅僅對(duì)數(shù)據(jù)庫連接字符串進(jìn)行加密。
1.2使用Hash-Algorithm-Identifier進(jìn)行哈希識(shí)別
git獲取源代碼:
git clone https://github.com/AnimeshShaw/Hash-Algorithm-Identifier.git
cd /Hash-Algorithm-Identifier/hashidentifier
chmod +x
HashIdentifier.py
./HashIdentifier.py
輸入值:
WjtHFu7uCp12XLCGYRcBnw==
程序無法識(shí)別該算法,如圖2所示。
圖2不能識(shí)別算法
嘗試通過base64解密后顯示為亂碼,明顯該加密值不是base64加密,后續(xù)還找了一些加密的工具進(jìn)行解密,但無法解開密碼。
1.3分析服務(wù)端程序
在服務(wù)端程序安裝目錄發(fā)現(xiàn)其運(yùn)行有mysql數(shù)據(jù)庫,運(yùn)行端口為3303,通過查看mysql下的user.MYD獲取其root賬號(hào)密碼為:3C71F7A211581537008603DBC9012B7991DD4830,解密后為ukicreator,通過sql front進(jìn)行連接并查看數(shù)據(jù)庫,如圖3所示,查看了所有的表,未發(fā)現(xiàn)敏感配置信息。
圖3查看服務(wù)端數(shù)據(jù)庫
1.4在線尋找破解config.xml
通過查找資料獲取des等在線加解密站點(diǎn)http://tool.chacuo.net/cryptdes,但這些解密需要有一個(gè)key才行,無法通過在線網(wǎng)站直接解密,如圖4所示。
圖4在線des解密失敗
1.5使用cain嗅探獲取口令
(1)安裝并設(shè)置cain工具
安裝cain工具,最新版本為v4.9.56,下載地址http://www.oxid.it/downloads/ca_setup.exe,安裝完畢后,設(shè)置監(jiān)聽地址,如圖5所示,單擊Configure,在其窗口中選擇IP地址進(jìn)行監(jiān)聽,然后再單擊“網(wǎng)卡”和“核彈”標(biāo)志圖片開始嗅探。
圖5設(shè)置監(jiān)聽
(2)運(yùn)行客戶端程序和服務(wù)器程序
運(yùn)行XXX客戶端和服務(wù)端程序,如圖所示,成功獲取其ftp密碼。
圖6獲取服務(wù)器口令
(3)登錄服務(wù)器
通過嗅探獲取的口令來看,感覺這個(gè)口令可能是遠(yuǎn)程終端的口令,也即系統(tǒng)管理員口令。使用嗅探獲取的IP地址、賬號(hào)和口令進(jìn)行登錄嘗試,如圖7所示,成功登錄服務(wù)器。
圖7成功登錄服務(wù)器
(4)獲取root口令和密碼
在服務(wù)器D盤下,成功獲取數(shù)據(jù)庫配置文件config.php,如圖8所示,獲取數(shù)據(jù)庫端口為3333,root用戶的密碼為“udpcreator@!UKI12”,口令很強(qiáng)悍!
圖8獲取數(shù)據(jù)庫賬號(hào)和口令
(5)獲取FlashFXP賬號(hào)和密碼
在系統(tǒng)中還發(fā)現(xiàn)安裝了FlashFXP程序,運(yùn)行該程序后,通過“選項(xiàng)”-“參數(shù)選擇”-“選項(xiàng)”,在安全性中勾選“選擇密碼字段時(shí)顯示密碼”,如圖9所示,確認(rèn)后配置生效。
圖9修改FlashFXP配置文件
打開站點(diǎn)管理器,在快速連接中可以發(fā)現(xiàn)存在一個(gè)Ftp地址,打開后,將鼠標(biāo)移動(dòng)到密碼處直接獲取其密碼“ukicreator86UKI”,如圖10所示,該密碼看起來像服務(wù)器管理密碼。
圖10獲取ftp密碼
(6)獲取ftp信息泄露
直接ftp連接,如圖11所示,可以直接查看其默認(rèn)配置的文件,有些文件可以直接下載和查看,說明存在ftp信息泄露。
圖11ftp密碼信息泄露
1.6xml解密程序
后面朋友給了一段解密config.xml的程序代碼:
Imports
System.IO
Imports System.Xml.Serialization
Public
Class Form1
'加密存儲(chǔ)
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sp As New SystemParemeters()
sp.UserName = "sa"
sp.Password = "abcd"
sp.ServerName = "."
sp.TimeOut = 50
Dim xmlSerializer As New
XmlSerializer(GetType(SystemParemeters))
Dim ms As New MemoryStream
Dim writer As TextWriter = New
StreamWriter(ms)
Try
xmlSerializer.Serialize(writer, sp)
Finally
writer.Close()
End Try
Dim code As Byte() = ms.ToArray()
For index = 0 To UBound(code)
code(index) = code(index) Xor 17
Next
File.WriteAllBytes("config.xml",
code)
End Sub
'解密讀取
Private Sub Button2_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim xmlSerializer As New
XmlSerializer(GetType(SystemParemeters))
Dim code As Byte() =
File.ReadAllBytes("config.xml")
For index = 0 To UBound(code)
code(index) = code(index) Xor 17
Next
Dim ms As New MemoryStream(code)
Dim items As SystemParemeters
Try
items = DirectCast(xmlSerializer.Deserialize(ms),
SystemParemeters)
Finally
ms.Close()
End Try
End Sub
End
Class
Public
Structure SystemParemeters
Public ServerName As String
Public UserName As String
Public Password As String
Public TimeOut As Integer
End
Structure