CVE-2025-22213
字数 985 2025-08-29 08:29:58
Joomla CMS CVE-2025-22213 漏洞分析与利用教学文档
漏洞概述
漏洞编号: CVE-2025-22213
影响版本: Joomla! CMS 4.0.0-4.4.11, 5.0.0-5.2.4
漏洞类型: 文件扩展名任意修改漏洞
漏洞描述: 媒体管理器中的检查不充分允许具有"编辑"权限的用户将文件扩展名更改为任意扩展名,包括.php和其他可能可执行的扩展名。
环境搭建
使用Docker一键启动受影响版本的Joomla CMS环境:
docker run -d -p 8080:80 joomla:5.2.4
漏洞分析
代码差异分析
通过对比Joomla 5.2.4和5.2.5版本的代码差异,发现主要修复点在文件扩展名检查上:
- 在5.2.5版本中新增了
FileExtension的严格检查 - 漏洞存在于
copyfile函数中,该函数被copy函数调用 ApiModel中调用了copy函数,这是漏洞触发的关键路径
漏洞触发流程
- 攻击者需要具有"编辑"权限的后台账号
- 上传恶意内容文件(需伪装成图片格式,如test.png)
- 通过媒体管理器的重命名功能修改文件扩展名
漏洞利用步骤
准备工作
- 获取具有"编辑"权限的Joomla后台账号
- 准备恶意PHP代码文件,但使用图片扩展名(如test.png)
利用过程
-
上传恶意文件:
- 登录后台
- 进入媒体管理器
- 上传test.png(实际内容为PHP代码)
-
触发重命名漏洞:
- 点击test.png图片
- 选择"Rename"功能
- 拦截重命名请求
-
修改请求参数:
- 原始请求会将.png改为.php但会被拦截
- 需要添加
move=0参数绕过检查 - 示例请求修改:
POST /administrator/index.php?option=com_media&task=api.files HTTP/1.1 Content-Type: application/json { "action": "copy", "move": 0, "path": "test.png", "newPath": "test.php" }
-
验证利用:
- 虽然可能返回错误信息,但文件已成功重命名
- 访问
/images/test.php验证是否执行
修复建议
- 升级到Joomla 5.2.5或更高版本
- 临时解决方案:
- 限制媒体管理器权限
- 添加文件扩展名白名单检查
- 监控/images目录下的.php文件创建
技术要点总结
- 漏洞根源在于
copyfile函数缺乏严格的扩展名检查 - 通过
move=0参数可以绕过默认的检查机制 - 需要图片格式伪装绕过初始上传检查
- 利用媒体管理器的API接口(
api.files)实现扩展名修改
参考
- Joomla官方GitHub代码库
- CVE-2025-22213漏洞公告
- 先知社区漏洞分析文章