安全黑客
当前位置:安全黑客文章资讯安全漏洞漏洞安全
日期:2011-01-17 23:16:00  来源:本站整理

动易网站管理系统最新漏洞解析[漏洞安全]

赞助商链接



  本文“动易网站管理系统最新漏洞解析[漏洞安全]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

由于某种缘由,一个朋友叫我帮忙解析动易网站管理系统的漏洞.我们知道,前段时间动易暴出了众多漏洞,官方必定对代码举行了更严峻的考核,再加上动易好多代码都封装在DLL中,要找出此中的漏洞,我开始真的认为没什么大概性.不过自己还是按照朋友的要求到动易官方网站http://www.powereasy.net下载了动易内容管理系统2006 SP4遍及版举行解析.
漏洞解析
看代码的那段时间是艰苦的,不过保持者终会成功.第一次看动易代码,查找了80%的文件,竟然没有看到一处可以注入的地方,后来开始查找 Admin目录下的Admin_Login.asp文件,发现了一点问题.Admin_Login.asp文件中第162~227行的代码以下所示.
 
view plainprint?
Sub ChkLogin()  //登录查抄函数  
    Dim sql, rs  
    Dim UserName, Password, CheckCode, RndPassword, AdminLoginCode  
    UserName = ReplaceBadChar(Trim(Request("UserName")))  
    Password = ReplaceBadChar(Trim(Request("Password")))  
    CheckCode = LCase(ReplaceBadChar(Trim(Request("CheckCode"))))  
//ReplaceBadChar函数过滤了加号、单引号、括号等,已经不能再形成注入  
    AdminLoginCode = Trim(Request("AdminLoginCode"))  
//获得后台管理认证码  
    If CSng(ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion) < 5.6 Then  
        FoundErr = True  
        ErrMsg = ErrMsg & "<li>服务器脚本注释引擎(VBScript)版本太低,请接洽您的空间商或服务器管理员更新.</li>"  
        ErrMsg = ErrMsg & "<li><a href='http://www.microsoft.com /downloads/release.asp?ReleaseID=33136' target='_blank'>< font color='green'>脚本注释引擎下载地址</font></a></li>"  
    End If  
  
    If UserName = "" Then  
//用户名为空则提醒错误:用户名不能为空!并使FoundErr = True  
FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>用户名不能为空!</li>"  
    End If  
    If Password = "" Then  
//密码为空则提醒错误:密码不能为空!并使FoundErr = True  
        FoundErr = True  
        ErrMsg = ErrMsg & www.110hack.com"<br><li>密码不能为空!</li>"  
    End If  
    If CheckCode = "" Then  
//考证码为空则提醒错误:考证码不能为空!并使FoundErr = True  
        FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>考证码不能为空!</li>"  
    End If  
    If Trim(Session("CheckCode")) = "" Then  
        FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>你在管理登录逗留的时间太长,招致考证码失效.请重新返回登录页面举行登录.</li>"  
    End If  
    If CheckCode <> Session("CheckCode") Then   
//系统产生的考证码和输入的不一致,则提醒:您输入的考证码和系统产生的不一致,请重新输入.并使FoundErr = True  
        FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>您输入的考证码和系统产生的不一致,请重新输入.</li>"  
    End If  
    If EnableSiteManageCode = True And AdminLoginCode <> SiteManageCode Then  
//后台管理认证码不对则提醒错误:您输入的后台管理认证码不对,请重新输入.并使FoundErr = True  
        FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>您输入的后台管理认证码不对,请重新输入.</li>"  
    End If  
    If FoundErr = True Then  
//假如FoundErr = True,则退出Sub历程.  
        Exit Sub  
    End Ifwww.110hack.com  
      
    ComeUrl = Trim(Request.ServerVariables("HTTP_REFERER"))  
