原理解釋
Apache Shiro是一個Java安全框架,執行身份驗證、授權、密碼和會話管理。
shiro默認使用了CookieRememberMeManager,其處理cookie的流程是:得到rememberMe的cookie值–>Base64解碼–>AES解密–>反序列化。然而AES的密鑰是硬編碼的,就導致了攻擊者可以構造惡意數據造成反序列化的RCE漏洞。該漏洞對shiro<=1.2.4的版本有影響。
硬編碼是將數據直接嵌入到程序或其他可執行對象的源代碼中的軟件開發實踐。
硬編碼密碼是指在程序中采用硬編碼方式處理密碼。這種處理方式一方面不易於程序維護,在代碼投入使用后,除非對軟件進行修補,否則無法修改密碼。另一方面會削弱系統安全性,硬編碼密碼意味着擁有代碼權限的人都可以查看到密碼,可以使用密碼訪問一些不具有權限的系統,更嚴重的是如果攻擊者能夠訪問應用程序的字節碼,利用一些反編譯工具就能閱讀到代碼,可以輕易獲得密碼。
環境搭建
1.下載鏡像
docker pull medicean/vulapps:s_shiro_1
2.運行在8091端口
docker run -d -p 8091:8080 medicean/vulapps:s_shiro_1
3.安裝模塊
pip3 install pycrypto
4.上傳生成payload的腳本
命令行輸入rz並回車,可打開上傳頁面,選擇shiro_poc.py進行上傳,注意需要進入/tmp/目錄后再進行下載
5.安裝ysoserial的jar文件
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial/
mvn package -DskipTests
此處提示命令找不到,因此需要對 mvn進行安裝
apt update
apt upgrade
apt install maven
mvn -version
注:安裝mvn需要在jdk已經安裝的前提下,kali默認有安裝。
如下圖所示則安裝成功。
重新執行
mvn package -DskipTests
發現報錯
上網查了之后發現原因如下,但是我也不是很懂他在說什么
所以重新開始安裝java
安裝java時因為kali有自帶openjdk,所以安裝時安裝成功了,但是運行java -version的結果還是openjdk,運行javac -version顯示無該命令,下載了新的kali虛擬機后安裝Java還是不行,
於是就直接下載了ysoserial.jar然后上傳到同一目錄
復現過程
復現過程參考該篇文章
https://www.cnblogs.com/paperpen/p/11312671.html
最終復現成功。