安全矩阵

 找回密码
 立即注册
搜索
查看: 2551|回复: 0

2021国庆·江湖救急-DedeCMS 未授权RCE漏洞原理及影响面分析

[复制链接]

251

主题

270

帖子

1797

积分

金牌会员

Rank: 6Rank: 6

积分
1797
发表于 2021-10-3 16:35:57 | 显示全部楼层 |阅读模式
本帖最后由 Meng0f 于 2021-10-3 16:37 编辑

文章来源:QCyber 且听安全 2021-10-03
2021国庆·江湖救急-DedeCMS 未授权RCE漏洞原理及影响面分析


​2021年9月30日,老外曝光了关于国产知名框架DedeCMS的远程未授权RCE漏洞,江湖救急快速完成了跟踪分析。

过节的被老板叫回来分析漏洞(没有加班费????),作为一名IT民工真不容易!吐槽归吐槽,活还是要干的,自己还是挺好奇这到底是个啥洞。

环境搭建





搭建v5.8.1内测版本环境。





漏洞分析






问题出现在flink.php文件,在`GetChkVdValue`中检查session,当不合法时执行`ShowMsg`函数显示错误信息。



进入`ShowMsg`函数,当`gourl`不等于`-1`时,从`Referer`头或者上一页面中读取URl值。



随后调用`DedeTemplate`中进行模板渲染。



进入`dedetemplate.class.php`中执行`loadString`函数,该函数首先设置缓存文件和缓存配置文件,缓存文件位于`data\tplcache`目录,随后调用`ParserTemplate`对文件进行初步检查。



返回`common.fun.php`执行调用`Display`函数,这里注意到`WriteCache`函数的调用。



在`WriteCache`函数中写入缓存文件。



发送一个POST报文,本地生成cache文件如下图,经过测试`Reference`内容被写入文件。



很简单的思路是使用`php`标签包裹php语句,但尝试执行Phpinfo提示disabled function。



这里注意到了`CheckDisableFunction`过滤了危险函数。函数首先通过`token_get_all_nl`函数获取输入时,处理时并没有过滤双引号,导致在`disable_functions`列表匹配时失败。



RCE触发







这里用到了php执行的一个新的技巧,可以直接实现命令执行。



具体POC就不放出来了。


其他版本分析






在最新的5.7.80版本中,禁用模板渲染的代码,而且5.7.7-SP2版本中也同样没有使用在`Msg`函数中调用模板处理。



总的来说,这个漏洞为未授权远程命令执行漏洞,原理比较简单。但由于只影响5.8.1版本,而且很快进行了修补,所以更多的可以看作中间代码调整而产生的漏洞,影响力有限。

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-22 16:33 , Processed in 0.021637 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表