一、漏洞原理
-
前后端路径解析逻辑不一致
-
后端框架(Spring/Shiro)自动处理特殊字符(
../
、//
),但鉴权组件(如Filter)未规范化原始URI。 -
示例 :
/system/login/../admin
被Filter误判为白名单路径/system/login
,实际解析为/admin
。
-
-
后缀白名单机制
- 对静态资源后缀(
.json
、.css
)的请求未校验权限,如/api/user.json
绕过鉴权。
- 对静态资源后缀(
-
分隔符截断逻辑
- 分号
;
分割参数导致后端忽略后续内容,如/admin;123
仅校验/admin
部分。
- 分号
二、绕过技术分类
1. 资源后缀混淆
- 静态后缀追加:
GET /admin/main.css HTTP/1.1 # 利用白名单绕过鉴权
动态参数伪装:
GET /admin?callback=test.json HTTP/1.1 # 参数伪装为静态资源
2. 路径构造与编码
- 目录遍历(
../
跳转):
GET /system/login/../../admin HTTP/1.1 # 结合白名单路径绕过
URL编码混淆:
GET /system/%2e%2e/admin HTTP/1.1 # 编码`.`绕过过滤
多斜杠干扰:
GET ///admin//user HTTP/1.1 # 后端解析为`/admin/user`,但Filter未匹配
3. 协议特性与分隔符利用
- 分号截断:
GET /admin;%09/user HTTP/1.1 # 分号后内容被忽略
HTTP方法篡改:
HEAD /admin HTTP/1.1 # 后端仅校验POST/PUT方法
4. 标头伪造与参数控制
- X-Original-URL滥用:
GET /public-page HTTP/1.1
X-Original-URL: /admin # 后端信任标头覆盖路径
参数提权:
POST /user/update HTTP/1.1
{ "role_id": 2 } # 后端未校验客户端提交的权限参数
三、实战案例
-
Shiro权限绕过
-
漏洞场景:构造/admin;%09绕过路径匹配逻辑。
Payload:
-
GET /admin;jsessionid=xxx HTTP/1.1 # 分号截断绕过鉴权
Spring Security配置缺陷
-
漏洞场景 :
antMatchers("/admin")
未覆盖子路径,访问/admin/
或/admin.json
绕过。 -
修复方案 :使用
/admin/**
或启用mvcMatchers
严格匹配。
路径编码绕过
- 攻击过程:
-
GET /%2e%2e/etc/passwd HTTP/1.1 # URL编码绕过过滤
- 结果:成功读取系统敏感文件。
四、防御策略
-
路径规范化处理
- 使用
request.getServletPath()
替代getRequestURI()
,避免解析差异。
- 使用
-
统一鉴权框架
- 强制RBAC模型校验,禁止依赖单一维度(如URL或方法)。
-
后缀白名单限制
- 动态接口禁用
.json
、.css
等静态资源后缀。
- 动态接口禁用
-
输入过滤与编码
- 拦截
../
、;
、%u
等高危字符,解码后二次校验。
- 拦截
-
日志与监控
- 记录含非标头(如
X-Original-URL
)的请求,告警异常路径访问。
- 记录含非标头(如
五、Fuzz字典与工具
- 常用Payload:
; . .. / // %2e %0a %0d %09 .json .css /..;/ /%2e%2e/
-
自动化工具:
-
Burp Intruder:批量测试路径混淆组合。
-
FFuf:快速遍历后缀与编码变体。
-
核心总结
-
绕过技术核心:
-
利用分号截断、路径跳转、多斜杠干扰、编码混淆等手段制造前后端解析差异。
-
伪造标头(如
X-Original-URL
)或参数篡改直接绕过权限校验。
-
-
框架特性风险:
- Shiro的分号解析逻辑、Spring Security的路径匹配缺陷是常见漏洞来源。
-
防御核心原则:
- 路径处理标准化、权限校验多维度化、输入过滤严格化。