织梦管理系统任意文件删除从 0 开始的挖掘思路分析
字数 1119 2025-08-29 08:30:24
织梦管理系统(DedeCMS)任意文件删除漏洞挖掘与分析
一、环境搭建
- 源码获取:从织梦管理系统(DedeCMS)官方网站下载源码
- 环境配置:使用phpStudy一键搭建环境
- 后台目录:默认后台访问路径为
/dede
二、漏洞挖掘方法论
1. 审计工具辅助
- 使用代码审计工具进行初步扫描
- 重点关注文件删除相关函数和操作
2. 人工审计流程
- 筛选可能存在文件删除功能的代码段
- 逐个跟踪分析可能的漏洞点
- 耐心是关键,大部分代码路径不可控
三、漏洞挖掘过程分析
第一次尝试
- 定位代码:发现文件名参数不可控
- 结论:无法利用
第二次尝试
- 发现位置:
file_manage_control.php文件 - 标准文件删除操作:
unlink($filename); - 测试过程:
- 构造请求包测试文件删除功能
- 发现默认目录为网站根目录
- 尝试删除
flag文件
- 限制分析:
- 使用正则过滤
../等路径遍历字符 - 正则替换效果:
../folder/file.txt→folder/file.txt./file.txt→file.txt....//file.txt→file.txt
- 目录参数也有严格限制
- 使用正则过滤
- 结论:路径遍历被有效防御,无法利用
第三次尝试
- 定位代码:发现对文件类型和路径字符都有严格限制
- 结论:无法利用
第四次尝试
- 定位代码:文件名参数为MD5编码,不可控
- 结论:无法利用
成功案例
- 定位代码:发现可通过数组参数控制文件删除
- 关键代码分析:
// 删除逻辑 foreach($files as $file) { $file = $tmpdir.'/'.$file; if(file_exists($file)) { unlink($file); } } - 利用条件:
$tmpdir默认为空(未进入赋值方法)- 基础目录:
D:/phpstudy_pro/WWW/DedeCMS-V5.7.115/uploads/data/ - 需要传入数组参数
- Payload构造:
$files = array('../../../flag.txt'); // 需要实际存在的文件 - 效果验证:成功删除网站根目录下的
flag.txt文件
四、漏洞利用关键点
- 参数控制:必须能够控制
$files数组参数 - 路径构造:利用基础目录与相对路径组合
- 文件存在:要删除的文件必须实际存在
- 目录拼接:利用
$tmpdir为空的特点进行路径穿越
五、防御建议
-
输入验证:
- 严格过滤用户输入的特殊字符
- 限制文件操作的范围
-
权限控制:
- 文件操作使用绝对路径
- 设置open_basedir限制文件访问范围
-
安全编码:
- 避免直接使用用户输入作为文件路径
- 对文件操作进行权限检查
-
日志监控:
- 记录所有文件删除操作
- 监控异常的文件系统操作
六、总结
该漏洞展示了在文件操作中不安全的参数处理可能导致的安全风险。通过精心构造的数组参数,攻击者可以利用路径拼接特性实现任意文件删除。防御此类漏洞需要多层次的防护措施,包括输入验证、权限控制和操作监控。