Von's Blog

Thinking will not overcome fear but action will.

fastjson漏洞学习

什么是fastjson Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库,用于将数据在 JSON 和 Java Object 之间互相转换。 基本用法非常简单,首先引入fastjson依赖 <dependency> <groupId>com.alibaba</groupId> <artifact...

log4j2漏洞学习

前言 log4j2这个核弹级漏洞也出来有一阵时间了,之前由于还没学习到这块所以没进行学习与复现,现在终于学到了JNDI注入,立马来分析这个知名漏洞。 什么是log4j2 Log4j2 是 Apache 的一个开源项目,通过使用 Log4j2,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可...

JNDI注入学习

什么是JNDI JNDI 全称为 Java Naming and Directory Interface,即 Java 名称与目录接口。也即JNDI提供统一的客户端API,并由管理者将JNDI API映射为特定的命名服务和目录服务,什么是命名服务和目录服务? 命名服务:就是一种通过名称来查找实际对象的服务。比如RMI协议,可以通过名称来查找并调用具体的远程对象。再比如DNS协议,通...

RMI学习(二)

RMI源码分析

之前我们已经简要的学习过了RMI的总体流程,也提到了RMI中的数据传输都是通过序列化和反序列化实现的,因此其实有着很大的攻击面,不过之前我们还没有学习反序列化的流程,也就没有深入的去探讨RMI,这次就来详细的学习一下。 不同于上次我们宏观的观察RMI的流程,实际上进行一个完整的服务注册、发现、调用流程分很多细分步骤,本篇先从源码的角度详细探究RMI的完整流程。 创建远程对象 上来的...

Shiro反序列化漏洞学习

什么是Shiro Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,为开发人员提供了直观而全面的身份验证、授权、加密和会话管理解决方案。 Shiro550(CVE-2016-4437) 在Shiro中,当我们勾选remember me时会将我们的身份信息序列化并使用AES加密后设置为cookie,当我们下次请求时服务器会读取Cookie并对解密后的结果进行反序列...

CommonsBeanutils反序列化学习

CommonsBeanutils是什么 Apache Commons Beanutils和之前我们学习的Commons Collections一样,是Apache Commons工具集下的另一个项目,它提供了对JavaBean的一些操作方法。 至于什么是JavaBean,其实指的是一种写法并且之前我们之前已经广泛接触到了: public class Student { priv...

动态加载字节码与CC3学习

前言 在前面我们学习了CC1和CC6,这两条链的最终利用点都是通过InvokerTransformer.transform方法进而执行Runtime.exec方法来实现命令执行的,但在一些反序列化过滤器中,例如InvokerTransformer这样的类是不能被通过的。在这种情况下,CC3就应运而生了,CC3并没有使⽤到InvokerTransformer来调⽤任意⽅法,而是通过动态类加载...

CC6学习

前言 前面我们学习了CC1这条链,并了解了利用TransformedMap和LazyMap的两种利用方法,但我们也提到在Java8u71及以后,由于AnnotationInvocationHandler类的readObject方法逻辑变了,导致CC1实际上失效了;本次我们就来学习CC6,这条链在高版本JDK上仍然可用。阅读本篇文章前建议先阅读之前学习URLDNS和CC1的文章(我感觉CC6...

CC1学习

Apache Commons Collections Apache Commons Collections是一个第三方的基础类库,提供了很多强有力的数据结构类型并且实现了各种集合工具类,可以说是apache开源项目的重要组件。而其经典的反序列化漏洞利用链也是学习java反序列化漏洞绕不开的一环。虽然CC链总共有很多条,但是都是利用了Transformer接口,本次我们先从CC1开始学习了解...

Java反序列化入门

序列化与反序列化 JAVA序列化是将对象转换成字节编码(与php不同,php是转换成字符串,java是转换成字节序列,在二进制层面)以方便在网络上进行传输或存储处理的一种方式,而反序列化则是将这段字节编码重新转换为对象的逆向操作。 序列化与反序列化的过程 我们直接来看实践的例子,假如我定义了一个Student类 import java.io.Serializable; public...