提交说明
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
### Web 测试越权漏洞发现敏感参数都经过了带有 HMAC 验证,在无法暴力破解 Key 的情况下怎么绕过
|
||||
|
||||
**1. 算法混淆与降级**
|
||||
|
||||
- 尝试将签名算法字段改为 `none` 或弱算法,观察是否被接受
|
||||
|
||||
**2. 签名比较方式**
|
||||
|
||||
- 若后端使用 `==` 或 `strcmp` 进行字符串比较,可能被**时序攻击**或**类型混淆**利用
|
||||
|
||||
**3. 签名截断**
|
||||
|
||||
- 某些系统只验证签名的前几位(如前16位),可尝试截断签名或提交短签名,观察是否通过校验
|
||||
|
||||
**4. 参数注入与覆盖**
|
||||
|
||||
- 利用 HTTP 参数解析歧义(如 `role=A&role=admin`),后端可能取第一个或最后一个值,而签名可能只覆盖其中一个
|
||||
|
||||
**5. 参数排序与拼接**
|
||||
|
||||
- 如果签名基于键值对拼接(如`k1=v1&k2=v2`),但后端解析时对参数进行排序或去重,导致签名验证时使用的字符串与原始不同。尝试调整参数顺序,使签名仍匹配
|
||||
|
||||
**6. 签名生成接口暴露**
|
||||
|
||||
- 检查是否存在未授权的签名生成接口(如`/sign?data=...`),可构造任意参数的签名。若该接口未严格校验权限,则直接获取有效签名
|
||||
@@ -0,0 +1,17 @@
|
||||
### JWT 有哪些漏洞
|
||||
|
||||
**1. 算法混淆攻击**
|
||||
|
||||
- 原理:服务器使用 RS256(非对称加密)验证令牌,但攻击者将算法头部改为 HS256(对称加密),并利用服务器公钥作为 HMAC 密钥签名令牌。
|
||||
- 利用条件:服务器未严格校验算法类型,且公钥可获取
|
||||
- 攻击步骤:
|
||||
1. 获取服务器公钥(通常从 `/jwks.json` 或重复使用 SSL 证书)
|
||||
2. 修改 JWT 头部:`"alg":"HS256"`
|
||||
3. 使用公钥作为密钥生成 HMAC 签名
|
||||
4. 服务器用公钥解密(误认为是 HMAC 密钥)→ 验证通过
|
||||
|
||||
**2. none 算法攻击**
|
||||
|
||||
- **原理**:将 `alg` 头部设为 `none`,使服务器跳过签名验证
|
||||
- **利用**:直接删除签名部分,修改 Payload 内容
|
||||
- **防御**:现代 JWT 库默认禁用 `none`,但配置错误可能启用
|
||||
Reference in New Issue
Block a user