分类: Java

13 篇文章

Deserialization Bombs detects Java dependencies
当你找到了一个反序列化的点,但是不确定目标存在哪些依赖,从而无法及时构造出合适的 Gadget,实在是令人可惜。那么有没有办法 fuzz 出目标的 class 呢?反序列化炸弹的方式可以做到! 原理:通过构造特殊的多层嵌套 HashSet,导致服务器反序列化的时间复杂度提升,消耗服务器性能,导致延时确认 class。 示例: package yso…
Jetty Servlet与Filter型内存马
前言 本文在实现完 Jetty Listener 回显内存马后,Servlet 和 Filter 类型的内存马想必就是信手拈来了。阅读本文之前建议先阅读 https://sec.1i6w31fen9.top/2023/11/18/jetty-listener-%e5%9e%8b%e5%86%85%e5%ad%98%e9%a9%ac/ ,这样更好理解…
Jetty Listener 型内存马
前言 本文介绍的是 Jetty Listener 回显内存马的实现思路和细节以及反序列化漏洞的注入。所给出的 PoC 代码已通过反序列化注入的方式测试成功。 环境 引入依赖以及环境如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h…
JavaAgent内存马
前言 这是通过 JavaAgent + javassist 动态修改 web 服务内部关键类注入恶意代码的内存马技术。限制是需要在已经控制目标机器并且上传 Agent jar 包和 javassist 包才可以完成的注入。 环境 tomcat 环境(目标受害环境): <project xmlns="http://maven.apac…
SpringBoot-jackson反序列化链
前言 Jackson 在 SpringBoot 中自带。而这个依赖包中的 POJONode 在调用 toString 会触发 getter 方法的调用。类似于 fastjson 的 parse 和 rome 的 ToStringBean#toString。因此如果目标环境可以用 TemplatesImpl 并且 jdk 版本较低,那么将可以在 Sp…
Spring 内存马
实验环境 仍旧像介绍 tomcat 一样,目标是反序列化注入内存马。引入存在漏洞 rome 依赖。 pom.xml 主要如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-pa…
Tomcat内存马
前言 本文对 Tomcat 的各种内存马进行了简单学习和整理,所给出的 PoC 代码均已通过反序列化注入的方式测试成功。 环境 引入依赖以及环境如下: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &…
JNDI注入
什么是 JNDI? JNDI 也就是 Java 命名和目录接口的简称。也就是名字对应一个 Java 对象。在 JNDI 中支持四种服务 LDAP:轻量目录访问协议 CORBA 通用对象请求代理架构 RMI。远程方法调用 DNS JNDI 主要提供了绑定命名和命名查找对象的方法 bind:将一个名称绑定到对象 lookup: 通过名称来寻找对象 主要…
Shiro-550 反序列化
原理 Shiro 反序列化漏洞的原理比较简单:为了让浏览器或服务器重启后用户不丢失登录状态,Shiro 支持将持久化信息序列化并加密后保存在 Cookie 的 rememberMe 字段中,下次读取时进行解密再反序列化。但是在 Shiro 1.2.4 版本之前内置了一个默认且固定的加密 Key,导致攻击者可以伪造任意的 rememberMe Coo…
Java-XEE的防御
XEE 的防御 XXE 误写为了 XEE,请谅解。 外部实体 外部实体表示外部文件的内容,用 SYSTEM 关键词表示。 参数实体 参数实体只用于 DTD 和文档的内部子集中,XML的规范定义中,只有在DTD中才能引用参数实体. 参数实体的声明和引用都是以百分号%。并且参数实体的引用在DTD是理解解析的,替换文本将变成DTD的一部分。该类型的实体用…