警惕Third Party Content攻击
作者:SuperHei
“对于web应用程序,很多程序为了实现一些功能比如程序升级/提醒,还有广告什么的都直接在程序里使用了Third Party Content,那么当官方等站被黑时,基本使用你程序的用户都被xx了,这个以后也有可能和crsf一样成为一种vul呢?”
上面的文字引用于年前的一个blog:http://hi.baidu.com/hi_heige/blog/item/2700f9f93bc2d209d9f9fdbe.html,没想到今天就有了实际例子了.今天n多dz论坛被挂上了”Hacked by ring04h, just for fun!”,引起很大关注,最开始基本上都是认为dz的程序出现了非常严重的漏洞,但是等官方的声明一出来,原来只是”Discuz!服务器域名被劫持”….
其实我觉得这样的问题,应该把他归为程序的vul[还有crsf也是],而且除了这个问题ring04h还利用了其他的一些’漏洞’
第一 Third Party Content
Discuz!_5.5.0_SC_GBK\upload\admin\global.func.php直接调用了第三方的js:
00436: $posts = $db->result($db->query(“SELECT COUNT(*) FROM {$tablepre}posts”), 0);
00437: $msns = $db->result($db->query(“SELECT COUNT(*) FROM {$tablepre}memberfields WHERE msn!=””), 0);
00438: echo ‘<script language=”JavaScript” src=”http://customer.discuz.net/news.php?version=’.rawurlencode(DISCUZ_VERSION).’&release=’.rawurlencode(DISCUZ_RELEASE).’&php=’.PHP_VERSION.’&mysql=’.$dbversion.’&charset=’.rawurlencode($charset).’&bbname=’.rawurlencode($bbname).’&members=’.$members.’&threads=’.$threads.’&posts=’.$posts.’&msn=’.$msns.’&md5hash=’.md5(preg_replace(“/http:\/\/(.+?)\/.*/i”, “\\1″, $_SERVER[‘HTTP_REFERER’]).$_SERVER[‘HTTP_USER_AGENT’].DISCUZ_VERSION.DISCUZ_RELEASE.$bbname.$members.$threads.$posts).'”></script>’;
直接用的script标签.
第二 变量缺少过滤
记得ms有句名言:”一切输入都是有害的”,但是对于web2.0的猥琐攻击时代,对于那些注意安全的程序员来说已经不够用了.我们应该另外加一句话了:
“一切输出也都是有害的”
ring04h攻击代码里的playload其实就是用了一个后台插入js的问题,而前台对这个值的输出是没有过滤的,导致再一次被xss,具体到这次的代码:
<script>function init() { document.write(‘Hacked by ring04h, just for fun!’);}window.onload = init;</script>
ring04h还是比较厚道的 只是write了一句话,如果给他挂个马 不知道要死多少pc…
我们小结下这次攻击的流程:
1.ring04h控制了customer.discuz.net[这里不官他是域名劫持还是其他什么方法!:)]
2.构造自己的js[利用ajax技术结合上面说的变量输出未过滤的问题实现插入js修改主页]
3.等待管理员登陆访问后台,然后执行了构造的js
给我们的一些提示:
1.如果dz代码里不直接使用Third Party Content,或者对Third Party Content的内容进行过滤后使用呢?
2.如果customer.discuz.net足够安全呢?
3.如果我所有输入输出的变量都严格过滤了呢?
对于2来说这个是太难了,这里也涉及到一个攻击的成本与利润的问题,如果攻击者有商业利益驱使,他即使发大点的代价去黑了你这个3方内容的主机也是值的,因为他一旦成功就可以控制你所有的客副..[估计以后各大官方的升级主机可能是’黑客’的目标]
第3这个 还有很多的程序员不知道过滤变量,尤其是输出的东西也需要过滤.
所以对于开发者来说,第1个是最方便有效果的方法? 不过同时还得注意程序员的安全意识的培养.
说点8挂:
1.为什么sodb那么多漏洞,都没有这次那么被关注呢?
2.dz的竞争对手门,没有放过这次好机会,但是他们不知道,其实他们自己的程序主机一样有相同的问题 :)[看热闹或者起哄的同时想想自己!!]
3.出动了人肉搜索:http://18dao.jamesqi.com/index.php?title=Ring04h%E5%9F%9F%E5%90%8D&variant=zh-tw
最后感谢ring04h给我们提供了一个这么好的实际例子,并分享演示了他的测试过程 thx.