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个
二、环境搭建
-  使用Intellij IDEA创建项目 
  
  
-  在 pom.xml中添加依赖
  
-  点击刷新 
  
-  获得log4j的源码 
  
三、简单使用Log4j2

- ALL <DEBUG < INFO < WARN < ERROR < FATAL <OFF (只有等级>=设置的等级才会输出日志【ERROR、FATAL】)
-  输出错误日志 
  
-  Log4j2提供了 lookup功能
  
四、JDNI和RMI
- 什么是JDNI? - JNDI(Java Naming and Directory Interface)本质是可以操作目录服务、域名服务的一组接口
- JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA。
 
- 什么RMI? - RMl:远程方法调用(Remote Method Invoke)
- 客户端(Client)可以远程调用服务端(Server)上的方法,JVM虚拟机能够远程调用另一个JVM虚拟机中的方法
 
4.1、启动一个RMI服务端

- 服务端:
  
- 服务端的资源:
  
  
  
- 使用python开启本地的一个web服务
  
  
- 启动RMI服务端:
  
4.2、启动一个RMI客户端

-  创建 
  
-  运行,发生报错,是因为高版本的java是不支持rmi获取相关的资源,需要添加一些设置才可以 
  
  
-  重新运行,虽然没有报错,但是依旧没有“启动计算器”,代码不能够执行,需要再添加一条代码 
  
  
-  再次重新运行:打印了“hello”,并且调出了计算器 
  
-  利用log4j的lookup的功能,也成功的请求了资源 
  
  
4.3、ldap
- ldap与rmi类似
五、漏洞复现
- 靶场地址:https://github.com/vulhub/vulhub/tree/master/log4j/CVE-2021-44228
- 工具: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

-  靶场地址:120.77.38.47 
  
-  将工具放在攻击机上:162.14.83.77 
  
-  在攻击机上运行工具:162.14.83.77是攻击机的IP地址 
  
-  查看工具用法 
  
-  攻击机开启监听 
  
-  使用反弹shell 
  
  
-  攻击机监听成功 
六、Python批量检测

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