//这里获得HTTP_REFERER的值,由于HTTP_REFERER可假造,故ComeUrl对我们很重要.  
    Password = MD5(Password, 16)  
    Set rs = Server.CreateObject("adodb.recordset")  
    sql = "select * from PE_Admin where Password='" & Password & "' and AdminName='" & UserName & "'"     
    rs.Open sql, Conn, 1, 3  
    If rs.bof And rs.EOF Then  
//假如没有查找到用户,则使FoundErr为True.  
        FoundErr = True  
        ErrMsg = ErrMsg & "<br><li>用户名或密码错误!!!</li>"  
    Else  
        If Password <> rs("Password") Then  
//假如用户输入的密码和数据库中密码不一致,则使FoundErr为True  
            FoundErr = True  
            ErrMsg = ErrMsg & "<br><li>用户名或密码错误!!!</li>"  
        End If  
    End If  
    If FoundErr = True Then  
//这里很关键,假如FoundErr为True的话,将调用InsertLog()函数插入数据库,调用函数时ComeUrl作为InsertLog的第6个参数传送,没有经过安全处理  
        Call InsertLog(1, -1, UserName, UserTrueIP, "登录失利", ComeUrl, "")  
        Session("AdminName") = ""  
        Session("AdminPassword") = ""  
        Session("RndPassword") = ""  
        rs.Close  
        Setwww.110hack.com rs = Nothing  
        Exit Sub  
    End If  
Sub
ChkLogin()  //登录查抄函数
Dim sql, rs
Dim UserName, Password, CheckCode, RndPassword, AdminLoginCode
UserName = ReplaceBadChar(Trim(Request("UserName")))
Password = ReplaceBadChar(Trim(Request("Password")))
CheckCode = LCase(ReplaceBadChar(Trim(Request("CheckCode"))))
//ReplaceBadChar函数过滤了加号、单引号、括号等,已经不能再形成注入
AdminLoginCode = Trim(Request("AdminLoginCode"))
//获得后台管理认证码
If CSng(ScriptEngineMajorVersion & "." &
ScriptEngineMinorVersion) < 5.6 Then
FoundErr = True
ErrMsg = ErrMsg &
"<li>服务器脚本注释引擎(VBScript)版本太低,请接洽您的空间商或服务器管理员更新.</li>"
ErrMsg = ErrMsg & "<li><a
href='http://www.microsoft.com/downloads/release.asp?ReleaseID=33136'
target='_blank'><font
color='green'>脚本注释引擎下载地址</font></a></li>"
End If
If UserName = "" Then
//用户名为空则提醒错误:用户名不能为空!并使FoundErr = True
FoundErr = True
ErrMsg = ErrMsg & "<br><li>用户名不能为空!</li>"
End If
If Password = "" Then
//密码为空则提醒错误:密码不能为空!并使FoundErr = True
FoundErr = True
ErrMsg = ErrMsg & "<br><li>密码不能为空!</li>"
End If
If CheckCode = "" Then
//考证码为空则提醒错误:考证码不能为空!并使FoundErr = True
FoundErr = True
ErrMsg = ErrMsg & "<br><li>考证码不能为空!</li>"
End If
If Trim(Session("CheckCode")) = "" Then
FoundErr = True
ErrMsg = ErrMsg &
"<br><li>你在管理登录逗留的时间太长,招致考证码失效.请重新返回登录页面举行登录.</li>"
End If
If CheckCode <> Session("CheckCode") Then
//系统产生的考证码和输入的不一致,则提醒:您输入的考证码和系统产生的不一致,请重新输入.并使FoundErr = True
FoundErr = True
ErrMsg = ErrMsg &
"<br><li>您输入的考证码和系统产生的不一致,请重新输入.</li>"
End If
If EnableSiteManageCode = True And AdminLoginCode <>
SiteManageCode Then
//后台管理认证码不对则提醒错误:您输入的后台管理认证码不对,请重新输入.并使FoundErr = True
FoundErr = True
ErrMsg = ErrMsg &
"<br><li>您输入的后台管理认证码不对,请重新输入.</li>"
End If
If FoundErr = True Then
//假如FoundErr = True,则退出Sub历程.
Exit Sub
End If
ComeUrl = Trim(Request.ServerVariables("HTTP_REFERER"))
//这里获得HTTP_REFERER的值,由于HTTP_REFERER可假造,故ComeUrl对我们很重要.
Password = MD5(Password, 16)
Set rs = Server.CreateObject("adodb.recordset")
sql = "select * from PE_Admin where Password='" & Password &
"' and AdminName='" & UserName & "'"
rs.Open sql, Conn, 1, 3
If rs.bof And rs.EOF Then
//假如没有查找到用户,则使FoundErr为True.
FoundErr = True
ErrMsg = ErrMsg &
"<br><li>用户名或密码错误!!!</li>"
Else
If Password <> rs("Password") Then
//假如用户输入的密码和数据库中密码不一致,则使FoundErr为True
FoundErr = True
ErrMsg = ErrMsg &
"<br><li>用户名或密码错误!!!</li>"
End If
End If
If FoundErr = True Then
//这里很关键,假如FoundErr为True的话,将调用InsertLog()函数插入数据库,调用函数时ComeUrl作为InsertLog的
第6个参数传送,没有经过安全处理
Call InsertLog(1, -1, UserName, UserTrueIP, "登录失利", ComeUrl, "")
Session("AdminName") = ""
Session("AdminPassword") = ""
Session("RndPassword") = ""
rs.Close
Set rs = Nothing
Exit Sub
End If

