注册 网站开发 公司重庆招聘网

news/2025/9/25 16:37:22/文章来源:
注册 网站开发 公司,重庆招聘网,wordpress滑动验证2016,营销策划书范文大全作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了#xff1a;这个漏洞到底是怎么回事#xff1f;核弹级#xff0c;真的有那么厉害吗#xff1f;怎么利用这个漏洞呢#xff1f;我看了很多技术分析文章#xff0c;都太过专业#xff0c;很多非… 作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了这个漏洞到底是怎么回事核弹级真的有那么厉害吗怎么利用这个漏洞呢我看了很多技术分析文章都太过专业很多非Java技术栈或者不搞安全的人只能看个一知半解导致大家只能看个热闹对这个漏洞的成因、原理、利用方式、影响面理解的不到位。这篇文章我尝试让所有技术相关的朋友都能看懂这个注定会载入网络安全史册上的漏洞到底是怎么一回事log4j2不管是什么编程语言不管是前端后端还是客户端对打日志都不会陌生。通过日志可以帮助我们了解程序的运行情况排查程序运行中出现的问题。在Java技术栈中用的比较多的日志输出框架主要是log4j2和logback。今天讨论的主角就是log4j2。我们经常会在日志中输出一些变量比如logger.info(client ip: {}, clientIp)现在思考一个问题假如现在想要通过日志输出一个Java对象但这个对象不在程序中而是在其他地方比如可能在某个文件中甚至可能在网络上的某个地方这种时候怎么办呢log4j2的强大之处在于除了可以输出程序中的变量它还提供了一个叫Lookup的东西可以用来输出更多内容lookup顾名思义就是查找、搜索的意思那在log4j2中就是允许在输出日志的时候通过某种方式去查找要输出的内容。lookup相当于是一个接口具体去哪里查找怎么查找就需要编写具体的模块去实现了类似于面向对象编程中多态那意思。好在log4j2已经帮我们把常见的查找途径都进行实现了具体每一个的意思这里就不详述了这不是本文的重点。JNDI主要来看其中那个叫JNDI的东西JNDI即Java Naming and Directory InterfaceJAVA命名和目录接口它提供一个目录系统并将服务名称与对象关联起来从而使得开发人员在开发过程中可以使用名称来访问对象。看不懂看不懂就对了简单粗暴理解有一个类似于字典的数据源你可以通过JNDI接口传一个name进去就能获取到对象了。那不同的数据源肯定有不同的查找方式所以JNDI也只是一个上层封装在它下面也支持很多种具体的数据源。LDAP继续把目光聚焦咱们只看这个叫LDAP的东西。LDAP即Lightweight Directory Access Protocol轻量级目录访问协议目录是一个为查询、浏览和搜索而优化的专业分布式数据库它呈树状结构组织数据就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同它有优异的读性能但写性能差并且没有事务处理、回滚等复杂功能不适于存储修改频繁的数据。所以目录天生是用来查询的就好像它的名字一样。看不懂看不懂就对了这个东西用在统一身份认证领域比较多但今天也不是这篇文章的重点。你只需要简单粗暴理解有一个类似于字典的数据源你可以通过LDAP协议传一个name进去就能获取到数据。漏洞原理好了有了以上的基础再来理解这个漏洞就很容易了。假如某一个Java程序中将浏览器的类型记录到了日志中String userAgent  request.getHeader(User-Agent); logger.info(userAgent);网络安全中有一个准则不要信任用户输入的任何信息。这其中User-Agent就属于外界输入的信息而不是自己程序里定义出来的。只要是外界输入的就有可能存在恶意的内容。假如有人发来了一个HTTP请求他的User-Agent是这样一个字符串${jndi:ldap://127.0.0.1/exploit}接下来log4j2将会对这行要输出的字符串进行解析。首先它发现了字符串中有 ${}知道这个里面包裹的内容是要单独处理的。进一步解析发现是JNDI扩展内容。再进一步解析发现了是LDAP协议LDAP服务器在127.0.0.1要查找的key是exploit。最后调用具体负责LDAP的模块去请求对应的数据。如果只是请求普通的数据那也没什么但问题就出在还可以请求Java对象Java对象一般只存在于内存中但也可以通过序列化的方式将其存储到文件中或者通过网络传输。如果是自己定义的序列化方式也还好但更危险的在于JNDI还支持一个叫命名引用Naming References的方式可以通过远程下载一个class文件然后下载后加载起来构建对象。PS有时候Java对象比较大直接通过LDAP这些存储不方便就整了个类似于二次跳转的意思不直接返回对象内容而是告诉你对象在哪个class里让你去那里找。注意这里就是核心问题了JNDI可以远程下载class文件来构建对象。危险在哪里如果远程下载的URL指向的是一个黑客的服务器并且下载的class文件里面藏有恶意代码那不就完犊子了吗还没看懂没关系我画了一张图这就是鼎鼎大名的JNDI注入攻击其实除了LDAP还有RMI的方式有兴趣的可以了解下。JNDI 注入其实这种攻击手法不是这一次出现了早在2016的blackhat大会上就有大佬披露了这种攻击方式。回过头来看问题的核心在于Java允许通过JNDI远程去下载一个class文件来加载对象如果这个远程地址是自己的服务器那还好说如果是可以被外界来指定的地址那就要出大问题前面的例子中一直用的127.0.0.1来代替LDAP服务器地址那如果输入的User-Agent字符串中不是这个地址而是一个恶意服务器地址呢影响规模这一次漏洞的影响面之所以如此之大主要还是log4j2的使用面实在是太广了。一方面现在Java技术栈在Web、后端开发、大数据等领域应用非常广泛国内除了阿里巴巴、京东、美团等一大片以Java为主要技术栈的公司外还有多如牛毛的中小企业选择Java。另一方面还有好多像kafka、elasticsearch、flink这样的大量中间件都是用Java语言开发的。在上面这些开发过程中大量使用了log4j2作为日志输出。只要一个不留神输出的日志有外部输入混进来那直接就是远程代码执行RCE灭顶之灾修复新版的log4j2已经修复了这个问题大家赶紧升级。下面是log4j2官网中关于JNDI lookup的说明我通过搜索引擎找到了缓存的12月10号前的快照大家对比一下比起下面这个缓存上面那一版多了哪些东西答案是修复后的log4j2在JNDI lookup中增加了很多的限制默认不再支持二次跳转也就是命名引用的方式获取对象只有在log4j2.allowedLdapClasses列表中指定的class才能获取。只有远程地址是本地地址或者在log4j2.allowedLdapHosts列表中指定的地址才能获取以上几道限制算是彻底封锁了通过打印日志去远程加载class的这条路了。最后手机前的各位Java小伙伴儿们你们写的程序中有用到log4j2吗有没有某个地方的输出有外部的参数混进来呢赶紧检查检查哦往期推荐虚幻引擎5上的《黑客帝国》全新体验爱了爱了Web兴起3.0之际元宇宙这杯羹怎么分Redis会遇到的坑你踩过几个通盘无妙手恒生电子落子Light云点分享点收藏点点赞点在看

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

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

