1.漏洞概述
Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson
1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过
2.影响版本
- Fastjson <=1.2.47
3.环境准备
3.1 主机准备
-
linux主机:1台(靶机)
-
Kail:1台(监听)
-
Windows:1台(复现实施,burp抓包)
3.2相关安装包准备
- fastjson1.2.47.tar.gz,下载地址
https://pan.baidu.com/s/18gr0bshmQOHJ26vB4mZCjQ
提取码:tzva
- JDK1.8,下载地址
https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
- maven3.6.3,下载地址
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/
- marshalsec下载地址
java反序列化利用工具,该工具可以快速开启RMI以及LDAP服务,但需要使用maven编译(下文会讲):https://github.com/mbechler/marshalsec
4.环境搭建
4.1 Linux主机(本文采用centos7.7)安装docker
- 安装所需软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置yum源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker- ce.repo
-
安装docker