文章目录
前言
Apache Log4j 远程代码执行漏洞,正是由于组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。。
一、Log4j 是什么?
官网:https://logging.apache.org/log4j/2.x/
Log4j 是Apache 的一个开源项目,是一款基于Java 的开源日志记录工具。通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
二、Log4j 有什么漏洞
1.CVE-2017-5645漏洞
攻击者发送一个特别制作的2 进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload 代码。该漏洞是由于在处ObjectInputStream 时,接收函数对于不可靠来源的input 没有过滤。因此,通TcpSocketServer 和UdpSocketServer 添加可配置的过滤功能以及一些相关设置,可以有效的解决该漏洞。Apache Log4j 2.8.2 之前的2.x 版本中存在该反序列化漏洞
2.CVE-2019-17571漏洞
Log4j 1.2 版本中包含一个SocketServer 类,在未经验证的情况下,该SocketServe 类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,可以利用该类远程执行任意代码。
3、CVE-2021-44228 漏洞
2.15.0 之前的Log4j 版本存在通过ldap JNDI 解析器的远程代码执行漏洞。
https://github.com/advisories/GHSA-jfh8-c2jp-5v3q
详细信息:
Apache Log4j2 <=2.14.1 在配置、日志消息和参数中使用的JNDI 功能不能防止攻击者控
制的LDAP 和其他JNDI 相关端点。当启用消息查找替换时,可以控制日志消息或日志消息
参数的攻击者可以执行从LDAP 服务器加载的任意代码。从log4j 2.15.0 开始,默认情况
下已禁用此行为。在以前的版本(>2.10) 中, 可以通过将系统属性
“log4j2.formatMsgNoLookups”设置为“true”或从类路径中删除JndiLookup 类来缓解
这种行为( 例如: zip -q -d log4j-core-*.jar org
/apache/logging/log4j/core/lookup/JndiLookup.class ) 。Java 8u121 ( 参见
https://www.oracle.com/java/technologies/javase/8u121-relnotes.html ) 通过默认
“com.sun.jndi.rmi.object.
CVE-2021-44228漏洞 复现
第一步:使用idea 创建maven 项目