|
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 各个方面的安全问题。
|