標題:heapdump洩露Shiro key從而RCE

taibeihacker

Moderator

1. 简介​

我搭建了一個Spring heapdump洩露shiro key從而RCE的漏洞環境,Github地址:https://github.com/P4r4d1se/heapdump_shiro_vuln
漏洞利用條件:
Spring Shiro環境存在heapdump文件洩露存在可利用鏈

2. 漏洞原理​

Shiro相關的漏洞原理和調試分析已經有很多大佬分享過了,這裡不再贅述,這裡主要針對這個漏洞環境進行說明:
(1)Spring其實是有自己默認安全框架的,叫Spring Security,但可能有的開髮用Shiro用習慣了,將Spring Securiy替換成了Shiro,這種情況並不少見,比如若依就是Spring shiro。
1049983-20221205094141235-716240315.jpg
(2)在有key的情況下,即使是最新版的Shiro也一樣存在漏洞,而且在很多時候都會因為開發、部署等問題導致shiro key的洩露。
(3)Shiro大於1.2.4的版本中,在沒有開發人員人工干預的情況下key改為了隨機生成,這個隨機生成是在每次啟動Web環境的時候,重啟前這個key不會改變,可以在JVM虛擬機內存裡找到。
1049983-20221205094142103-2055517121.jpg
(4)Spring的heapdump文件就是從JVM虛擬機內存導出的。
綜上所述導致了這個組合漏洞的產生。

3. 漏洞演示​

加載漏洞環境後,可以看到Shiro版本為1.8.0:
1049983-20221205094143073-114670788.jpg

訪問8080端口的/actuator/heapdump獲取heapdump文件:
1049983-20221205094143969-554120927.jpg

獲取其中的shiro key,我常用的有兩種方式:
(1)JDumpSpider:https://github.com/whwlsfb/JDumpSpider
這個小工具可以自動爬取heapdump中的變量信息,比較方便,壞處是可能會漏掉沒在爬取列表中的信息。
直接運行:java -jar JDumpSpider.jar heapdump即可自動獲取變量信息,這裡獲取到ShiroKey:
1049983-20221205094144681-379271828.jpg
(2)jvisualvm.exe:Java自帶的工具,默認路徑為:JDK目錄/bin/jvisualvm.exe
這個工具需要手動去找想要的信息,在過濾裡輸入org.apache.shiro.web.mgt.CookieRememberMeManager,圈出來的16個字節的值就是key:
1049983-20221205094145426-680950609.jpg

用一個Python小腳本轉成base64編碼後的Shiro key:用一個Python小腳本轉成base64編碼後的Shiro key:
import base64
import struct
print(base64.b64encode(struct.pack('bbbbbbbbbbbbbbbb', 109,-96,12,-115,33,59,24,112,44,124,56,110,-15,59,1,-41)))
1049983-20221205094146189-419865832.jpg
使用獲得的key進行利用成功:
1049983-20221205094147320-612137025.jpg

重新啟動服務器再次獲取shiro key,可以看到key改變了,驗證了漏洞原理的第3點,每次啟動生成一個隨機key:
1049983-20221205094148077-2083177773.png

改用新的key仍然可進行利用:
1049983-20221205094148947-1689724177.jpg

轉自原文鏈接:https://xz.aliyun.com/t/11908
 
返回
上方