Shiro漏洞復現
簡介
Apache Shiro™是一個功能強大且易於使用的 Java 安全框架,它執行身份驗證、授權、加密和會話管理。借助 Shiro 易於理解的 API,您可以快速輕松地保護任何應用程序——從最小的移動應用程序到最大的 Web 和企業應用程序。
CVE-2016-4437
Apache Shiro 反序列化漏洞
漏洞原理
Apache Shiro 1.2.4及以前版本中,加密的用戶信息序列化后存儲在名為remember-me的Cookie中。攻擊者可以使用Shiro的默認密鑰偽造用戶Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。其默認密鑰的base64編碼后的值為
kPH+bIxk5D2deZiIxcaaaA==,這里就可以通過構造惡意的序列化對象進行編碼,加密,然后作為cookie加密發送,服務端接收后會解密並觸發反序列化漏洞。
處理流程:得到rememberMe的cookie值-->Base64解碼-->AES解密-->反序列化
漏洞分析
AbstractRememberMeManager.java中實現rememberMe的解密代碼

getRememberedSerializedIdentity返回cookie中rememberMe的base64解碼后的bytes

繼續調用convertBytesToPrincipals方法對解碼后的bytes處理,跟進convertBytesToPrincipals方法,調用decrypt方法對bytes進行解密。
protected PrincipalCollection convertBytesToPrincipals(byte[] bytes, SubjectContext subjectContext) {
if (getCipherService() != null) {
bytes = decrypt(bytes);
}
return deserialize(bytes);
}
解密后得到的結果為序列化字符串的bytes。
然后進入到deserialize方法進行反序列化,即用戶可控的rememberMe值經過解密后進行反序列化從而引發反序列化漏洞。
漏洞復現
直接使用vulhub,vulhub/shiro/CVE-2016-4437/
執行如下命令啟動一個使用了Apache Shiro 1.2.4的Web服務:
docker-compose up -d
服務啟動后,訪問http://your-ip:8080

我們直接使用工具進行測試,工具地址


同時此工具可以直接上傳內存馬,非常便捷
CVE-2020-1957
Apache Shiro權限繞過
漏洞原理
在Apache Shiro 1.5.2以前的版本中,在使用Spring動態控制器時,攻擊者通過構造..;這樣的跳轉,可以繞過Shiro中對目錄的權限限制。
漏洞復現
/vulhub-master/shiro/CVE-2020-1957
運行docker-compose up -d

訪問頁面
直接訪問/admin目錄,會跳轉到登陸頁面

此時我們增加..;繞過目錄限制

成功訪問到admin目錄下
總結
最近以學習紅隊知識為主,內網還有主流框架漏洞這一塊都在跟進,shiro實戰中利用還是比較多的,通過復現,看能不能在實戰中打下幾個shiro。
要記住在hw紅隊時,拿不下靶標的感覺,好好努力
最近因為某人非常開心,心態很好,學習動力也是滿滿,繼續加油吧!凡是過往,皆為序章。希望最后的幾個月大學時光能好好把握
