fastjson-反序列化漏洞1.2.24/1.2.47
基础知识
Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。RMI是一种行为,指的是Java远程方法调用。
漏洞原理
Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
影响版本
Fastjson1.2.47以及之前的版本
复现思路
- 云主机B 的内置vulhub8090 端口搭建实验靶场
- 云主机B 的 6666 端口使用 python 开启一个简易的 web 站点
- 云主机B 的 9999 端口开启一个 rmi 服务(rmi 远程方法调用,一台机器上的程序调用另一台机器上的方法)
- 云主机B 的 2333 端口监听反弹过来的 shell
注:本次复现仅使用一个云主机实现
复现—Fastjson1.2.24
前情提要:云主机B作为攻击方,云主机内部靶场镜像开启Fastjson1.2.24漏洞容器作为受害方。
(1) 在云主机B中开启环境
查看和删除正在运行的容器:
docker ps -aq /rm
启动Fastjson1.2.24漏洞环境:
docker-compose up -d