如何在Java JDK 21中启用对象反序列化(Log4J漏洞演示场景)
解决JDK 21中JNDI对象反序列化被禁止的问题
问题根源是JDK 9及后续版本(含JDK21)为了安全加固,默认禁用了JNDI LDAP的对象反序列化,同时限制了远程代码库的加载。要在漏洞演示场景下恢复JDK8的行为,需要调整以下JVM参数:
启用对象反序列化
添加JVM启动参数:-Djdk.naming.object.deserialization=allow该参数默认值为
deny,设置为allow将允许JNDI反序列化对象。允许加载远程代码库
添加JVM启动参数:-Dcom.sun.jndi.ldap.object.trustURLCodebase=trueJDK 11+默认关闭了LDAP上下文加载远程URL代码库的功能,开启这个参数才能让恶意类被加载执行,完成Log4J漏洞的演示流程。
在Spring Boot中应用参数的方式
- IDE运行:在Run Configuration的VM Options中添加上述两个参数。
- jar包运行:执行以下命令启动应用:
java -Djdk.naming.object.deserialization=allow -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar your-springboot-app.jar
注意:这些参数会完全关闭JDK针对JNDI的安全防护,仅适合漏洞演示场景,绝对不能在生产环境使用。
内容的提问来源于stack exchange,提问作者Hittt
相关产品推荐
相关产品推荐

