某cms审计
字数 804 2025-08-25 22:59:02
某CMS任意文件上传漏洞分析与复现
漏洞概述
在某CMS中发现一个严重的任意文件上传漏洞,位于accountalert.php文件中。该漏洞允许攻击者上传任意文件到服务器,且上传后文件保持原始名称,存储在/common/feng_img/目录下。
漏洞分析
1. 过滤机制分析
该CMS采用全局过滤文件x.php对输入参数进行过滤:
- 对
GET、POST和COOKIE参数进行过滤 - 主要过滤了SQL语句中的
and、or和form等关键词 - 但未对文件上传功能进行有效过滤
2. 漏洞位置
漏洞位于accountalert.php文件中:
- 检查文件是否存在后直接上传
- 未实施任何文件类型检查或后缀限制
- 未对上传文件进行重命名处理
3. 上传路径
上传后的文件存储在:
/common/feng_img/[原始文件名]
漏洞复现步骤
- 准备一个恶意文件(如webshell.php)
- 构造上传请求到
accountalert.php - 上传成功后,文件将保存在:
/common/feng_img/webshell.php - 直接访问上传的文件即可执行
其他安全问题
该CMS还存在其他安全问题:
- SQL注入漏洞:
x.php的过滤不完善- 通过替换
and、or和form等关键词可绕过过滤 - 前台存在可被利用的注入点
防御建议
-
文件上传功能应实施:
- 严格的白名单文件类型检查
- 文件内容检测(如检查文件头)
- 强制重命名上传文件(如使用随机文件名)
- 限制上传目录的执行权限
-
SQL注入防护:
- 使用参数化查询或预处理语句
- 实施更全面的输入过滤
- 对特殊字符进行转义处理
-
其他建议:
- 限制上传目录的访问权限
- 定期进行安全审计和代码审查
- 实施Web应用防火墙(WAF)
总结
该CMS的任意文件上传漏洞由于缺乏基本的文件上传安全检查机制,导致攻击者可轻易上传恶意文件获取服务器控制权。结合前台存在的SQL注入漏洞,系统面临严重的安全风险。建议开发者全面审查代码,实施多层次的安全防护措施。