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=”<”
case “>”:speStr=”>”
case “‘”,””””:speStr=”"”
‘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中国