下面我们再看看InsertLog()函数是怎么写的.一样,在admin_login.asp中第295~312行的代码以下:
 
view plainprint?
Sub InsertLog(LogType,ChannelID, UserName, UserIP, LogContent, ScriptName, PostString)  
    Dim sqlLog, rsLog  
    sqlLog = "select top 1 * from PE_Log"  www.110hack.com
    Set rsLog = Server.CreateObject("Adodb.RecordSet")  
    rsLog.Open sqlLog, Conn, 1, 3  
    rsLog.addnew  
    rsLog("LogType") = LogType  
    rsLog("ChannelID") = ChannelID  
    rsLog("LogTime") = Now()  
    rsLog("UserName") = UserName  
    rsLog("UserIP") = UserIP  
    rsLog("LogContent") = LogContent  
    rsLog("ScriptName") = ScriptName  
//ScriptName即为第六个参数,也就是上面传送的ComeUrl了.  
    rsLog("PostString") = PostString  
    rsLog.Update  
    rsLog.Close  
    Set rsLog = Nothing  
End Sub  
Sub InsertLog(LogType,ChannelID, UserName, UserIP, LogContent, ScriptName, PostString)
Dim sqlLog, rsLog
sqlLog = "select top 1 * from PE_Log"
Set rsLog = Server.CreateObject("Adodb.RecordSet")
rsLog.Open sqlLog, Conn, 1, 3
rsLog.addnew
rsLog("LogType") = LogType
rsLog("ChannelID") = ChannelID
rsLog("LogTime") = Now()
rsLog("UserName") = UserName
rsLog("UserIP") = UserIP
rsLog("LogContent") = LogContent
rsLog("ScriptName") = ScriptName
//ScriptName即为第六个参数,也就是上面传送的ComeUrl了.
rsLog("PostString") = PostString
rsLog.Update
rsLog.Close
Set rsLog = Nothing
End Sub

