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

相关文章

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Java StringBuilder 实现原理全攻略

《JavaStringBuilder实现原理全攻略》StringBuilder是Java提供的可变字符序列类,位于java.lang包中,专门用于高效处理字符串的拼接和修改操作,本文给大家介绍Ja... 目录一、StringBuilder 基本概述核心特性二、StringBuilder 核心实现2.1 内部