ysoserial-C3P0 分析】的更多相关文章

ysoserial CommonsColletions4分析 其实CC4就是 CC3前半部分和CC2后半部分 拼接组成的,没有什么新的知识点. 不过要注意的是,CC4和CC2一样需要在commons-collections-4.0版本使用,3.1-3.2.1版本不能去使用,原因是TransformingComparator类在3.1-3.2.1版本中还没有实现Serializable接口,无法被反序列化. JDK版本对于CC2和CC4来说,1.7和1.8都测试成功,下面我们就来快速构造一下pay…
ysoserial CommonsColletions2分析 前言 此文章是ysoserial中 commons-collections2 的分析文章,所需的知识包括java反射,javassist. 在CC2中是用的 PriorityQueue#reaObject作为反序列化的入口,利用javassist创建了一个攻击类,使用TemplatesImpl类来承载他 而CC1利用链在JDK1.8 8u71版本以后是无法使用的,具体是AnnotationInvocationHandler的reado…
JAVA安全审计 ysoserial CommonsColletions1分析 前言: 在ysoserial工具中,并没有使用TransformedMap的来触发ChainedTransformer链,而是用了LazyMap的get方法 CommonsCollections1 调用链: /* Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entryS…
在最后一步的实现上,cc2和cc3一样,最终都是通过TemplatesImpl恶意字节码文件动态加载方式实现反序列化. 已知的TemplatesImpl->newTransformer()是最终要执行的. TemplatesImpl类动态加载方式的实现分析见ysoserial CommonsCollections3 分析中的一.二部分. TemplatesImpl->newTransformer()的调用通过InvokerTransformer.transform()反射机制实现,这里可以看y…
CC7也是一条比较通用的链了,不过对于其原理的话,其实还是挺复杂的.文章如有错误,敬请大佬们斧正 CC7利用的是hashtable#readObject作为反序列化入口.AbstractMap的equals来触发的LazyMap的get方法 POC分析 这条链太过于复杂,无法想象大佬们是怎么样的思维挖掘出这条链的,所以只能跟着大佬的poc跟着进行调试了分析了 public class CC7 { public static void main(String[] args) throws Exce…
上篇文章讲到CC3的TransformedMap链,这篇我们就来讲一下LazyMap链. 其实LazyMap链还是使用的TemplatesImpl承载payload,InstantiateTransformer.TrAXFilter.ChainedTransformer这三个来构造调用链. 和另一条链的区别: 主要区别在于调用ChainedTransformer的transform方法是使用LazyMap的get方法触发.反序列化入口还是AnnotationInvocationHandler的r…
CC3的利用链在JDK8u71版本以后是无法使用的,具体还是由于AnnotationInvocationHandler的readobject进行了改写. 而CC3目前有两条主流的利用链,利用TransformedMap或者LazyMap.我们这篇文章先讲TransformedMap链 TemplatesImpl 在CC2中利用javassist创建了一个攻击类,使用TemplatesImpl类中的newTransformer方法触发 这里写一个简单的demo来演示下: public class…
CC6的话是一条比较通用的链,在JAVA7和8版本都可以使用,而触发点也是通过LazyMap的get方法. TiedMapEntry#hashCode 在CC5中,通过的是TiedMapEntry的toString调用到的LazyMap的get方法,而CC6则是通过TiedMapEntry的hashCode方法 此处hashCode会调用getValue方法,getValue就调用到了LazyMap的get方法 接下来我们要找的就是哪里调用了TiedMapEntry#hashCode HashM…
我们知道,AnnotationInvocationHandler类在JDK8u71版本以后,官方对readobject进行了改写. 所以要挖掘出一条能替代的类BadAttributeValueExpException 在CC5中除了有一个新的类BadAttributeValueExpException外,还有一个新的类TiedMapEntry,用来调用LazyMap的get方法 TiedMapEntry 在TiedMapEntry的getValue方法中调用了get方法 而map成员变量则是由构…
利用链如下: 其中LazyMap.get()->ChainedTransformer.transform()-InvokerTransformer.transform()与CC1链一致. /* Gadget chain: java.io.ObjectInputStream.readObject() java.util.HashSet.readObject() java.util.HashMap.put() java.util.HashMap.hash() org.apache.commons.c…
cc3利用链如下: TrAXFilter(Templates templates) TemplatesImpl->newTransformer() TemplatesImpl->getTransletInstance() _class[_transletIndex].newInstance(); 一.为构造的恶意字节码文件找一个newInstance启动入口 在TemplatesImpl类中的getTransletInstance方法,对 _class[_transletIndex]实现了ne…
目录 前言 基础知识 Transformer 利用InvokerTransformer造成命令执行 Map TransformedMap LazyMap AnnotationInvocationHandler 动态代理 Commons Collections Gadget 分析 CommonsCollections1 CommonsCollections2 疑问 CommonsCollections3 CommonsCollections4 CommonsCollections5 Commons…
目录 7u21 gadget链分析 hashCode绕过 参考 URLDNS 7u21 7u21中利用了TemplatesImpl来执行命令,结合动态代理.AnnotationInvocationHandler.HashSet都成了gadget链. 先看一下调用栈,把ysoserial中的调用栈简化了一下 LinkedHashSet.readObject() LinkedHashSet.add() Proxy(Templates).equals() AnnotationInvocationHan…
Java安全之C3P0链利用与分析 0x00 前言 在一些比较极端情况下,C3P0链的使用还是挺频繁的. 0x01 利用方式 利用方式 在C3P0中有三种利用方式 http base JNDI HEX序列化字节加载器 在原生的反序列化中如果找不到其他链,则可尝试C3P0去加载远程的类进行命令执行.JNDI则适用于Jackson等利用.而HEX序列化字节加载器的方式可以利用与fj和Jackson等不出网情况下打入内存马使用. http base使用 使用也很简单,可以直接使用yso生成数据进行发送…
漏洞说明: Liferay是一个开源的Portal(认证)产品,提供对多个独立系统的内容集成,为企业信息.流程等的整合提供了一套完整的解决方案,和其他商业产品相比,Liferay有着很多优良的特性,而且免费,在全球都有较多用户. 该洞是个反序列化导致的rce,通过未授权访问其api传递json数据进行反序列化,危害较高 影响范围: Liferay Portal 6.1.XLiferay Portal 6.2.XLiferay Portal 7.0.XLiferay Portal 7.1.XLif…
JDK7u21 1.前置知识 jdk7u21是一条不依赖CommonsCollections库依赖的,看利用链所有知识其实跟CommonsCollections也有重复,我们来学习一下以前没学过的类或者方法.环境是jdk7u17. LinkedHashSet 首先入口是LinkedHashSet的readObject方法,LinkedHashSet是HashSet的子类,也继承了序列化接口和集合接口,但是LinkedHashSet是没有重写readObject方法的,所以LinkedHashSe…
Java安全之C3P0利用与分析 目录 Java安全之C3P0利用与分析 写在前面 C3P0 Gadget http base C3P0.getObject() 序列化 反序列化 Class.forName() JNDI 利用姿势 调试分析 Hex序列化字节加载器 利用姿势 调试分析 Reference 写在前面 很久以前就听nice0e3师傅说打Fastjson可以试试C3P0,当时还不会java(虽然现在也没会多少)也就没有深究.最近调试Fastjson的漏洞,又想到了这个点,就拿出来学习下…
主流数据库连接池 常用的主流开源数据库连接池有C3P0.DBCP.Tomcat Jdbc Pool.BoneCP.Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate.Spring等.单线程,性能较差,适用于小型系统,代码600KB左右. DBCP (Database Connection Pool):由Apache开发的一个Java数据库连接池项目, Jakarta commons-poo…
第一步:导入c3p0包 第二步:在classpath目录下,创建一个c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 默认配置,只可以出现一次 --> <default-config> <!-- 连接超时设置30秒 --> <property name="checkoutTimeout"…
简介 c3p0是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能.目前,hibernate自带的连接池就是c3p0. 本文将包含以下内容(因为篇幅较长,可根据需要选择阅读): c3p0的使用方法(入门案例.JDNI使用) c3p0的配置参数详解 c3p0主要源码分析 使用例子-入门 需求 使用C3P0连接池获取连接对象,对用户数据进行简单的增删改查(sql脚本项目中已提供). 工程环境 JDK:1…
本文假设你对Java基本数据结构.Java反序列化.高级特性(反射.动态代理)等有一定的了解. 背景 YsoSerial是一款反序列化利用的便捷工具,可以很方便的生成基于多种环境的反序列化EXP.java -jar ysoserial.jar 可以直接查看payload适用环境及其适用版本. 关于此工具的背景,我引用P神的<Java安全漫游>文章对其的描述: 2015年Gabriel Lawrence (@gebl)和Chris Frohoffff (@frohoffff)在AppSecCal…
前言 这是common-collections 反序列化的第三篇文章,这次分析利用链CC5和CC6,先看下Ysoserial CC5 payload: public BadAttributeValueExpException getObject(final String command) throws Exception { final String[] execArgs = new String[] { command }; // inert chain for setup final Tra…
前言 YsoSerial Common-Collection3.2.1 反序列化利用链终于来到最后一个,回顾一下: 以InvokerTranformer为基础通过动态代理触发AnnotationInvocationHandler里面的Invoker方法调用LazyMap get方式的CC1 以TemplatesImpl为基础,通过TrAXFilter.InstantiateTransformer组合绑定LazyMap动态代理触发AnnotationInvocationHandler#Invoke…
前言 Common-Collections <= 3.2.1 对应与YsoSerial为CC1.3.5.6.7 ,Commno-collections4.0对应与CC2.4. 这篇文章结束官方原版YsoSerial关于Common-Collections链的分析就已经结束了. CC2 TemplatesImpl 在之前有介绍过TemplatesImpl 这个类的命令执行利用方法,我们回顾一下,TemplatesImpl中存在对变量_bytecodes 进行defineClass加载的 defin…
Ysoserial Commons Collections2分析 About Commons Collections2 CC2与CC1不同在于CC2用的是Commons Collections4.0;同时利用方式CC2用到了Javassist动态编程,从功能上来说CC1用于执行命令,而CC2可以任意代码执行危害更大,所以像常用的shiro打内存马也会用到CC2. CC2 Gadget Chain Gadget chain: ObjectInputStream.readObject() Prior…
Ysoserial Commons Collections3分析 写在前面 CommonsCollections Gadget Chains CommonsCollection Version JDK Version CommonsCollections1 CommonsCollections 3.1 - 3.2.1 1.7 (8u71之后已修复不可利用) CommonsCollections2 CommonsCollections 4.0 无限制 CommonsCollections3 Com…
Ysoserial Commons Collections7分析 写在前面 CommonsCollections Gadget Chains CommonsCollection Version JDK Version Note CommonsCollections1 CommonsCollections 3.1 - 3.2.1 1.7 (8u71之后已修复不可利用) CommonsCollections2 CommonsCollections 4.0 暂无限制 javassist Commons…
import java.sql.Connection; import java.sql.SQLException; import java.beans.PropertyVetoException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Dafa { private static DBPool dbPool; private ComboPooledDataSource dataSource; static {…
问题跟踪: 近期在整合SSH(spring.springmvc.hibernate)项目,提供给第三方服务.每当调用内存池达到上限之后,外界调用服务直接失败,提示[cannot open connection].经过九牛二虎之力,才找到是c3p0 pool池内存泄漏的原因.类似jdbc,session使用之后需要手动关闭: public static Basicinfo getBean(Integer iduser) { Basicinfo u = null; Transaction tx =…
前文介绍了最简单的反序列化链URLDNS,虽然URLDNS本身不依赖第三方包且调用简单,但不能做到漏洞利用,仅能做漏洞探测,如何才能实现RCE呢,于是就有Common-collections1-7.Common-BeanUtils等这些三方库的利用.本文需要前置知识Java反射.动态代理等.CC1其实比较难,会用到很多高级特性,但理解了CC1后面的payload也就能轻松理解了. 背景 Common-collections是对jdk自带的数据类型的三方增强框架,类似python里面的collec…