看完上面的代码后,我们来解析一下登录页面的履行流程.
首先,用户名、密码和考证码都经过了过滤,然后判断用户名、密码和考证码能否为空,不为空的话再判断考证码、后台管理认证码的精确性,假如上面肆意一项没有通过,则退出Sub历程.假如退出了Sub历程,我们就无法操纵了.假如通过了,就获得HTTP_REFERER的值,然后再判断用户名和密码的精确性.假如用户名和密码中的肆意一个不对,那么都将使FoundErr的值为True.一旦FoundErr为True,程序就调用 InsertLog()函数插入数据库,把ComeUrl作为它的第六个参数传送.由于HTTP_REFERER可以假造,所以我们可以使其值为一段跨站代码或挂马代码.
不过,由于上面的历程要使后台管理认证码精确,这的确是很不简单办到的.假定认码没有改的话,我们便可以操纵了,不过机率很小.关于 HTTP_REFERER的假造,我这里就不多说了,大家可以去百度查看相关文章.为了便利大家利用,我这里已编好一个假造HTTP_REFERER的工具“reffer.exe”,并随文供应应大家了.
上面发现的漏洞,可以说操纵代价不大,不过,下面的漏洞关于动易网站管理系统来说,就是致命的了.此漏洞存在于User目录下的User_saveflash.asp文件中,其第6~22行代码以下所示.
 
view plainprint?
Dim act, ObjInstalled_FSO, color_name, Create_1, imgurl, SaveFileName, dirMonth  
objName_FSO = Application("objName_FSO")  
ObjInstalled_FSO = IsObjInstalled(objName_FSO)  
If ObjInstalled_FSO = True Then  
    Setwww.110hack.com fso = Server.CreateObject(objName_FSO)  
Else  
    Response.Write "&&SendFlag=保存 >>> NO"  
    Response.end  
End If  
  
act = trim(request("act"))  
//这里是关键  
If act="" Then  
    Call Main()  
Else  
Call CoverColorFile()  
//假如act不为空,则调用CoverColorFile()函数  
End If  
set fso = Nothing  
  
下面我们一同来看看函数CoverColorFile()的代码.  
  
Sub CoverColorFile()  
//此函数用于生成图象BMP文件  
Dim whichfile, head, Colortxt, i, rline, badwords  
//注意whichfile变量  
    Response.Expires = -9999   
    Response.AddHeader "Pragma","no-cache"  
    Response.AddHeader "cache-ctrol","no-cache"  
    Response.ContentType = "Image/bmp"  
  
    '输出图象文件头  
    head = ChrB(66) & ChrB(77) & ChrB(118) & ChrB(250) & ChrB(1) & ChrB(0) & ChrB(0) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(172) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(130) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0) & ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(64) & ChrB(250) & ChrB(1) & ChrB(0) & ChrB(0) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_  
    ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)  
   
    Response.BinaryWrite head  www.110hack.com
  
whichfile=trim(request("color_url"))  
// whichfile由用户提交的color_url而来  
Set Colortxt = fso.OpenTextFile(server.mappath(whichfile),1)  
//以只读方法翻开用户提交的变量whichfile,这里获得的是文件  
    rline = Colortxt.ReadLine  //读取文件一行  
    badwords = split(rline,"|")  //以“|”作脱离  
    Colortxt.Close  
  
fso.deleteFile(server.mappath(whichfile))  
// 这句就是漏洞了,此句的作用是删除文件.由于whichfile由用户提交而来,又没有经过任何安全处理,所以便构成漏洞了.假如我们让 color_url=../conn.asp,那么就直接删除conn.asp文件了,一样,我们可以让color_url为站内任一文件,最后,我们可以删除全站的文件.  
     for i=0 to UBound(badwords)  
        Response.BinaryWrite to3(badwords(i))  
    next  