相关文章

创建网站怎么创电子商务网站有哪些类型

项目介绍: 使用javaspringbootmysql开发的法律咨询网(文书),系统包含管理员、用户角色,功能如下: 管理员:登录系统;用户管理;文章管理(法律知识&#xff09…

网站建设公司业务在哪里来百度网站的总结

I老师就职于双非二本院校,希望通过出国研修以提升科研背景,在公派访学和申请导师出资的博士后之间,其选择了后者。最终我们落实了美国耶鲁大学的职位,头衔为Associate Research Scientist(副研究科学家)&am…

企业网站 联系我们电商培训机构有哪些?哪家比较好

常用示例 入门 Hello CMake CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。 ├── CMakeLists.txt # 希望运行的 CMake命令 ├── main.cpp # 带有main 的源文件 ├── include # 头文件目录 │ └── header.h └── src # 源代码目录 ├…

深入解析:李宏毅2023机器学习作业 HW01实操

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物pre { white-space: pre !important; word-wrap: nor…

按需引入echarts

--// echarts-config.js // ECharts按需引入配置文件 import * as echarts from echarts/core; import {BarChart,LineChart,PieChart,ScatterChart,RadarChart } from echarts/charts; import {TitleComponent,Toolti…

软件构造的用户交互设计 4章

交互设计的原则 1.尽量保持一致 2.满足普遍可用性 3.提供信息反馈 4.设计对话框以产生结束信息 5.预防并成立错误 6.允许撤销操作 7.支持内部控制点 8.减轻短时记忆负担 交互设计的基本过程 标识和建立用户需求 提出满…

自定义制作docker容器自动自愈容器镜像

包括:完整的 autoheal.sh(支持每分钟检查一次、连续 5 次 unhealthy 才重启) Dockerfile docker-compose.yml 详细文档,包含参数说明、用法1️⃣ autoheal.sh #!/usr/bin/env sh set -e set -o pipefailDOCKER_SOC…

阀门公司网站建设广州动漫制作公司

1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据? 一、引言 在数据驱动时代,开发者与研究者越来越依…

第一次编码器测试

共1055圈 平均2047.974408 平均每张丢失距离 0.00001132 mm可以忽略 不丢帧

04-FreeRTOS的概述及编程规范

概述 本文对FreeRTOS源码进行概述,包括其核心文件作用,及其编程规范,有助于阅读rtos的内核源码,更好的帮助理解。 一、FreeRTOS 源码核心结构概述 FreeRTOS 是轻量级实时操作系统,核心功能围绕 “任务调度” 和 “…

10_ select/poll/epoll实现服务端的io多路复用

一、io多路复用 在现有模型中,似乎每一个线程都做了同样的事情,1、监听客户端消息;2、业务消息处理。 “一消息一线程”的缺点究其根本,在于让每个线程都做了同样重复、且消耗资源巨大的事情——单独持有fd、监听客…

模拟实战配置实验

vlan之间的互通 要实现 VLAN 10(192.168.150.0/24)、VLAN 100(192.168.100.0/24)、VLAN 200(192.168.200.0/24) 之间的互联互通,核心原理是:二层交换机仅负责 VLAN 内流量转发,跨 VLAN 流量需通过三层设备(核…

微网站建设的现状设计吧

首先要理解double的存储方式,具体可查找相关的博客本文实现的是将8个字节(存储为16进制的字符串)转化为对应的double类型double MainWindow::qByteArraytodouble(QString qstr){QByteArray byte;StringToHex(qstr,byte);double result;memcpy(&result, byte.dat…

聚力赋能|竹云受邀出席2025华为全联接大会 - 详解

聚力赋能|竹云受邀出席2025华为全联接大会 - 详解2025-09-25 16:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

Linux安装Kafka(无Zookeeper模式)保姆级教程,云服务器安装部署,Windows内存不够允许看看

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国标GB28181公网直播EasyGBS如何构建全域覆盖的应急管理与安全生产解决方案?

在当今社会,安全生产和应急管理已经成为各行各业不可或缺的重要部分。全面提高安全生产管理水平、构建责任全覆盖、监管全过程、监管全方位的综合治理体系已成为社会发展的必然趋势。国标GB28181网页直播平台EasyGBS作…

Serilog.AspNetCore与Serilog的区别

一直以为用的是Serilog,深入了解后,用的是Serilog.AspNetCore,具体来了解下区别,与使用方法: Serilog 是“核心引擎”,只负责把日志事件生成出来; Serilog.AspNetCore 是“ASP.NET Core 专用适配器”,在 Seril…

基于MATLAB S函数实现多智能体间歇通信仿真

一、系统架构设计 1.1 通信模型 graph LR A[智能体1] -->|脉冲信号| B[智能体2] B -->|脉冲信号| C[智能体3] C -->|脉冲信号| A 1.2 核心模块通信触发模块:基于阈值事件的间歇通信 状态更新模块:离散时间一…