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。

(3)Shiro大於1.2.4的版本中,在沒有開發人員人工干預的情況下key改為了隨機生成,這個隨機生成是在每次啟動Web環境的時候,重啟前這個key不會改變,可以在JVM虛擬機內存裡找到。

綜上所述導致了這個組合漏洞的產生。
3. 漏洞演示
加載漏洞環境後,可以看到Shiro版本為1.8.0:
訪問8080端口的/actuator/heapdump獲取heapdump文件:

獲取其中的shiro key,我常用的有兩種方式:
(1)JDumpSpider:https://github.com/whwlsfb/JDumpSpider
這個小工具可以自動爬取heapdump中的變量信息,比較方便,壞處是可能會漏掉沒在爬取列表中的信息。
直接運行:java -jar JDumpSpider.jar heapdump即可自動獲取變量信息,這裡獲取到ShiroKey:

這個工具需要手動去找想要的信息,在過濾裡輸入org.apache.shiro.web.mgt.CookieRememberMeManager,圈出來的16個字節的值就是key:

用一個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)))


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

改用新的key仍然可進行利用:

轉自原文鏈接:https://xz.aliyun.com/t/11908