admin 发表于 5 天前

LDAP注入——绕过认证与目录遍历

LDAP注入——绕过认证与目录遍历摘要:轻量目录访问协议(LDAP)常用于企业用户认证和组织架构存储。LDAP注入攻击指黑客在LDAP查询中插入特殊字符,改变查询语义,从而绕过登录、越权查看其他用户条目甚至修改目录。本文将剖析LDAP过滤器语法的脆弱点,演示&、|、!以及空值绑定攻击,并提供转义库、白名单输入等防御方案。关键词:黑客网站攻击;LDAP注入;渗透测试;目录服务安全;绕过认证一、引言许多内部系统(如VPN、邮件系统)使用LDAP进行身份验证。当登录表单将用户名/密码直接拼接到LDAP过滤器中时,黑客可输入*或)(uid=*等字符串改变逻辑,以第一个用户身份登录。LDAP注入危害包括未授权访问和信息泄露。二、LDAP注入原理2.1 LDAP过滤器语法过滤器例如 (&(uid=username)(userPassword=password))。其中特殊字符有:( ) & | ! = ~ * \ / 等。2.2 登录绕过示例危险代码(Python ldap3):python



search_filter = "(&(uid=" + username + ")(userPassword=" + password + "))"
攻击者输入 admin)(! 作为用户名,密码任意,过滤器变成:
(&(uid=admin)(!)(userPassword=xxx)) → (!) 永远为假,但LDAP可能会出错或返回所有条目(取决于实现),从而绕过。更典型的绕过:用户名 * ,密码 any → (&(uid=*)(userPassword=any)),如果存在任意用户且密码校验较弱,可能直接成功。三、高级利用
[*]盲注信息提取:通过构造(uid=admin)(sn=* 类逐字符猜测敏感属性。
[*]修改LDAP条目:如果应用允许通过LDAP修改个人信息,注入可增加新属性或提升权限。
四、防御措施4.1 输入转义所有语言都有LDAP转义函数:PHP的ldap_escape,Python的ldap.filter.escape_filter_chars,Java的LdapEncoder.nameEncode。4.2 白名单输入对于用户名,只允许字母数字和下划线;对于密码,不应参与过滤器构建,应单独获取条目后比对密码哈希。4.3 使用参数化查询类似SQL的参数化查询,LDAP可通过SearchRequest设置参数,但不是所有库支持。尽量使用预处理方式。五、检测方法
[*]提交包含*、)(、&等字符,观察响应是否异常或登录成功。
[*]使用自动化LDAP注入扫描工具(如ldapsearch手工注入)。
六、总结LDAP注入可导致黑客绕过企业认证。防御核心:对用户输入进行正确的LDAP转义,并将密码验证移到应用程序中而非过滤器内。下一篇:XPath注入攻击。
页: [1]
查看完整版本: LDAP注入——绕过认证与目录遍历