根据流传的payload搭建测试环境
- log4j_rce.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j_rce {
private static final Logger logger = LogManager.getLogger(log4j_rce.class);
public static void main(String[] args) {
logger.error("暂时打码处理"}");
}
}
一步一步跟进,最后跟到
- org.apache.logging.log4j.core.lookup.Interpolator#lookup
似乎就是这里,断点调试
答案呼之欲出,lookup + jndi!
其实这里可以触发的不只是error,默认情况下fatal也可以,即便实际的业务场景肯定会有所不同(只会更多)。
起一个恶意的LDAPRefServer、恶意类Evil
然后触发即可