2021年9月30日,老外曝光了关于国产知名框架DedeCMS的远程未授权RCE漏洞,江湖救急快速完成了跟踪分析。
过节的被老板叫回来分析漏洞(没有加班费😂),作为一名IT民工真不容易!吐槽归吐槽,活还是要干的,自己还是挺好奇这到底是个啥洞。
搭建v5.8.1内测版本环境。
问题出现在flink.php文件,在`GetChkVdValue`中检查session,当不合法时执行`ShowMsg`函数显示错误信息。
进入`ShowMsg`函数,当`gourl`不等于`-1`时,从`Referer`头或者上一页面中读取URl值。
随后调用`DedeTemplate`中进行模板渲染。
进入`dedetemplate.class.php`中执行`loadString`函数,该函数首先设置缓存文件和缓存配置文件,缓存文件位于`datatplcache`目录,随后调用`ParserTemplate`对文件进行初步检查。
返回`common.fun.php`执行调用`Display`函数,这里注意到`WriteCache`函数的调用。
在`WriteCache`函数中写入缓存文件。
发送一个POST报文,本地生成cache文件如下图,经过测试`Reference`内容被写入文件。
很简单的思路是使用`php`标签包裹php语句,但尝试执行Phpinfo提示disabled function。
这里注意到了`CheckDisableFunction`过滤了危险函数。函数首先通过`token_get_all_nl`函数获取输入时,处理时并没有过滤双引号,导致在`disable_functions`列表匹配时失败。
这里用到了php执行的一个新的技巧,可以直接实现命令执行。
具体POC就不放出来了。
在最新的5.7.80版本中,禁用模板渲染的代码,而且5.7.7-SP2版本中也同样没有使用在`Msg`函数中调用模板处理。
总的来说,这个漏洞为未授权远程命令执行漏洞,原理比较简单。但由于只影响5.8.1版本,而且很快进行了修补,所以更多的可以看作中间代码调整而产生的漏洞,影响力有限。
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
原文始发于微信公众号(且听安全):2021国庆·江湖救急-DedeCMS 未授权RCE漏洞原理及影响面分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论