0x00 漏洞簡介
https://www.openwall.com/lists/oss-security/2020/03/23/2
0x01 漏洞分析
翻查官方commit,在commit https://github.com/apache/shiro/commit/9762f97926ba99ac0d958e088cae3be8b657948d 中找到相關信息
大致理解為Spring web在匹配url的時候會容錯后面多余的/,而shiro匹配不上導致繞過,由國人tomsun28提交pull request
0x02 漏洞環境搭建
使用springboot+shiro搭建一個簡單的demo,代碼參考至
https://segmentfault.com/a/1190000019440231(使用java原生的整合方式)
其中shiro使用的是1.4.0版本
在shiro-config中配置一個對url "/test/secret"的過濾,此url需要登錄才能訪問

同時在LoginController中配置以下代碼,用於返回一個需要認證的信息
1 @GetMapping("/test/secret") 2 public String secret(){ 3 return "secret"; 4 }
直接訪問/test/secret,跳轉到登錄頁面
訪問/test/secret/,返回了secret
官方修復也很簡單就是把url后面的/也考慮進去了再進行匹配
順便一提,使用maven拉取包的時候發現1.5.1版源碼已經修復了,而1.5.0,1.4.2的源碼卻拉取不到
0x03 更新



看freebuf的分析(
https://www.freebuf.com/vuls/231909.html),才發現自己看漏了。。。
后續還有一個繞過,具體commit看這里
https://github.com/apache/shiro/commit/3708d7907016bf2fa12691dff6ff0def1249b8ce
由於shiro先獲取的url,然后會判斷分號是否存在,如果存在就會把后面的刪除,進入shiro匹配,匹配不上默認放行,之后Spring web對路徑進行規范化從而訪問到了相應的控制器
比如:
/fdsf;/../test/secret
0x04 實際攻擊
當shiroFilter這么寫

與及這么寫
都存在繞過,也就是說當配置在二級目錄下面的身份驗證都存在被繞過的風險
只有這么寫的時候,才不存在問題
本人技術水平有限,如有不妥之處還望諒解