5.3.7. JNDI
5.3.7.1. 简介
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是为Java应用程序提供命名和目录访问服务的API,允许客户端通过名称发现和查找数据、对象,用于提供基于配置的动态调用。这些对象可以存储在不同的命名或目录服务中,例如RMI、CORBA、LDAP、DNS等。
其中Naming Service类似于哈希表的K/V对,通过名称去获取对应的服务。Directory Service是一种特殊的Naming Service,用类似目录的方式来存取服务。
5.3.7.2. JNDI注入
JNDI注入是2016年由pentester在BlackHat USA上的 A Journey From JNDI LDAP Manipulation To RCE
议题提出的。
其攻击过程如下
- 攻击者将Payload绑定到攻击者的命名/目录服务中
- 攻击者将绝对URL注入易受攻击的JNDI查找方法
- 应用程序执行查找
- 应用程序连接到攻击者控制的JNDI服务并返回Payload
- 应用程序解码响应并触发有效负载
5.3.7.3. 攻击载荷
JDNI主要有几种攻击载荷:
- CORBA
- IOR
- JNDI Reference
- JNDI Reference
- LDAP
- Remote Location
- Remote Object
- RMI
- Serialized Object