“ Apache Shiro是一個強大易用的Java安全架構,提供了認證、授權、加密和會話管理等功能。Shiro架構直覺、易用,同時也能提供健壯的安全性。”
文章目錄:
1、Shiro rememberMe反序列化漏洞(Shiro-550)
1.1 漏洞原理
1.2 影響版本
1.3 漏洞特征
1.4 漏洞利用
1.4.1 利用方式一:反彈shell
1.4.2 利用方式二:寫入檔案
2、Shiro Padding Oracle Attack(Shiro-721)
2.1 漏洞原理
2.2 影響版本
2.3 漏洞利用
3、一鍵自動化漏洞利用工具
3.1 Shiro-550
3.2 Shiro-721
1.1 漏洞原理
Apache Shiro架構提供了記住密碼的功能(RememberMe),使用者登入成功後會生成經過加密并編碼的cookie。在服務端對rememberMe的cookie值,先base64解碼然後AES解密再反序列化,就導緻了反序列化RCE漏洞。
那麼,Payload産生的過程:
指令=>序列化=>AES加密=>base64編碼=>RememberMe Cookie值
在整個漏洞利用過程中,比較重要的是AES加密的密鑰,如果沒有修改預設的密鑰那麼就很容易就知道密鑰了,Payload構造起來也是十分的簡單。
1.2 影響版本:Apache Shiro < 1.2.4
1.3 特征判斷:
傳回包中包含rememberMe=deleteMe字段。
1.4 漏洞利用
這裡我們使用一個Shiro_exploit工具,檢查是否存在預設的key。
Github項目位址:
使用示例:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iNxczMwEDN0gzMmNjZzImMiFDO4ITZ5QmZmVGZjBjYl9CX4EzLcZDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
通過擷取到的key,常見的漏洞利用方式有兩種:反彈shell和寫入檔案。
漏洞利用方式一:反彈shell
1、制作反彈shell代碼
監聽本地端口
Java Runtime 配合 bash 編碼,線上編碼位址:
生成編碼:
2、通過ysoserial中JRMP監聽子產品,監聽6666端口并執行反彈shell指令。
3、使用shiro.py 生成Payload
shiro.py代碼如下:
4、構造資料包,僞造cookie,發送Payload。
nc監聽端口,shell成功反彈:
java監聽接口,檢視伺服器連接配接情況:
漏洞利用方式二:寫入檔案
1、生成poc.ser檔案
2、使用Shiro内置的預設密鑰對Payload進行加密:
java調試:
調試代碼:
3、發送rememberMe Cookie,即可成功執行指令。
在目标伺服器/tmp目錄下,生成success檔案。
2.1 漏洞原理
由于Apache Shiro cookie中通過 AES-128-CBC 模式加密的rememberMe字段存在問題,使用者可通過Padding Oracle 加密生成的攻擊代碼來構造惡意的rememberMe字段,并重新請求網站,進行反序列化攻擊,最終導緻任意代碼執行。
2.2 影響版本:Apache Shiro < 1.4.2版本。
2.3 漏洞利用
1、登入Shiro網站,從cookie中獲得rememberMe字段的值。
2、利用DNSlog探測,通過ysoserial工具payload。
3、使用rememberMe值作為prefix,加載Payload,進行Padding Oracle攻擊。
github項目位址:
爆破成功,輸出Result:
4、使用構造的rememberMe攻擊字元串重新請求網站
5、成功觸發Payload,在DNSLog擷取到目标IP。
ShiroExploit:支援對Shiro-550(寫死秘鑰)和Shiro-721(Padding Oracle)的一鍵化檢測,支援簡單回顯。
Shiro-550,隻需輸入url,即可完成自動化檢測和漏洞利用。
Shiro-721,需輸入url,提供一個有效的rememberMe Cookie,并指定目标作業系統類型
轉一轉
贊一贊
看一看