返回列表 发帖
查看: 7182|回复: 1

[已处理] Discuz!X.3.4 ML任意代码执行漏洞修复(discuz多国语言版)

17

主题

568

回帖

1816

积分

应用开发者

贡献
63 点
金币
902 个
QQ
发表于 2019-7-24 15:26:44 | 显示全部楼层 |阅读模式
BUG反馈
程序版本: X3.4
浏览器: 其他(请在帖子中详细说明浏览器) 
BUG地址: 隐藏内容
BUG截图: -
测试用户名: 隐藏内容
测试密码: 隐藏内容


0X1 漏洞描述

2019年7月11日,网络上出现了一个Discuz!ML远程代码执行漏洞的PoC,研究员验证对discuz x3.4进行全面的网站渗透测试的时候,发现discuz多国语言版存在远程代码执行漏洞,该漏洞可导致论坛被直接上传webshell,直接远程获取管理员权限,linux服务器可以直接执行系统命令,危害性较大,关于该discuz漏洞的详情,我们来详细的分析看下。攻击者能够利用该漏洞在请求流量的cookie字段中(language参数)插入任意代码,执行任意代码,从而实现完全远程接管整个服务器的目的,该漏洞利用方式简单,危害性较大。漏洞影响范围包括如下版本。
Discuz ML! V3.X存在代码注入漏洞,
攻击者通过精心构建的请求报文可以直接执行恶意的PHP代码,
进一步可获取整个网站的服务器权限。

漏洞影响版本:

Discuz!ML v.3.4,
Discuz!ML v.3.2,
Discuz!ML v.3.3 codersclub.org的产品

Discuz!ML是一个由CodersClub.org创建的多语言,集成,功能齐全的开源网络平台,

用于构建像“社交网络”这样的互联网社区。使用这些软件创建的数百个论坛包括v3.2,v3.3,v3.4。
1.3如何区分Discuz!ML网站

通常,这些站点包含以下类型的页脚或站点的左下侧。

Discuz! ML v.3.4、Discuz! ML v.3.3、Discuz! ML v.3.2
源码下载链接:https://bitbucket.org/vot/discuz.ml/downloads/


0X2 漏洞分析!

根据公告定位文件source/module/portal/portal_index.php第32行
20190713085747265.png

查看问题函数上方查看定义函数以及关联文件的位置,可以看到template函数在/source/function/function_core.php中,继续跟进
20190713085646388.png


问题代码如下所示。

$cachefile = './data/template/'.DISCUZ_LANG.'_'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';

程序将缓存文件写在了/data/template/目录下,文件名由DISCUZ_LANG等多个变量组成,问题就出在这儿了,看看DISCUZ_LANG的值是哪儿获取来的:
20190713085817161.png


可以看到从程序全部变量$_G[‘config’][‘output’][‘language’]中获取了该值。继续跟进看看该值可以定位到/source/class/discuz/discuz_application.php:
20190713085827190.png


在304行,系统通过Cookie获取了语言的值,并在341行定义了前面要找的DISCUZ_LANG,值为Cookie中获取到的lng。可以看到整个过程没有任何的过滤。整个流程即就是:外部参数‘ lng。可以看到整个过程没有任何的过滤。整个流程即就是:外部参数`lng。可以看到整个过程没有任何的过滤。整个流程即就是:外部参数‘lng(即language语言)可控,导致template函数生成的临时模板文件名可操纵,插入自己的代码,最终include_once`包含一下最终导致了代码注入。那这里可以搜一下其他的可利用点,全局查找:
20190713085835430.png

大约有60多个点可以用的。

0X3 漏洞利用

访问论坛主页,在Cookie的language字段值后面拼接php代码:

  1. ‘.phpinfo().’
复制代码

20190713085854421.png


执行命令获得管理员权限:
20190713085901212.png

0X4 漏洞修复
对discuz的版本进行全面的升级,在language参数值中进行全面的安全过滤,限制逗号,以及闭合语句的执行,还有\斜杠都一些特殊恶意代码进行拦截,必要的话对其进行转义,如果对代码不是太熟悉的话,也可以找专业的网站安全公司来进行漏洞修复,国内也就SINE安全公司,绿盟,启明星辰比较专业。再一个对discuz目录的权限进行安全分配,限制data目录的脚本执行权限,防止PHP脚本的运行,最重要的就是做好网站的安全防护。
打开 source/class/discuz/discuz_application.php
找到
  1. if(!$lng) {
复制代码

修改为
  1. if(!preg_match("#^[\w]+$#i", $lng)){
  2.         $lng = '';
  3. }
  4. if(!$lng) {
复制代码


原文地址:http://esoln.net/esoln/blog/2019/06/14/discuzml-v-3-x-code-injection-vulnerability/
我知道答案 回答被采纳将会获得1 贡献 已有1人回答
回复

使用道具 举报

83

主题

2795

回帖

3564

积分

功行圆满

贡献
22 点
金币
351 个
发表于 2019-7-24 20:41:04 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2024-5-8 02:51 , Processed in 0.061332 second(s), 10 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2024 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表