LDAP 注入是什么
LDAP 注入发生在把用户输入直接拼接进 LDAP 过滤器时:输入中的括号、通配符与转义字符会改变过滤条件的逻辑结构,使结果集异常扩大,甚至让认证判断失效。受影响的功能通常是目录服务支撑的登录、通讯录检索、组织架构同步与自助改密;MySQL 里的注入思路在这里换成了过滤器语法,原理一致。
基本信息
| 适用平台 | AD / OpenLDAP 等目录服务支撑的应用(Java、PHP、Python 均有) |
|---|---|
| 注入入口 | 用户名、搜索关键字、部门与岗位等筛选参数 |
| 观察信号 | 结果集异常扩大、过滤器解析报错、响应时间变化 |
| 参考标准 | OWASP WSTG-INPV-06、CWE-90 |
典型使用场景
- 统一身份登录改造后的注入面核查
- 通讯录与员工检索功能的输入处理审计
- AD 自助改密、账号绑定等目录写操作前的校验评估
- 第三方系统通过 LDAP 对接时的边界检查
- 代码审计中定位过滤器字符串拼接的写法
验证步骤(测试账号)
验证步骤(测试账号)
1. 定位使用 LDAP 的功能:统一登录、通讯录检索、自动补全
2. 提交包含目录服务元字符的取值(括号、通配符、转义字符的编码形式),观察结果集是否扩大或报错
3. 同时发一次正常请求做对照,确认差异方向与可重复性
4. 记录参数名、请求时间、现象与影响面,并把准确取值写入内部记录而不是报告正文现象与判据
| 现象 | 可能的含义 | 后续验证 |
|---|---|---|
| 返回结果集明显扩大 | 过滤器逻辑被输入改写 | 用对照请求确认可重复 |
| 过滤器语法报错 | 输入未转义直接拼接 | 检查报错是否回显给用户 |
| 任意口令通过验证 | 认证判断被绕过 | 用测试账号复现并立即通报 |
| 响应时间显著变长 | 目录查询被放大 | 限次复现,避免影响服务 |
修复视角:使用语言或框架自带的过滤器转义函数(如 Java 的 JNDI 转义、PHP 的 ldap_escape),并优先用参数化的查询构造方式,而不是手工拼接字符串。
目录服务是认证中枢:在登录接口上的注入验证可能触发账号锁定与告警。只在测试账号与测试环境进行,高风险现象确认后立即通报客户。