DeDeCMS 5.8.1代码执行分析复现
前言
最近国外的安全研究人员发了一个dedecms的漏洞
当然这并不是dedecms的发行版本,属于内测版本
源码地址
原作者博客
这里只针对原文中的代码执行分析,注入方面不做研究
代码分析
对比源码不难发现,相对于5.7版本,5.8更多的采用了模板解析的形式
以下是5.8

以下是5.7,可以看到5.7中是直接echo输出的

故这里也可以去找解析模板的地方,只要参数可控,即可产生模板解析漏洞
还是有一些的在一定条件下,可能存在前台可用的情况,之后会做分析
此篇不在赘述
继续跟进showmsg调用的loadString方法

继续跟进ParseTemplate方法,这个方法主要就是对加载的字符串的解析
如果是常规的<?php echo 1;?>,的形式则会跳过
真正需要解析的是类似于{@include 1.txt}的形式

接下来需要调用display方法了

这里主要是看调用的writeCache方法
这里会把result写入缓存,猜都可以猜到是刚才解析的字符串

但还是跟进去看看
没有错,是sourceString

当然这里还存在一个CheckDisabledFunctions方法,这是一个对危险函数的过滤

绕过方式,也有不少
比如原文作者用到的<?php "system"('dir');?>
然后再进行文件包含,产生了漏洞
接下来就是看,怎么调用showmsg方法了
可以看到,showmsg中有两个参数是带入了被解析的字符串的

其中的msg都是不可控的,那么问题处在了gourl上面
有两种可控的方式
- 直接传入的参数就可控,且未传入onlymsg参数
- 传入的gourl参数为-1

参数为-1的情况
/plus/flink.php?dopost=save/plus/users_products.php?oid=1337/plus/download.php?aid=1337/plus/showphoto.php?aid=1337/plus/users-do.php?fmdo=sendMail/plus/posttocar.php?id=1337/plus/vote.php?dopost=view/plus/carbuyaction.php?do=clickout/plus/recommend.php
随便找一处

或者用下面的拼接的调用

其实这里应该可以直接拼接,因为server变量没走全局过滤

gourl直接可控的情况
/plus/recommend.php/plus/users_do.php/plus/vote.php/plus/edit.inc.php
以/plus/recommend.php为例
1 | /plus/recommend.php?action=send&aid=1&email=admin@qq.com&arcurl=<?php%20$a=$b.$c;$a($d);die();/*&b=sys&c=tem&d=dir |

或者直接做php标签的模板解析

poc
1 | /plus/recommend.php?action=send&aid=1&email=admin@qq.com&arcurl={dede:php}%0a$a=$b.$c;$a($d);die();/*%0a{/dede:php}&b=sys&c=tem&d=dir |







