Aspcms漏洞分析

日期: 2013-06-07 来源:TechTarget中国

  Aspcms是由上谷网络开发的全新内核的企业建站系统,能够胜任企业多种建站需求,并且是完全开源的一套CMS建站系统,在国内用户量众多。上个月aspcms修复了很多安全漏洞,这其中主要的包括SQL注入,COOKIE欺骗和后台的越权访问等。最近湖盟云安全专家对其做了详细分析,总结了其漏洞出现的原因主要有以下两点

  一.权限验证的脆弱性

  Aspcms在处理会员登陆,管理员登陆,及所有权限验证时都采用了COOKIE验证,我们知道COOKIE是保存在客户本地终端上的数据,用户可以随意伪造。如果知道其加密方式,再构造其管理员cookie,即可获取管理权限。

  验证管理员用的了CheckAdmin函数,其代码如下

  Function CheckAdmin()

      if isnul(rCookie(“adminName”)) then

            alertMsgAndGo”您还没有登陆”,”/”

      else

            Dim Permissions

            Permissions=rCookie(“Permissions”)

            if Permissions<>”all” and isnul(Permissions) then

                  alertMsgAndGo”您没有访问权限”,”-1″

            else                 

                  if not instr(lcase(Permissions),lcase(getPageName))>0 and Permissions<>”all” and not instr(lcase(getPageName),lcase(“AspCms_ManagerEditPass”))>0 then

                        alertMsgAndGo”您的访问权限不够”,”-1″

                  end if

            end if

      end if

  End Function

  从cookie读取adminName和Permissions,adminName不为空是即通过,Permissions不为空并且等于all时获得所有权限。

  那么我们添加两个cookie adminName = admin  Permissions = all  即可获得后台管理权限。

  二.处理SQL注入的缺陷

  Aspcms在过滤SQL注入时,某个关键的函数存在缺陷,我们可以通过构造SQL,即可绕过其过滤实现注入。

  其关键函数preventSqlin代码如下

  Function preventSqlin(content)

      dim sqlStr,sqlArray,i,speStr

      sqlStr=”<|>|%|%27|’|”|;|*|and|exec|dbcc|alter|drop|insert|select|update|delete|count|master|truncate|char|declare|where|set|declare|mid|chr”

      if isNul(content) then Exit Function

      sqlArray=split(sqlStr,”|”)

      for i=lbound(sqlArray) to ubound(sqlArray)

            if instr(lcase(content),sqlArray(i))<>0 then

                        select case sqlArray(i)

                              case “<“:speStr=”&lt;”

                              case “>”:speStr=”&gt;”

                              case “‘”,””””:speStr=”&quot;”

                              ‘case “;”:speStr=”;”

                              case else_speStr=””

                        end select

                        content=replace(content,sqlArray(i),speStr,1,-1,1)      

            end if

      next

      preventSqlin=content

  End Function

  如果用户提交的信息里含有sqlStr中定义的关键字,就将其替换掉。但是注意,这里仅仅替换了一次,那么我们可以构造类似于sel(and)ect 的SQL,通过过滤函数替换and之后即可实现注入。

  湖盟云安全平台(my.hnhack.com):国际知名的网站安全保护、网站性能提升平台,通过湖盟云平台分布在世界各地的节点,可以有效提高网站访问量,据统计,使用了湖盟云平台的网站,能有效解决CC、DDOS 各个方面的安全问题。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。