Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解

2024-04-07 07:12

本文主要是介绍Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解

  • 一、什么是Log4j2
  • 二、环境搭建
  • 三、简单使用Log4j2
  • 四、JDNI和RMI
    • 4.1、启动一个RMI服务端
    • 4.2、启动一个RMI客户端
    • 4.3、ldap
  • 五、漏洞复现
  • 六、Python批量检测

  • 参考视频:https://www.bilibili.com/video/BV1mZ4y1D7Ki/?spm_id_from=333.337.search-card.all.click&vd_source=93ef4007c464e7143f2a9fb5be297117

一、什么是Log4j2

  • Log4j2(Log for java)是Apache软件基金会下一个优秀java程序日志监控组件
  • Log4j2远程代码执行漏洞细节被公开【影响版本Log4j 2.x <= 2.15.0-rc1】
  • 影响:多达60644个开源软件,涉及相关版本软件包更是达到了321094个

二、环境搭建

  1. 使用Intellij IDEA创建项目
    在这里插入图片描述
    在这里插入图片描述

  2. pom.xml中添加依赖
    在这里插入图片描述

  3. 点击刷新
    在这里插入图片描述

  4. 获得log4j的源码
    在这里插入图片描述

三、简单使用Log4j2

在这里插入图片描述

  • ALL <DEBUG < INFO < WARN < ERROR < FATAL <OFF (只有等级>=设置的等级才会输出日志【ERROR、FATAL】)
  1. 输出错误日志
    在这里插入图片描述

  2. Log4j2提供了lookup功能
    在这里插入图片描述

四、JDNI和RMI

  • 什么是JDNI?
    • JNDI(Java Naming and Directory Interface)本质是可以操作目录服务、域名服务的一组接口
    • JNDI可访问的现有的目录及服务有:JDBC、LDAPRMI、DNS、NIS、CORBA。
  • 什么RMI?
    • RMl:远程方法调用(Remote Method Invoke)
    • 客户端(Client)可以远程调用服务端(Server)上的方法,JVM虚拟机能够远程调用另一个JVM虚拟机中的方法

4.1、启动一个RMI服务端

在这里插入图片描述

  1. 服务端:
    在这里插入图片描述
  2. 服务端的资源:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 使用python开启本地的一个web服务
    在这里插入图片描述
    在这里插入图片描述
  4. 启动RMI服务端:
    在这里插入图片描述

4.2、启动一个RMI客户端

在这里插入图片描述

  1. 创建
    在这里插入图片描述

  2. 运行,发生报错,是因为高版本的java是不支持rmi获取相关的资源,需要添加一些设置才可以
    在这里插入图片描述
    在这里插入图片描述

  3. 重新运行,虽然没有报错,但是依旧没有“启动计算器”,代码不能够执行,需要再添加一条代码
    在这里插入图片描述
    在这里插入图片描述

  4. 再次重新运行:打印了“hello”,并且调出了计算器
    在这里插入图片描述

  5. 利用log4j的lookup的功能,也成功的请求了资源
    在这里插入图片描述
    在这里插入图片描述

4.3、ldap

  • ldap与rmi类似

五、漏洞复现

  1. 靶场地址:https://github.com/vulhub/vulhub/tree/master/log4j/CVE-2021-44228
  2. 工具:JNDIExploit-1.2-SNAPSHOT.jar:https://github.com/zzwlpx/JNDIExploit
java -jar JNDIExploit.jar -h # 查看参数说明,其中 --ip 参数为必选参数-i , --ip 		# Local ip address-1 , --ldapPort 	# Ldap bind port(default:1389)-p , --httpPort 	# Http bind port(default:8080)-u , --usage 		# Show usage (default:false)-h , --help 		# Show this help

在这里插入图片描述

  1. 靶场地址:120.77.38.47
    在这里插入图片描述

  2. 将工具放在攻击机上:162.14.83.77
    在这里插入图片描述

  3. 在攻击机上运行工具:162.14.83.77是攻击机的IP地址
    在这里插入图片描述

  4. 查看工具用法
    在这里插入图片描述

  5. 攻击机开启监听
    在这里插入图片描述

  6. 使用反弹shell
    在这里插入图片描述
    在这里插入图片描述

  7. 攻击机监听成功

六、Python批量检测

在这里插入图片描述

  • https://github.com/cisagov/log4j-scanner

这篇关于Apache Log4j2 Jndi RCE CVE-2021-44228漏洞原理讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881954

相关文章

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

Apache服务器IP自动跳转域名的问题及解决方案

《Apache服务器IP自动跳转域名的问题及解决方案》本教程将详细介绍如何通过Apache虚拟主机配置实现这一功能,并解决常见问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录​​问题背景​​解决方案​​方法 1:修改 httpd-vhosts.conf(推荐)​​步骤

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.