End Sub  
Dim
act, ObjInstalled_FSO, color_name, Create_1, imgurl, SaveFileName,
dirMonth
objName_FSO = Application("objName_FSO")
ObjInstalled_FSO = IsObjInstalled(objName_FSO)
If ObjInstalled_FSO = True Then
Set fso = Server.CreateObject(objName_FSO)
Else
Response.Write "&&SendFlag=保存 >>> NO"
Response.end
End If
act = trim(request("act"))
//这里是关键
If act="" Then
Call Main()
Else
Call CoverColorFile()
//假如act不为空,则调用CoverColorFile()函数
End If
set fso = Nothing
下面我们一同来看看函数CoverColorFile()的代码.
Sub CoverColorFile()
//此函数用于生成图象BMP文件
Dim whichfile, head, Colortxt, i, rline, badwords
//注意whichfile变量
Response.Expires = -9999
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
Response.ContentType = "Image/bmp"
'输出图象文件头
head = ChrB(66) & ChrB(77) & ChrB(118) & ChrB(250) &
ChrB(1) & ChrB(0) & ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0)
& ChrB(0) & ChrB(40) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(172) & ChrB(0) & ChrB(0)
& ChrB(0) & ChrB(130) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0) & ChrB(24)
& ChrB(0) & ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(64) & ChrB(250) & ChrB(1)
& ChrB(0) & ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
& ChrB(0) & ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
& ChrB(0)
Response.BinaryWrite head
whichfile=trim(request("color_url"))
// whichfile由用户提交的color_url而来
Set Colortxt = fso.OpenTextFile(server.mappath(whichfile),1)
//以只读方法翻开用户提交的变量whichfile,这里获得的是文件
rline = Colortxt.ReadLine  //读取文件一行
badwords = split(rline,"|")  //以“|”作脱离
Colortxt.Close
fso.deleteFile(server.mappath(whichfile))
//这句就是漏洞了,此句的作用是删除文件.由于whichfile由用户提交而来,又没有经过任何安全处理,所以便构成漏洞了.假如我们让
color_url=../conn.asp,那么就直接删除conn.asp文件了,一样,我们可以让color_url为站内任一文件,最后,我们可
以删除全站的文件.
for i=0 to UBound(badwords)
Response.BinaryWrite to3(badwords(i))
next
End Sub

有了上面的漏洞,我们就一同去测试一下官方网站,看看能否存在此漏洞吧.翻开官方演示网站,如图1所示,我们就以动易的Logo作测试吧.查看其途径,发目前images目录下,名为logo.gif,如图2所示.
 

图1
 

图2
目前,我们注册一个用户,然后进入会员中央,在URL上填入:
图3
 
www.110hack.com
图4
除此之外,动易还存在一处漏洞,下面我们一同来解析.count目录下的Counter.asp文件中的第203~270行的代码以下所示.
 
view plainprint?
Agent=Request.ServerVariables("HTTP_USER_AGENT")  
//获得HTTP_USER_AGENT值  
       Agent=Split(Agent,";")  
//以分号作脱离,此时Agent为一数组.  
       BcType=0  
       If Instr(Agent(1),"U") Or Instr(Agent(1),"I") Then BcType=1  
//假如Agent(1)中有字符U或字符I,那么BcType的值为1  
       If InStr(Agent(1),"MSIE") Then BcType=2  
// Agent(1)中有字符MSIE,那么BcType的值为2  
       Select Case BcType  
       Case 0:  
               Browser="别的"  
               System="别的"  
       Case 1:  //假如BcType的值为1  
               Ver=Mid(Agent(0),InStr(Agent(0),"/")+1)  
//从Agent(0)中找到“/”第一次呈现的位置,得到的是一个数字,然后将此数字加1后,再利用Mid函数截取从该数字开始,直到字符串完毕的全部字符,将其赋值给变量Ver  
               Ver=Mid(Ver,1,InStr(Ver," ")-1)  
//InStr函数找到Ver中第一个空格呈现的位置,得到一个数字,然后将此数字减1后,再利用Mid函数截取从该数字开始,直到字符串完毕的全部字符,再将其赋值给变量Ver  
               Browser="Netscape"&Ver  
//这是Browser的内容,Browser的值为字符串Netscape和Ver变量中的字符串  
               System=Mid(Agent(0),InStr(Agent(0),"(")+1)            
       case 2:  
               Browser =Agent(1)  
