LDAP注入攻击原理与防御
字数 922 2025-11-06 12:41:12
LDAP注入攻击原理与防御
1. 知识点描述
LDAP(轻量级目录访问协议)是一种用于访问目录服务的协议,常用于企业用户认证、组织信息查询等。LDAP注入攻击是通过构造恶意输入,篡改LDAP查询语句的逻辑,从而绕过认证、泄露敏感数据或破坏目录结构。其原理与SQL注入类似,但针对的是LDAP过滤器的语法。
2. LDAP查询基础
LDAP查询通常使用过滤器(Filter)语法,例如:
- 认证查询:
(uid=输入的用户名) - 组合查询:
(&(uid=用户名)(password=密码))
特殊字符在LDAP中具有逻辑意义,例如:
*:通配符(和):定义过滤器组&:逻辑与(AND)|:逻辑或(OR)!:逻辑非(NOT)
3. 攻击原理与示例
场景:用户登录时,系统构造LDAP过滤器验证身份:
(&(uid=用户输入的用户名)(password=用户输入的密码))
若用户名为 admin,密码为 secret,则过滤器为:
(&(uid=admin)(password=secret))
攻击示例1:绕过认证
攻击者在用户名输入 *)(uid=*))(|(uid=*,密码任意(如 123),过滤器变为:
(&(uid=*)(uid=*))(|(uid=*)(password=123))
解析结果:
- 原过滤器被拆分为
(&(uid=*)(uid=*))(恒真)和(|(uid=*)(password=123))(恒真),整体条件成立,从而绕过登录。
攻击示例2:信息泄露
通过通配符 * 枚举数据:
- 输入用户名
a*,可能返回以a开头的所有用户条目,逐步推测目录结构。
4. 防御措施
(1)输入过滤
- 转义特殊字符:将
*、(、)、\等转换为LDAP转义格式(如\2a表示*)。 - 白名单验证:对用户名、密码等字段限制字符类型(如仅允许字母数字)。
(2)最小权限原则
- LDAP查询账户仅赋予必要权限,避免允许通配符查询敏感数据。
(3)参数化查询
- 使用LDAP库的参数化接口(如Java的
DirContext.search的参数绑定),避免拼接过滤器。
(4)日志监控
- 记录异常查询(如多次通配符请求),及时发现攻击行为。
5. 总结
LDAP注入的核心风险在于未对用户输入进行规范化处理,防御需结合输入验证、权限控制和安全编程实践。