LDAP注入漏洞与防护
字数 912 2025-11-12 05:53:40

LDAP注入漏洞与防护

1. 漏洞描述
LDAP(轻量级目录访问协议)注入是一种通过操纵LDAP查询语句中的用户输入,破坏查询逻辑或未授权访问目录数据的攻击手法。类似SQL注入,攻击者通过构造特殊输入,使应用程序执行非预期的LDAP查询,可能导致信息泄露、权限提升或数据篡改。例如,登录功能若直接将用户输入拼接到LDAP过滤器中,可能被绕过认证。

2. LDAP查询基础
LDAP查询使用过滤器(Filter)语法,常见运算符:

  • &:逻辑与(例如 &(条件1)(条件2)
  • |:逻辑或(例如 |(条件1)(条件2)
  • !:逻辑非(例如 !(条件)
  • =:等值匹配(例如 (cn=admin)

示例:登录查询过滤器可能为:

(&(username=输入用户名)(password=输入密码))

3. 漏洞产生场景
假设登录功能代码如下(伪代码):

username = request.getParameter("username")
password = request.getParameter("password")
filter = "(&(cn=" + username + ")(userPassword=" + password + "))"

若用户输入 admin)(cn=*))(|(cn=* 作为用户名,过滤器变为:

(&(cn=admin)(cn=*))(|(cn=*)(userPassword=...))

由于 | 运算符的优先级,查询会匹配所有 cn 属性存在的条目,从而绕过密码验证。

4. 攻击类型与示例

  • 认证绕过:如上例,通过注入逻辑运算符使查询条件恒真。
  • 信息泄露:注入通配符 * 枚举数据,例如输入 * 作为用户名,查询 (cn=*) 返回所有条目。
  • 权限提升:修改查询中的角色属性,例如注入 )(role=admin 使查询附加高权限条件。

5. 防护方案

  • 输入验证
    • 禁止输入中包含 ( ) & | = * 等特殊字符。
    • 使用白名单限制格式(如用户名只允许字母数字)。
  • 参数化查询:使用LDAP库的转义函数(如Python的 ldap3.utils.conv.escape_filter_chars)对输入进行编码:
    from ldap3.utils.conv import escape_filter_chars
    safe_username = escape_filter_chars(username)
    
  • 最小权限原则:LDAP连接使用低权限账户,限制查询范围。
  • 日志监控:记录异常查询行为,检测多次通配符使用。

6. 进阶防护

  • 静态代码分析:自动化检测代码中的字符串拼接模式。
  • Web应用防火墙(WAF):配置规则拦截包含LDAP关键字的异常请求。
  • 定期渗透测试:模拟攻击验证防护措施有效性。

通过严格输入处理与安全编码实践,可有效消除LDAP注入风险。

LDAP注入漏洞与防护 1. 漏洞描述 LDAP(轻量级目录访问协议)注入是一种通过操纵LDAP查询语句中的用户输入,破坏查询逻辑或未授权访问目录数据的攻击手法。类似SQL注入,攻击者通过构造特殊输入,使应用程序执行非预期的LDAP查询,可能导致信息泄露、权限提升或数据篡改。例如,登录功能若直接将用户输入拼接到LDAP过滤器中,可能被绕过认证。 2. LDAP查询基础 LDAP查询使用过滤器(Filter)语法,常见运算符: & :逻辑与(例如 &(条件1)(条件2) ) | :逻辑或(例如 |(条件1)(条件2) ) ! :逻辑非(例如 !(条件) ) = :等值匹配(例如 (cn=admin) ) 示例:登录查询过滤器可能为: 3. 漏洞产生场景 假设登录功能代码如下(伪代码): 若用户输入 admin)(cn=*))(|(cn=* 作为用户名,过滤器变为: 由于 | 运算符的优先级,查询会匹配所有 cn 属性存在的条目,从而绕过密码验证。 4. 攻击类型与示例 认证绕过 :如上例,通过注入逻辑运算符使查询条件恒真。 信息泄露 :注入通配符 * 枚举数据,例如输入 * 作为用户名,查询 (cn=*) 返回所有条目。 权限提升 :修改查询中的角色属性,例如注入 )(role=admin 使查询附加高权限条件。 5. 防护方案 输入验证 : 禁止输入中包含 ( ) & | = * 等特殊字符。 使用白名单限制格式(如用户名只允许字母数字)。 参数化查询 :使用LDAP库的转义函数(如Python的 ldap3.utils.conv.escape_filter_chars )对输入进行编码: 最小权限原则 :LDAP连接使用低权限账户,限制查询范围。 日志监控 :记录异常查询行为,检测多次通配符使用。 6. 进阶防护 静态代码分析 :自动化检测代码中的字符串拼接模式。 Web应用防火墙(WAF) :配置规则拦截包含LDAP关键字的异常请求。 定期渗透测试 :模拟攻击验证防护措施有效性。 通过严格输入处理与安全编码实践,可有效消除LDAP注入风险。