//把Agent(1)赋值给Browser  
               System=Agent(2)  
               System=Replace(System,")","")           
       End Select   www.110hack.com
       System=Replace(Replace(Replace(Replace(Replace(Replace(System," ",""),"Win","Windows"),"NT5.0","2000"),"NT5.1","XP"),"NT5.2","2003"),"dowsdows","dows")  
       Browser=Replace(Browser," ","")  
 //把空格替换为无  
       System=Left(System,20)  
       Browser=Left(Browser,20)  
 //注意这里,获得Browser左边的20个字符  
……省略无关代码……  
       Call UpdateVisit()  //调用函数UpdateVisit()  
Agent=Request.ServerVariables("HTTP_USER_AGENT")
//获得HTTP_USER_AGENT值
Agent=Split(Agent,";")
//以分号作脱离,此时Agent为一数组.
BcType=0
If Instr(Agent(1),"U") Or Instr(Agent(1),"I") Then BcType=1
//假如Agent(1)中有字符U或字符I,那么BcType的值为1
If InStr(Agent(1),"MSIE") Then BcType=2
// Agent(1)中有字符MSIE,那么BcType的值为2
Select Case BcType
Case 0:
Browser="别的"
System="别的"
Case 1:  //假如BcType的值为1
Ver=Mid(Agent(0),InStr(Agent(0),"/")+1)
//从Agent(0)中找到“/”第一次呈现的位置,得到的是一个数字,然后将此数字加1后,再利用Mid函数截取从该数字开始,直到字符串完毕的全部
字符,将其赋值给变量Ver
Ver=Mid(Ver,1,InStr(Ver," ")-1)
//InStr函数找到Ver中第一个空格呈现的位置,得到一个数字,然后将此数字减1后,再利用Mid函数截取从该数字开始,直到字符串完毕的全部字
符,再将其赋值给变量Ver
Browser="Netscape"&Ver
//这是Browser的内容,Browser的值为字符串Netscape和Ver变量中的字符串
System=Mid(Agent(0),InStr(Agent(0),"(")+1)
case 2:
Browser =Agent(1)
//把Agent(1)赋值给Browser
System=Agent(2)
System=Replace(System,")","")
End Select
System=Replace(Replace(Replace(Replace(Replace(Replace(System,"
",""),"Win","Windows"),"NT5.0","2000"),"NT5.1","XP"),"NT5.2","2003"),"dowsdows","dows")
Browser=Replace(Browser," ","")
//把空格替换为无
System=Left(System,20)
Browser=Left(Browser,20)
//注意这里,获得Browser左边的20个字符
……省略无关代码……
Call UpdateVisit()  //调用函数UpdateVisit()

接下来再看看UpdateVisit()中的代码:
 
view plainprint?
Sub UpdateVisit()  
    Dim rsOut,VisitCount,OutNum  
    VisitCount = 0  
    Set rsOut = conn_counter.Execute("select count(ID) From PE_StatVisitor")  
  
    VisitCount = rsOut(0)  
    If VisitCount >= VisitRecord Then  
              dim rsOd  
              set rsOd = conn_counter.Execute("select top 1 VTime from PE_StatVisitor order by VTime asc"www.110hack.com)  
              if CountDatabaseType="SQL" then  
                     conn_counter.Execute("update PE_StatVisitor set VTime='"&Now()&"',IP='"&IP&"',Address='"&Address&"',Browser='"&Browser&"',System='"&System&"',Screen='"&Screen&"',Color='"&Color&"',Timezone="&VisitTimezone&",Referer='"&Referer&"' where VTime='" & rsOd("VTime") & "'") //把Browser插入数据库了.  
              else  
……省略无关代码……    
  Set rsOut = Nothing  
End Sub  
Sub
UpdateVisit()
Dim rsOut,VisitCount,OutNum
VisitCount = 0
Set rsOut = conn_counter.Execute("select count(ID) From
PE_StatVisitor")
VisitCount = rsOut(0)
If VisitCount >= VisitRecord Then
dim rsOd
set rsOd = conn_counter.Execute("select top 1 VTime from
PE_StatVisitor order by VTime asc")
if CountDatabaseType="SQL" then
conn_counter.Execute("update PE_StatVisitor set
VTime='"&Now()&"',IP='"&IP&"',Address='"&Address&"',Browser='"&Browser&"',System='"&System&"',Screen='"&Screen&"',Color='"&Color&"',Timezone="&VisitTimezone&",Referer='"&Referer&"'
where VTime='" & rsOd("VTime") & "'") //把Browser插入数据库了.
else
……省略无关代码……
Set rsOut = Nothing
End Sub

由于HTTP_USER_AGENT可以假造,且只将空格替换成了没有空格,所以还是存在漏洞的,此漏洞为注入漏洞.不过操纵起来很不简单,Browser=Left(Browser,20)这个代码把Browser限制到只有20个字符,要想操纵,我们要使BcType的值为1大概为 2.要使BcType的值为1,必须包含字符“U”或字符“I”;要使BcType的值为2,必须包含“MSIE”4个字符.所以,BcType的值为1 时,可供我们输入的还有19个字符,BcType的值为2时,可供我们输入的只有16个字符.固然有漏洞,但是操纵代价也不大,实属惋惜.
修补办法
关于第一个漏洞,由HTTP_REFERER造成的小小问题,我们可以这样改正代码:
view plainprint?
Sub InsertLog(LogType, ChannelID, UserName, UserIP, LogContent, ScriptName, PostString)  
    Dim sqlLog, rsLog  
    sqlLog = "select top 1 * from PE_Log"  
    Set rsLog = Server.CreateObject("Adodb.RecordSet")  
    rsLog.Open sqlLog, Conn, 1, 3  
    rsLog.addnew  
    rsLog("LogType") = LogType  
    rsLog("ChannelID") = ChannelID  www.110hack.com
    rsLog("LogTime") = Now()  
    rsLog("UserName") = UserName  
    rsLog("UserIP") = UserIP  
    rsLog("LogContent") = LogContent  
    rsLog("ScriptName") = ReplaceBadChar(ScriptName)  
//用动易供应的函数ReplaceBadChar()作过滤处理  
    RsLog(“PostString”) = PostString  
    rsLog.Update  
    rsLog.Close  
    Set rsLog = Nothing  
End Sub  
Sub InsertLog(LogType, ChannelID, UserName, UserIP, LogContent, ScriptName, PostString)
Dim sqlLog, rsLog
sqlLog = "select top 1 * from PE_Log"
Set rsLog = Server.CreateObject("Adodb.RecordSet")
rsLog.Open sqlLog, Conn, 1, 3
rsLog.addnew
rsLog("LogType") = LogType
rsLog("ChannelID") = ChannelID
rsLog("LogTime") = Now()
rsLog("UserName") = UserName
rsLog("UserIP") = UserIP
rsLog("LogContent") = LogContent
rsLog("ScriptName") = ReplaceBadChar(ScriptName)
//用动易供应的函数ReplaceBadChar()作过滤处理
RsLog(“PostString”) = PostString
rsLog.Update
rsLog.Close
Set rsLog = Nothing
End Sub

关于第二个删除肆意文件的漏洞,最好不要从外部接纳数据,要末就删除代码:fso.deleteFile(server.mappath(whichfile)).
关于第三个由于HTTP_USER_AGENT可以假造招致的问题,我们可以把单引号过滤.用于修补的代码以下所示.
 
Browser=Left(Browser,20)
Browser=replace(Browser,”’”,””)
 
至此,动易内容管理系统的漏洞就解析完毕了,虽说拿不到WebShell,但对动易来说,存在的漏洞还是致命的,操纵第二个漏洞搞破坏太简单了.但愿大家看了今后,不要去搞破坏哦,还在利用动易系统的朋友,记得快去可以修补漏洞啦!


  以上是“动易网站管理系统最新漏洞解析[漏洞安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • 动易网站管理系统最新漏洞解析
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .