高版本JDK原生Spring反序列化链复现
高版本JDK_Spring原生反序列化链上班之后更新博客的速度慢了起来,没有多少写博客的动力了,有点摆过头了,最近在p牛的代码审计星球看到有师傅发了篇高版本JDK下的Spring原生链,让TemplatesImpl在高版本也可以进行利用了。这几天活稍微少点正好抽空研究下。 这一期从环境搭建到漏洞原理全给你整明白咯 环境搭建起一个JDK17的maven环境 在pom.xml中加入spring依赖 123456789101112131415161718192021222324252627282930<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven....
CVE-2025-24813
CVE-2024-24813分析漏洞介绍漏洞描述Apache Tomcat在特定配置下,存在反序列化漏洞。 攻击者通过构造恶意的请求,利用特定配置文件会话持久机制将恶意序列化数据写入服务器中,并在后续请求中触发反序列化操作,从而导致远程代码的执行 影响范围 9.0.0.M1 <= Apache Tomcat <= 9.0.98 10.1.0-M1 <= Apache Tomcat <= 10.1.34 11.0.0-M1 <= Apache Tomcat <= 11.0.2 漏洞利用条件 DefaultServlet 写入功能启用 Tomcat 默认禁用文件上传功能,需在web.xml中手动配置 readonly=false 参数方可开启文件写入权限。 Partial PUT 请求处理机制 应用支持了 partial PUT 请求,能够将恶意的序列化数据写入到会话文件中,该功能默认开启 文件会话持久化配置缺陷 应用使用了 Tomcat 的文件会话持久化并且使用了默认的会话存储位置,需在context.xml中进行配置。 脆弱依赖库...
Hessian反序列化学习
Hessian反序列化学习Hessian简介Hessian是由Caucho公司开发的一种轻量级二进制RPC协议,它定义了自己的序列化规则和通信机制。在实际应用中,Hessian通常是通过HTTP传输的,相对比传统的XML/JSON等文本协议,传输效率更高。Hessian协议常见的有Hessian 1.0和Hessian 2.0两个版本,2.0是Hessian 1.0的升级版本,优化了序列化效率等等,性能显著提升。 Hessian 可以与 Servlet 、Spring、JNDI等进行集成,用于实现远程调用,也可以使用自封装的办法进行调用,这里就不介绍了,自己玩去(bushi Hessian反序列化漏洞原理分析Hessian反序列化漏洞在实际攻击中,攻击者构造恶意的Hessian序列化数据发送给目标服务,当目标服务尝试反序列化这些数据时,恶意代码会被执行,从而达成攻击目的。 Hessian反序列化测试1234567891011121314151617181920212223242526272829303132333435package com.study.deserializati...
Java反序列化payload缩小技术
Java反序列化payload缩小之前有遇到过一道限制了payload长度的ctf题,当时对于java反序列化还不是很熟悉,不管是看paylaod还是缩小payload的方式都看不太明白,现在重新记录一下。 参考资料:终极Java反序列化Payload缩小技术 可以直接想到缩小的方式就是对于序列化数据本身的缩小。这也用CB1链为例来学习 ysoserial先来看一下ysoserial直接生成的payload对它进行base64处理之后的长度 1java -jar .\ysoserial-all.jar CommonsBeanutils1 "calc.exe" > test1.ser 12byte[] data = Base64.getEncoder().encode(Files.readAllBytes(Paths.get("test1.ser")));System.out.println(new String(data).length()); 统计长度是7344,感觉可能是ysoserial的版本产生的问题,跟原文差距有点大 构造G...
原生反序列化利用链JDK7u21
原生反序列化利用链JDK7u21这篇继续跟着P牛的Java安全漫谈来学习 JDK7u21这条反序列化利用链不依赖于第三方库,适用于Java7u21之前的版本。 JDK7u21安装 JDK7u21核心原理某条反序列化利用链的核心点在于触发“动态方法执行”的地方,而不是TemplatasImpl或者某个类的readObject方法 举个栗子: CommonsCollectiosn系列反序列化核心店是那一堆Transformer,特别是期中的InvokerTransformer、InstantiateTransformer CommonsBeanutils反序列化的核心点是PropertyUtils#getProperty,因为这个方法会触发任意对象的getter 而JDK7u21的核心点就是sun.reflect.annotation.AnnotationInvocationHandler,之前在反序列化(2)和反序列化(3)这两篇中有介绍过但那时只用到了这个类会触发Map#get和Map#put的特点 我们下面可以看到AnnotationInvocationHandler类中的...
CommonsBeanutils与无Commons-Collections的Shiro反序列化利用
CommonsBeanutils与无Commons-Collections的Shiro反序列化利用这一篇依旧是跟着P牛的Java安全漫谈学习 上一篇讲到java.util.PriorityQieie,它在java中是一个优先队列,队列中每一个元素有自己的优先级。在反序列化这个对象时,为了保证队列顺序,会进行重排序的操作,排序就会涉及到大小比较,从而执行java.util.Comparator接口的compare方法 那么我们再找找有没有其他可以利用的java.util.Comparator对象 Apache CommonsBeanutilsApache Commons Beanutils提供了对普通java类对象(也称为javabean)的一些操作方法 比如下面这个Cat类就是一个最简单的JavaBean类: 123456789final public class Cat { private String name = "catalina"; public String getName() { return name; } pu...
Commons-Collections4与漏洞修复
Commons-Collections4与漏洞修复今天继续来学P牛的Java安全漫谈的第16篇 在2015年底Commons-Collections反序列化被提出时,Apache Commons Collections有下面两个版本: commons-collections:commons-collections org.apache.commons:commons-collections4 groupId和artifactId都变了。前者是Commons Collections的老版本包,当前版本号是3.2.1;后者是官方在2013年推出的版本,当时版本号为4.0。 因为官方认为旧的commons-collections有一些架构和API设计上的问题,但为了修复这些问题,会产生大量不能向前兼容的改动。所以commocns-collections4并不认为是一个用来替换commons-collections的新版本,而是一个新的包,两者的命名空间并不冲突,可以共存于同一个项目中。 那么既然在3.2.1中存在反序列化,在4.0中是否也存在呢? Commons-Collectio...
TemplatesImpl在Shiro中的利用
TemplatesImpl在Shiro中的利用通过TemplatesImpl构造的利用链,理论上可以执行任意Java代码,它不受到对于链的限制,特别是内存马逐渐流行之后,执行任意Java代码的需求就更加浓烈。 这篇继续跟着p牛,以Shiro反序列化漏洞为例实际使用一下TemplatesImpl。 使用CC6攻击Shiro先来说一下Shiro反序列化原理:为了让浏览器或服务器重启后不丢失登录状态,Shiro支持持久化信息序列化并加密后保存在Cookie、的rememberMe字段中,下次读取时进行解密再反序列化。但是在Shiro 1.2.4版本之前内置了一个默认且固定的加密Key,导致攻击者可以为在任意的rememberMe Cookie,进而触发反序列化漏洞。 这里我们直接用P牛的这个登录应用,可以在IDEA上右键运行 输入正确的账号密码,root/secret,成功登陆: 如果登录时选择了remember me的多选框,那么登录成功后服务端会返回一个rememberMe的Cookie: 诶🤓👆接下来就是攻击时间: 用前面学的CC链生成一个序列化Payload 用Sh...
刷题记录(1)-[网鼎杯 2018]Fakebook
刷题记录(1)-[网鼎杯 2018]Fakebook刷题遇到一个感觉还挺有意思的一道 进去之后先是一个Fakebook的页面,一个登陆一个加东西,先扫一下目录看看有没有什么能用的 不知道为什么拿dirsearch扫全是429状态,然后试了下robots.txt发现有一个/user.php.bak 那么把这个.bak文件先搞下来 1234567891011121314151617181920212223242526272829303132333435363738394041424344<?phpclass UserInfo{ public $name = ""; public $age = 0; public $blog = ""; public function __construct($name, $age, $blog) { $this->name = $name; $this->age = (int)$age; $this-...
CC3_POC(JAVA7与JAVA8通杀版)
CC3 POC修改在前面的这篇Java反序列化(4)中有讲过解决高版本利用问题过程差不多 先把这条链来理清楚,这里可以看看白日梦组长的视频 1newTransformer() --> getTransletInstance() --> defineTransletClasses() --> defineClass() --> newInstance() CC1是命令调用,CC3是动态类加载。 具体做法就跟Java反序列化(4)中讲的一样,把TransformerMap改成LazyMap 完整的POC: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980package org.example;import com.sun.org.apache.xalan.internal.xsltc.trax.Template...
