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注入的核心风险在于未对用户输入进行规范化处理,防御需结合输入验证、权限控制和安全编程实践。

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