动易SiteFactory等产品5.7版以前版本的漏洞产生原因和利用方法
一、漏洞产生原因
我们系统5.7以前版本中存在的SQL注入漏洞的根源在于我们的SQL注入过滤方法的逻辑不严密,没有递归过滤直到过滤掉所有攻击代码,而设计师在制作标签时为了容易调试,没有严格按照规范设置标签参数的数据类型。双重叠加导致了SQL注入漏洞的产生。
这是正确的代码,递归调用并返回值
这是产生漏洞的代码,递归调用但没有要返回的值
标签中同时存在“允许Ajax调用”和“参数数据类型为supersql”这两项。
这两个问题叠加,从而导致了Ajax调用存在SQL注入漏洞。但普通的注入代码是执行不了的(比如select * from PE_Admin),必须经过变形后才可以执行(比如selselectect * from PE_Admin,看到有什么不同了吗?)。但只要有规律,黑客就会利用规律写各种变形后的SQL查询语句。
二、漏洞利用方法
因为存在SQL注入漏洞,所以黑客可以得到数据库中的所有信息,其中最关键的是管理员信息。黑客还可以利用SQL注入漏洞篡改管理员密码或新增管理员。但因为我们系统还有一层保护:管理员密码哈希值。系统在登录时除了验证密码是否相符以外,还会再验证密码密文附加哈希值后经过再次哈希加密后的值。如果不符,则仍不能登录。而黑客通过SQL注入漏洞篡改密码或新增的管理员记录,会因为哈希值不对而无法登录。因为管理员密码哈希值不是保存在数据库中的,所以黑客无法通过SQL注入漏洞得到。所以如果黑客不知道管理员密码哈希值,则黑客的这两种攻击手段即使成功执行也会无效,仍然登录不了后台。
所以,当我们把管理员密码哈希值设置得较为复杂时,即使有SQL注入漏洞,他也只能在得到管理员的密码加密值后,用撞库攻击方式来猜解密码。但如果管理员密码哈希值为默认的PowerEasy,则黑客完全可以不需要猜解密码,直接用SQL注入漏洞改成管理员密码或新加一个超级管理员就可以了。
而黑客利用撞库攻击方式来得到密码,则是一个看运气的事:能否命中要看管理员的密码是不是在黑客所用的密码字典里。理论上,如果所有管理员密码都是非常复杂的话,黑客是无法猜解到的。然而我们许多管理员的密码非常简单,或者很常见,这样就轻易被黑客猜解到或撞库攻击命中。
我们一般会认为:只要超级管理员的密码足够复杂就可以了,普通管理员的密码简单一些没有问题,或者被锁定的管理员账户即使密码很简单但无法登录后台所以没有问题。这些人的密码被黑客得到,他登录的也是普通管理员,或者因为被锁住了根本无法登录。所以大家都不重视普通管理员的密码复杂度问题。
在系统没有注入漏洞的时候,确实是这样的,但在系统有注入漏洞的情况下,黑客可以将对应的管理员解锁并提权。即黑客可以用这个管理员的用户名和密码登录后台,并且是超级管理员权限。
这样黑客就得到了后台超级管理员的权限了。但还有一个问题,他怎么进入后台?在这个时候,我们系统提供了两层防护措施:后台管理目录和后台管理验证码,这两个值也不是保存在数据库中的,按理说无法通过SQL注入漏洞来获得。如果黑客不知道这两个,还是无法登录后台的。
但我们系统为了照顾部分用户的前台显示“管理登录”链接的需求,提供了一个{PE.SiteConfig.ManageDir /}标签并解析成后台管理目录地址。黑客可以通过在可以解析标签的地方(具体位置就不说了,以免大家直接攻击)放入这个标签从而得到后台管理目录,所以等于是只有“后台管理验证码”这一个防护措施起作用了。
然而,因为大部分网站还存在以下安全问题,所以让黑客非常轻松的就进入了后台:
1.网站后台管理验证码为默认的8888或其它过于简单的字符;
2.网站后台管理目录为默认的Admin或其它过于简单的字符,甚至有许多网站直接在前台页面有“管理登录”的链接;
3.网站后台管理认证码与网站后台目录设置为相同的字符;
黑客进入后台了,其实就已经入侵了。但黑客往往还不满足于此,会进一步想得到WebShell,以植入木马和后门。现在黑客入侵后很少会直接改首页以告诉大家这个网站被黑了,所以就算被黑客入侵了,表面上也看不出任何问题来,往往要很久之后才可能被发现。如果不发生百度快照劫持之类的事件,可能几年后才会被发现。如果黑客已经清理了入侵痕迹的话,可能永远都不会被发现。
为什么黑客入侵后不修改首页?因为入侵后改首页不能给黑客带来任何利益,只会增加他被抓的可能性。因为一旦出现这样的事情,客户可能就会报警,网警就可能介入!以前是纯技术爱好者时,中美两国之间的黑客互相比技术时可能会出现这种情况。但现在,黑客都是要生存甚至要过得比一般人还要好的生活,谁还会去做这种“傻事”?
黑客进入后台权限再得到WebShell的方法则是利用我们以前产品设计思想中的两个操作信任问题:1、我们认为开放给超级管理员的功能可以创建任意文件也没事,因为已经是超级管理员身份了,还不是想做什么都可以,但没有想过这个超级管理员是黑客通过攻击手段提权上来的。2、在生成文件时信任数据库中的数据是安全的,没有再经过检查。
如果网站不存在上述的安全薄弱问题,黑客虽然无法进入网站后台,但黑客仍可以得到WebShell。因为黑客仍然可能在本次漏洞修复前利用SQL注入漏洞在数据库中植入恶意代码,而系统后台的内嵌代码管理功能可以生成任意文件,并可以关联节点或专题,所以管理员在后台正常操作节点、专题时系统就按照黑客指定的格式和内容生成了WebShell文件。这一时间可能要很久,也可能很快,取决于管理员什么时候修改栏目和专题。所以黑客一般不会用这种方法,而多是想办法进后台创建WebShell。
黑客得到WebShell后,接下来就可以作任何事了。如果服务器安全没有做好,还可以进一步得到服务器控制权限,或者查看服务器上的任意文件之类的。这些就不在本文探讨之列了。
以上就是动易这一漏洞的完整利用过程。
这一漏洞已经被黑客界发现很久,并且在此之前已经有不少客户中招,出现网站的百度快照劫持问题,但我司技术人员在帮客户处理后排查原因时发现被黑的客户网站都存在“相关设置为默认值和密码过于简单”的问题,且生成木马时都有访问后台相应页面,从而一直以为是黑客知道后台管理员密码而进入后台再生成木马文件的,这给我们进一步排查漏洞造成了很大的干扰,直到有一个安全方面做得比较好的客户也发现了这个问题,才最终找到漏洞所在。因此,我们强烈建议大家一定要重视安全问题,各种安全手段能用上的就一定要用,而不是让其做为摆设。安全是一个系统工程,每一个环节都要做好,才能安全!因为黑客可以针对任何一个薄弱点发起攻击并可能因此而得手,然后逐步扩大战果!