Sentinel 与 MySQL 隐式转换机制的叠加利用
字数 1637
更新时间 2026-01-31 12:05:37
Sentinel与MySQL隐式转换机制叠加利用漏洞分析教学文档
漏洞概述
本漏洞是一个身份认证绕过漏洞,由Cartalyst Sentinel库的解析逻辑、MySQL隐式类型转换特性和PHP弱类型判断三个因素叠加形成。攻击者可通过精心构造的Cookie值绕过系统认证机制。
环境背景
- 目标系统:运行老旧PHP代码的设备
- 认证组件:Cartalyst Sentinel库(Native版本)
- 数据库:MySQL
- 漏洞类型:身份认证绕过
技术原理分析
1. 正常认证流程
if ($user = Sentinel::check()) {
// 已登录:刷新会话
renewSession();
} else {
// 未登录:进行认证
$user = Sentinel::authenticate($credentials);
}
2. MySQL隐式类型转换机制
persistences表的code字段为字符串类型(varchar)- 当执行
where code=5(整数比较)时,MySQL会将字符串转换为整数 - 转换规则:取字符串开头的数字部分,遇到非数字字符停止
- 示例:
"5M6o..."会被转换为整数5
3. Sentinel组件漏洞点
3.1 Cookie解析类型失控
文件:cartalyst/sentinel/src/Cookies/NativeCookie.php
public function get()
{
$value = $this->request->cookie($this->key);
return json_decode($value); // 关键漏洞点
}
json_decode('5')返回整数5json_decode('"5"')返回字符串"5"
3.2 数据库查询构造
文件:cartalyst/sentinel/src/Persistences/IlluminatePersistenceRepository.php
public function findByPersistenceCode($code)
{
return $this->createModel()
->newQuery()
->where('code', $code) // 类型影响查询构造
->first();
}
4. 漏洞触发条件对比表
| 参数类型 | 生成SQL | MySQL转换机制 | 匹配结果 |
|---|---|---|---|
| 正常登录(字符串) | where code='5abc789' |
精确字符串匹配 | 仅匹配真实code |
| 绕过登录(整数) | where code=5 |
字符串转整数匹配开头数字 | 匹配所有以5开头的code |
完整攻击链
步骤1:信息收集
- 确认目标使用Cartalyst Sentinel认证组件
- 获取默认Cookie名称:
cartalyst_sentinel
步骤2:寻找可利用会话
- 查询数据库
persistences表 - 寻找以数字开头的
code值(如:5M6o...) - 统计显示约35个有效会话中可能出现1个数字开头的code
步骤3:构造攻击载荷
GET /protected-page HTTP/1.1
Cookie: cartalyst_sentinel=5
- 直接传入数字值
5(非字符串"5")
步骤4:漏洞触发过程
- Sentinel读取Cookie:
cartalyst_sentinel=5 json_decode('5')返回整数5- 执行查询:
where code = 5 - MySQL隐式转换匹配到
code以5开头的记录 - Sentinel返回用户对象(非false)
- 认证绕过成功
防护方案
1. 组件升级
升级到Cartalyst Sentinel v2.0+版本,主要修复:
check()方法添加返回类型约束getUser()方法明确返回用户对象或null
2. 代码层面修复
// 修复前
$code = json_decode($_COOKIE['cartalyst_sentinel']);
// 修复后:强制类型转换
$code = (string) json_decode($_COOKIE['cartalyst_sentinel']);
3. 数据库设计优化
- 使用纯随机字符串(不含数字开头)
- 或使用UUID等避免数字开头的标识符
4. 查询优化
// 使用严格类型比较
->where('code', '===', $code)
漏洞利用限制与价值
利用限制
- 需要数据库中存在以数字开头的有效会话code
- 成功率较低(约1/35)
- 依赖特定第三方库版本
研究价值
- 展示多重漏洞叠加利用的技术思路
- 强调类型安全在Web安全中的重要性
- 提供供应链安全研究的典型案例
参考资源
总结
该漏洞是典型的链式漏洞利用案例,涉及:
- 组件层:Cookie解析逻辑缺陷
- 语言层:PHP弱类型特性
- 数据库层:MySQL隐式类型转换
虽然实际利用条件较为苛刻,但深刻揭示了现代Web应用中类型安全的重要性,以及供应链安全审计的必要性。