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

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

缺陷编号:wooyun-2014-060157

漏洞标题:某通用cms未授权访问可添加管理员可拿shell

相关厂商:郑州博望达计算机技术有限公司

漏洞作者: nextdoor

提交时间:2014-05-12 14:22

修复时间:2014-08-10 14:24

公开时间:2014-08-10 14:24

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-12: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-08-10: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

某通用cms未授权访问可添加管理员可拿shell
听说乌云通用漏洞奖钱了

详细说明:

1.简单描述
这个cms虽然在sql注入和xss漏洞上面的防御安全做的还不错。根据木桶原理
网站是否安全取决于最短的那个木板。
2.挖掘过程
a.google一下,找到相关的网站
Google语法 intext:技术支持:郑州博望达计算机技术有限公司
如下图:

z3.PNG


有漏洞的网站,还有很多自己找
http://www.zzbwd.com/wzl/admin_loginadd.asp
http://www.zzjntw.com/wzl/admin_loginadd.asp
http://www.hnyycs.com/wzl/admin_loginadd.asp
http://www.jtdny.com/wzl/admin_loginadd.asp
http://www.hnwzhf.cn/wzl/admin_loginadd.asp
http://www.zuoan168.com/wzl/admin_left.asp
http://www.zzzhuangji.com/wzl/admin_left.asp
http://www.yypep.com/wzl/admin_left.asp
http://www.hnxqjd.com/wzl/admin_left.asp
http://www.vorlon.cn/wzl/admin_left.asp
http://www.gsdaiban.com/wzl/admin_left.asp
http://www.hnmaosen.com/wzl/admin_left.asp
b.下面的链接直接进入管理员添加页面,可以任意添加管理员
http://www.zzjntw.com/wzl/admin_loginadd.asp
添加的管理员成功了

z4.PNG


c.下面就是进入后台了,后台页面

z5.PNG


后台有很多拿shell的姿势,为了不破坏网站的正常运营,就用我们的FCKeditor
编辑器截断修改文件夹名为xx.asp的IIS6的解析漏洞拿shell.
过程如下:

z1.PNG


上传图片马,拿到webshell.

z2.PNG

漏洞证明:

漏洞证明:
下面我们分析一下他的/wzl/admin_loginadd.asp文件

...... //无关代码省略
<%
If Action<>"" Then //这是添加管理员的代码,进入asp文件时未进行有效的判断用户是否登录,没什么好解释的就是一个添加管理的页面。
Rs.Open"Select * From [Admin] Where Cstr(ID)='"&ID&"' And UserName<>'wzl198511'",Conn(),1,3
If Not Rs.Eof Then
If Action="Update" Then //添加管理员
Rs1.Open"Select * From [Admin] Where UserName='"&Request("UserName")&"' And Cstr(ID)<>'"&ID&"' And UserName<>'wzl198511'",Conn(),1,1
If Not Rs1.Eof Then
Response.Write"<script language='javascript'>"
Response.Write"alert('管理员不能重复!');"
Response.Write"location.href='?ID='+document.getElementById('ID').value;"
Response.Write"</script>"
Response.End()
Else
Rs("UserName")=ClearHtml(Trim(Request("UserName")))
Rs("Flag")=Request("Flag")
If Request("UserPas")<>"" Then
Rs("UserPas")=Md5(Request("UserPas"))
End If
Rs("QuanXian")=Request("QuanXian")
Rs("Date")=Date()
Rs.Update
Response.Write"<script language='javascript'>"
Response.Write"alert('修改成功!');"
Response.Write"location.href='?';"
Response.Write"</script>"
Response.End()
End If
Rs1.Close:Set Rs1=Nothing
ElseIf Action="Del" Then
Rs.Delete
Response.Write"<script language='javascript'>"
Response.Write"location.href='?';"
Response.Write"</script>"
Response.End()
End If
Else
Rs1.Open"Select * From [Admin] Where UserName='"&Request("UserName")&"' And UserName<>'wzl198511'",Conn(),1,1
If Not Rs1.Eof Then
Response.Write"<script language='javascript'>"
Response.Write"alert('管理员已经存在!');"
Response.Write"location.href='?';"
Response.Write"</script>"
Response.End()
Else
Rs.Addnew
Rs("UserName")=ClearHtml(Trim(Request("UserName")))
Rs("UserPas")=Md5(Request("UserPas"))
Rs("Flag")=Request("Flag")
Rs("QuanXian")=Request("QuanXian")
Rs("Date")=Now()
Rs.Update
Response.Write"<script language='javascript'>"
Response.Write"alert('添加成功!');"
Response.Write"location.href='?';"
Response.Write"</script>"
Response.End()
End If
Rs1.Close:Set Rs1=Nothing
End If
Rs.Close:Set Rs=Nothing
End If
%>
......//无关代码省略


在login_left.asp中也存在这样的问题,还有很多的后台文件

