bee-boxLDAP注入学习之靶场练习
字数 2333 2025-08-18 11:38:52
LDAP注入攻击与防御全面指南
1. LDAP注入基础概念
LDAP(轻量级目录访问协议)注入是一种类似于SQL注入的攻击技术,攻击者通过构造恶意的输入来修改LDAP查询语句的逻辑,从而获取未授权的数据访问权限。
核心原理:LDAP注入的本质是通过精心构造的输入来"拼接圆括号",改变原始LDAP查询过滤器的逻辑结构。
2. LDAP关键函数详解
2.1 连接相关函数
-
ldap_connect()
- 功能:建立与LDAP服务器的连接
- 语法:
$LDAPCONN = ldap_connect($server) - 返回值:数值型,0表示连接失败,其他值表示成功
-
ldap_set_option()
- 功能:设置LDAP连接选项
- 语法:
ldap_set_option($link_identifier, $option, &$retval) - 重要选项:
LDAP_OPT_PROTOCOL_VERSION:设置协议版本(2或3)LDAP_OPT_REFERRALS:控制是否自动追随引用LDAP_OPT_NETWORK_TIMEOUT:设置网络超时
-
ldap_bind()
- 功能:绑定到LDAP目录
- 语法:
ldap_bind($link_identifier, $bind_rdn, $bind_password) - 参数说明:
$bind_rdn:登录路径,如cn=admin,dc=bwapp,dc=local$bind_password:登录密码
2.2 查询相关函数
-
ldap_search()
- 功能:执行LDAP目录搜索
- 语法:
ldap_search($link_identifier, $dn, $filter) - 参数说明:
$dn:搜索的目录DN$filter:搜索过滤器,如(objectClass=*)
-
ldap_count_entries()
- 功能:返回查询结果数量
- 语法:
ldap_count_entries($link_identifier, $search)
3. LDAP过滤器语法
3.1 基本运算符
| 运算符 | 字符 | 用途 |
|---|---|---|
| 等号 | = | 字段必须等于给定值 |
| 通配符 | * | 匹配除NULL外的任何值 |
| 括号 | ( ) | 分离过滤器逻辑 |
| 与 | & | 所有条件必须为真 |
| 或 | | | 至少一个条件为真 |
| 非 | ! | 排除符合条件的对象 |
3.2 常用过滤器示例
- 返回所有对象:
(objectClass=*) - 返回所有用户对象:
(&(objectClass=user)(objectCategory=person)) - 返回群组:
(objectCategory=group) - 排除特定条件:
(&(&(objectClass=user)(objectCategory=person))(!(mail=test*))) - 组合条件查询:
(|(&(objectClass=user)(objectCategory=person))(objectCategory=group))
4. LDAP注入技术详解
4.1 基本注入方法
-
通配符注入:
- 输入
*可以匹配所有记录 - 示例:
(cn=*)会返回所有cn属性的记录
- 输入
-
逻辑注入:
- 通过注入
)(来闭合原有条件并添加新条件 - 示例注入:
*)(objectclass=*→ 过滤器变为:(|(cn=*)(objectclass=*)(sn=*))
- 通过注入
4.2 高级注入技巧
-
绕过认证:
- 构造
(|(cn=admin)(cn=*))这样的过滤器,可能绕过认证
- 构造
-
信息泄露:
- 通过注入获取敏感信息:
*)(objectClass=user))(&(objectClass=*
- 通过注入获取敏感信息:
-
权限提升:
- 修改过滤器获取管理员权限信息
5. 防御措施
5.1 输入验证
- 对用户输入进行严格的白名单验证
- 过滤特殊字符:
( ) & | * ! =
5.2 安全编码实践
- 使用参数化查询或预编译的LDAP过滤器
- 最小权限原则:LDAP绑定账户只具有必要的最小权限
5.3 配置加固
- 启用LDAP协议版本3(更安全)
- 配置适当的访问控制列表(ACLs)
- 禁用匿名绑定
5.4 日志监控
- 监控异常的LDAP查询模式
- 设置查询结果数量限制
6. 实战案例解析
6.1 bwapp靶场分析
-
漏洞代码:
$filter = "(|($search_field_1=$search_for)($search_field_2=$search_for)($search_field_3=$search_for))"; -
注入过程:
- 正常输入:
test→(|(cn=test)(sn=test)(uid=test)) - 恶意输入:
*)(objectclass=*→(|(cn=*)(objectclass=*)(sn=*)(uid=*))
- 正常输入:
-
结果:
- 返回所有对象,包括敏感的管理员账户
7. 附录:LDAP注入速查表
| 攻击类型 | 注入示例 | 效果 |
|---|---|---|
| 信息泄露 | *)(objectClass=* |
获取所有对象 |
| 绕过认证 | `admin)( | (cn=admin` |
| 属性枚举 | *)(mail=* |
获取所有邮件地址 |
| 权限提升 | *)(memberOf=CN=Admins |
获取管理员列表 |
通过深入理解LDAP协议、过滤器语法和PHP的LDAP函数,安全人员可以更好地防御LDAP注入攻击,而渗透测试人员则可以更有效地发现此类漏洞。