Java反序列化漏洞之Javassist(8)
2023-06-15 17:10:48
# Web Security
# Java Deserialization
前言
Javassist是一个可以动态生成Java字节码(.class)的库,它可以在运行的时候生成新的类。有时候,我们需要在所有class都被编译完后,运行时再修改或新建一个class文件,Javassist可以帮助我们达到这个目的。
Javassist基本元素
CtClass - Compile Time Class - 即编译时的Class,每个需要修改编辑的class都对应一个CtClass instance
ClassPool - 一个存储CtClass对象的容器
CtField - Java中的field
CtMethod - Java中的method
简单演示
导入依赖
方法一:pom.xml
1 | <dependency> |
方法二:导入jar包
可在网上下载jar包,导入module,library
创建Class
1 | import javassist.*; |
结果
一些特殊参数
标识符 | 作用 |
---|---|
0、1、$2、 3 、 3、 3、… | this和方法参数(1-N是方法参数的顺序,如第一个parameter) |
$args | 方法参数数组,类型为Object[] |
$$ | 所有方法参数,例如:m($$)相当于m(1,1,2,…) |
$cflow(…) | control flow 变量 |
$r | 返回结果的类型,在强制转换表达式中使用。 |
$w | 包装器类型,在强制转换表达式中使用。 |
$_ | 返回的结果值 |
$sig | 类型为java.lang.Class的参数类型对象数组 |
$type | 类型为java.lang.Class的返回值类型 |
$class | 类型为java.lang.Class的正在修改的类 |