在漏洞挖掘过程中,通过目录泄漏漏洞发现某网站存在公民个人隐私泄露,后续发现该网站提供了客户端和服务器端程序,将其下载到本地并进行安装,通过研究发现其客户端和服务器端都有一个加密的config.xml文件,该xml文件包含了FTPIP、USERNAME、PWD等信息,这意味着客户端或者服务器端必然会跟外界发生联系,进行更新或者读取数据库等操作,于是便有了本次的渗透。
1.1发现加密config.xml
安装XXX客户端和服务器端程序,在其程序安装目录发现有加密的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>
通过对代码进行读取,发现仅仅对xml中的值进行了加密,这种xml加密的文件,曾经在web.config中见过,仅仅对数据库连接字符串进行加密。
1.2使用Hash-Algorithm-Identifier进行哈希识别
git获取源代码:
git clone https://github.com/AnimeshShaw/Hash-Algorithm-Identifier.git
cd /Hash-Algorithm-Identifier/hashidentifier
chmod +x
HashIdentifier.py
./HashIdentifier.py
输入值:
WjtHFu7uCp12XLCGYRcBnw==
程序无法识别该算法,如图2所示。
图2不能识别算法
尝试通过base64解密后显示为乱码,明显该加密值不是base64加密,后续还找了一些加密的工具进行解密,但无法解开密码。
1.3分析服务端程序
在服务端程序安装目录发现其运行有mysql数据库,运行端口为3303,通过查看mysql下的user.MYD获取其root账号密码为:3C71F7A211581537008603DBC9012B7991DD4830,解密后为ukicreator,通过sql front进行连接并查看数据库,如图3所示,查看了所有的表,未发现敏感配置信息。
图3查看服务端数据库
1.4在线寻找破解config.xml
通过查找资料获取des等在线加解密站点http://tool.chacuo.net/cryptdes,但这些解密需要有一个key才行,无法通过在线网站直接解密,如图4所示。
图4在线des解密失败
1.5使用cain嗅探获取口令
(1)安装并设置cain工具
安装cain工具,最新版本为v4.9.56,下载地址http://www.oxid.it/downloads/ca_setup.exe,安装完毕后,设置监听地址,如图5所示,单击Configure,在其窗口中选择IP地址进行监听,然后再单击“网卡”和“核弹”标志图片开始嗅探。
图5设置监听
(2)运行客户端程序和服务器程序
运行XXX客户端和服务端程序,如图所示,成功获取其ftp密码。
图6获取服务器口令
(3)登录服务器
通过嗅探获取的口令来看,感觉这个口令可能是远程终端的口令,也即系统管理员口令。使用嗅探获取的IP地址、账号和口令进行登录尝试,如图7所示,成功登录服务器。
图7成功登录服务器
(4)获取root口令和密码
在服务器D盘下,成功获取数据库配置文件config.php,如图8所示,获取数据库端口为3333,root用户的密码为“udpcreator@!UKI12”,口令很强悍!
图8获取数据库账号和口令
(5)获取FlashFXP账号和密码
在系统中还发现安装了FlashFXP程序,运行该程序后,通过“选项”-“参数选择”-“选项”,在安全性中勾选“选择密码字段时显示密码”,如图9所示,确认后配置生效。
图9修改FlashFXP配置文件
打开站点管理器,在快速连接中可以发现存在一个Ftp地址,打开后,将鼠标移动到密码处直接获取其密码“ukicreator86UKI”,如图10所示,该密码看起来像服务器管理密码。
图10获取ftp密码
(6)获取ftp信息泄露
直接ftp连接,如图11所示,可以直接查看其默认配置的文件,有些文件可以直接下载和查看,说明存在ftp信息泄露。
图11ftp密码信息泄露
1.6xml解密程序
后面朋友给了一段解密config.xml的程序代码:
Imports
System.IO
Imports System.Xml.Serialization
Public
Class Form1
'加密存储
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