<%       //同上一个文件存在同样的问题
Rs.Open"Select * From Bs_PrBigClass Where Type='link' Order By [Order] Asc",Conn(),1,1
For i=1 To Rs.Recordcount
If Rs.Eof Then Exit For
%>
<tr class="display2" >
<td width="50%" height="30" align="center"><%=Rs("BigClassName")%></td>
<td width="25%" height="30" align="center"><a href="add_link.asp?Type=<%=Rs("BigClassID")%>&Title=<%=Rs("BigClassName")%>&PicDisplay=<%=Rs("Pic")%>&C=<%=Rs("Type")%>" target="right">发布</a></td>
<td width="25%" align="center"><a href="link_list.asp?Type=<%=Rs("BigClassID")%>&Title=<%=Rs("BigClassName")%>&PicDisplay=<%=Rs("Pic")%>&C=<%=Rs("Type")%>" target="right">管理</a></td>
</tr>
<%
Rs.Movenext
Next
Rs.Close
%>
<tr class="display">
<td height="30" align="center"><a href="Class2.asp?Type=link&Title=新闻分类" target="right" >新闻分类</a></td>
<td height="30" colspan="2" align="center">&nbsp;</td>
</tr>
</table>
<table width="160" border="1" cellpadding="1" cellspacing="1" borderColorLight=#c89f7b borderColorDark=#f8f8f8 class="Title1" style="display:none;" >
<tr>
<td class=menu_title onclick=menuclick(menuTitleother) height=30 align="center"><strong>其它分类</strong></td>
</tr>
</table>
<table width="160" border=1 cellpadding="1" cellspacing="1" borderColorLight=#c89f7b borderColorDark=#ffffff class="Title2" id="menuTitleother" style="display:none;">
<tr>
<td width="100%" height="30" align="center" colspan="3">
<%
Set Rs1=Conn2.Execute("Select * From Bs_PrBigClass Where Type='Other' Order By [Order] Asc")
Do While Not Rs1.Eof
%>

<div style="width:49%;float:left;height:25px;line-height:25px;text-align:left;margin-left:1px;margin-bottom:1px;background:#f8f8f8;"><a href="class2.asp?Type=<%=Rs1("BigClassID")%>&Title=<%=Rs1("BigClassName")%>&PicDisplay=<%=Rs1("Pic")%>&C=<%=Rs1("Type")%>" target="right"><%=Rs1("BigClassName")%></a></div>
<%
Rs1.Movenext
Loop
Rs1.Close
%>
<div style="width:49%;float:left;height:25px;line-height:25px;text-align:center;"><a href="Class2.asp?Type=Other&Title=其它分类" target="right" >分类管理</a></div>
</td>
</tr>
</table>

<%
Set Rs1=Conn2.Execute("Select * From Bs_PrBigClass Where Type='News' Order By [Order] Asc")
Do While Not Rs1.Eof
%>
<table width="160" border="1" cellpadding="1" cellspacing="1" borderColorLight=#c89f7b borderColorDark=#f8f8f8 class="Title1" >
<tr>
<td class=menu_title onclick=menuclick(menuTitle<%=Rs1("BigClassID")%>) height=30 align="center"><strong><%=Rs1("BigClassName")%></strong></td>
</tr>
</table>
<table width="160" border=1 cellpadding="1" cellspacing="1" borderColorLight=#c89f7b borderColorDark=#ffffff class="Title2" id="menuTitle<%=Rs1("BigClassID")%>">
<%
Small Rs1("BigClassID"),Rs1("BigClassName")
Rs2.Open"Select * From Bs_PrBigClass Where Type='link"&Rs1("BigClassID")&"' Order By [Order] Asc",Conn(),1,1
For j=1 To Rs2.Recordcount
If Rs2.Eof Then Exit For
%>
<tr>
<td width="50%" height="30" align="center"><%=Rs2("BigClassName")%></td>
<td width="25%" height="30" align="center"><a href="add_link.asp?Type=<%=Rs2("BigClassID")%>&Title=<%=Rs2("BigClassName")%>&PicDisplay=<%=Rs2("Pic")%>&C=<%=Rs2("Type")%>" target="right">发布</a></td>
<td width="25%" align="center"><a href="link_list.asp?Type=<%=Rs2("BigClassID")%>&Title=<%=Rs2("BigClassName")%>&PicDisplay=<%=Rs2("Pic")%>&C=<%=Rs2("Type")%>" target="right">管理</a></td>
</tr>
<%
Rs2.Movenext
Next
Rs2.Close
......
%>

修复方案:

修复的方法
1.通过服务器路径和提交的路径进行比较如下:
Request.ServerVariables("Http_Host")得到的是www.doman.com:8000
Request.ServerVariables("Server_Name")得到的是www.doman.com
这样可以防止外部提交的数据,但是它的一个缺点就是必须在服务器上。

<server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))'本地路径
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))'服务器路径
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write ("<table cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=600 align=center borderColorLight=#c89f7b border=1>")
response.write ("<tr align=center>")
response.write ("<td height=36>你提交的路径有误,禁止从站点外部提交数据,请关闭窗口!</td>")
response.write ("</tr>")
response.write ("<tr align=center>")
response.write ("<form><td height=30>")
response.write ("<INPUT TYPE='BUTTON' value='关闭窗口' onClick='window.close()'> ")
response.write ("</td></form>")
response.write ("</tr>")
response.write ("</table>")
response.end
end if


2.判断用户登陆后session进行判断是否登陆。

<%
If Session("XUserName")="" or Session("XPassword")="" then
Response.Write "<script>alert('系统提示:您没有登陆。');location='/wzl/admin_login.asp'</script>"
End If
%>

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


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