Shiro 550 721 区别

Shiro-550(CVE-2016-4437)

Shiro-550 是利用了 Shiro 硬编码的默认密钥

  • 漏洞原理
    1. Apache Shiro 在 RememberMe 功能中,会将用户的身份信息进行序列化,然后使用一个硬编码的默认密钥进行 AES 加密,最后将加密后的数据作为 Cookie 发送给客户端
    2. Shiro 1.2.4 及以前的版本中,这个密钥是固定的、公开的
    3. 攻击者可以利用这个已知的密钥,构造一个恶意的序列化 Payload(即 Gadget Chain,如 CommonsCollections
    4. 攻击者用这个密钥对 Payload 进行加密,然后将加密后的数据作为 RememberMe Cookie 发送给服务器
    5. 服务器收到这个 Cookie 后,会使用相同的默认密钥对数据进行解密,然后对解密后的数据进行反序列化
    6. 在反序列化过程中,恶意的 Gadget Chain 被触发,导致远程代码执行(RCE)
  • 攻击流程
    1. 获取密钥:攻击者知道 Shiro 默认的硬编码密钥
    2. 构造 Payload:利用 ysoserial 等工具生成一个反序列化 Payload
    3. 加密 Payload:用默认密钥对 Payload 进行 AES 加密
    4. 发送 Cookie:将加密后的数据作为 RememberMe Cookie 发送给服务器
    5. 触发反序列化:服务器解密并反序列化,导致 RCE
  • 影响范围:Shiro <= 1.2.4 版本

Shiro-721(CVE-2019-12422)

Shiro-721 绕过了默认密钥的问题,它利用的是 AES-CBC 模式的漏洞

  • 漏洞原理
    1. 在 Shiro 1.2.5 到 1.4.1 版本中,虽然移除了硬编码密钥,但攻击者发现,当应用程序使用一个可猜测或已知的密钥时,仍然可以利用 AES-CBC 模式的填充 oracle 攻击
    2. AES-CBC 模式在解密时,如果数据填充(Padding)不正确,会返回一个特定的错误。攻击者可以利用这个错误来猜测加密数据中的每个字节
    3. 通过这种方式,攻击者可以逐字节地解密 RememberMe Cookie 中的数据,从而获取加密密钥
    4. 一旦密钥被破解,攻击者就可以像 Shiro-550 一样,构造恶意的 Payload 并进行加密,从而触发 RCE
  • 攻击流程
    1. 获取密钥:攻击者利用 AES-CBC 的填充 oracle 漏洞,通过发送大量畸形请求,并根据服务器的响应,逐字节地破解加密密钥
    2. 构造 Payload:利用 ysoserial 生成 Payload
    3. 加密 Payload:用刚刚破解的密钥对 Payload 进行加密
    4. 发送 Cookie:将加密后的数据作为 RememberMe Cookie 发送给服务器
    5. 触发反序列化:服务器解密并反序列化,导致 RCE
  • 影响范围:Shiro 1.2.5 - 1.4.1 版本
特性 Shiro-550 Shiro-721
漏洞类型 硬编码密钥导致的反序列化 AES-CBC 模式的填充 oracle 漏洞
攻击目标 已知密钥 未知密钥
攻击方式 直接利用已知的密钥进行加密 通过填充 oracle 攻击来破解密钥,然后利用密钥
利用难度 简单,直接利用 复杂,需要多次请求进行破解
影响版本 Shiro <= 1.2.4 Shiro 1.2.5 - 1.4.1
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 20:54:18

results matching ""

    No results matching ""