LDAP Overview
1. LDAP介绍
1.1. 概述
LDAP(轻量目录访问协议)是AD的组成部分,LDAP目前的最新规范是第三版。发布于 RFC 4511。无论是对攻击者还是防御者,深入理解LDAP都非常重要
LDAP 是一种开源且跨平台的协议,用于针对各种目录服务(例如 AD)进行身份验证。 LDAP 就是网络环境中的系统与 AD 进行“对话”的一种方式。
LDAP 会话始于连接到 LDAP 服务器,后者也被称为 Directory System Agent,域控会主动监听LDAP请求,比如身份验证的请求
AD 与 LDAP 之间的关系,可以比作 Apache 与 HTTP。正如 Apache 是使用 HTTP 协议的 Web 服务器,Active Directory 则是使用 LDAP 协议的目录服务器。
还有一些比较少见的情况:就是有LDAP但是没有AD,可能是因为其部署了另类LDAP服务器,比如OpenLDAP
1.2. AD LDAP身份认证
LDAP 被配置为使用“BIND”操作针对 AD 验证凭证,从而为 LDAP 会话设置身份验证状态。 LDAP 身份验证有两种类型。
- 简单身份验证: 包括匿名身份验证、未认证身份验证以及用户名/密码身份验证。简单身份验证是指使用用户名和密码生成 BIND 请求,从而向 LDAP 服务器进行认证。
- SASL 身份验证: 简单认证和安全层 (SASL) 框架利用其他认证服务(例如 Kerberos)绑定到 LDAP 服务器,随后使用该认证服务( 如Kerberos)对 LDAP 进行认证。LDAP 服务器使用 LDAP 协议向授权服务发送 LDAP 消息,从而启动一系列质询/响应(Challenge/Response)消息交互,最终导致认证成功或失败。由于实现了认证方法与应用协议的分离,SASL 能够提供更强的安全性。
默认情况下,LDAP 认证消息以明文形式发送,因此任何人都可以在内部网络中嗅探到这些消息。建议使用 TLS 加密或类似技术来保护传输中的此类信息
1.3. LDAP 查询
我们可以通过 LDAP 查询与目录服务进行交互,以获取所需信息。
例如,使用以下查询可以查找网络中的所有工作站 (objectCategory=computer) ,而使用此查询则可以查找所有域控制器: (&(objectCategory=Computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
还可以查询用户,比如
PS C:\htb> Get-ADObject -LDAPFilter '(objectClass=group)' | select name
name
--
Administrators
Users
Guests
Print Operators
Backup Operators
Replicator
Remote Desktop Users
Network Configuration Operators
Performance Monitor Users
Performance Log Users
Distributed COM Users
IIS_IUSRS
Cryptographic Operators
Event Log Readers
Certificate Service DCOM Access
RDS Remote Access Servers
RDS Endpoint Servers
RDS Management Servers
Hyper-V Administrators
Access Control Assistance Operators
Remote Management Users
<SNIP>
更多的查询参考:
1.4. Ldap 过滤
1.4.1. Filter
Filter参数可以用来过滤,
PS C:\htb> get-ciminstance win32_product | fl
IdentifyingNumber : {7FED75A1-600C-394B-8376-712E2A8861F2}
Name : Microsoft Visual C++ 2017 x86 Additional Runtime - 14.12.25810
Vendor : Microsoft Corporation
Version : 14.12.25810
Caption : Microsoft Visual C++ 2017 x86 Additional Runtime - 14.12.25810
IdentifyingNumber : {748D3A12-9B82-4B08-A0FF-CFDE83612E87}
Name : VMware Tools
Vendor : VMware, Inc.
Version : 10.3.2.9925305
Caption : VMware Tools
IdentifyingNumber : {EA8CB806-C109-4700-96B4-F1F268E5036C}
Name : Local Administrator Password Solution
Vendor : Microsoft Corporation
Version : 6.2.0.0
Caption : Local Administrator Password Solution
IdentifyingNumber : {2CD849A7-86A1-34A6-B8F9-D72F5B21A9AE}
Name : Microsoft Visual C++ 2017 x64 Additional Runtime - 14.12.25810
Vendor : Microsoft Corporation
Version : 14.12.25810
Caption : Microsoft Visual C++ 2017 x64 Additional Runtime - 14.12.25810
<SNIP>
1.4.2. 运算符
使用运算符可以更精准的进行过滤
下面是一些常用运算符
| Filter | 含义 |
|---|---|
| -eq | 等于 |
| -le | 小于或等于 |
| -ge | 大于或等于 |
| -ne | 不等于 |
| -lt | 小于 |
| -gt | 大于 |
| -approx | 约等于 |
| -bor | 按位或运算 |
| -band | 按位与运算 |
| -recursivematch | 递归匹配 |
| -like | 像(通配符匹配) |
| -notlike | 不像 |
| -and | 布尔与 |
| -or | 布尔或 |
| -not | 布尔非 |
1.4.3. 过滤属性
过滤器可以用大括号、单引号、圆括号或双引号包裹。例如,下面这个使用 Get-ADUser 的简单搜索过滤器,用于查找用户 Sally Jones 的相关信息
Get-ADUser -Filter "name -eq 'sally jones'"
Get-ADUser -Filter {name -eq 'sally jones'}
Get-ADUser -Filter 'name -eq "sally jones"'
如上所示,属性值sally jones 可以用单引号或双引号括起来。星号( * )用作通配符。
使用通配符的命令 Get-ADUser -filter {name -like "joe*"} 会返回所有名字以 joe (如 joe、joel 等)开头的域用户。在使用过滤器时,某些字符必须进行转义:
| 字符 | 转义为 | 注 |
|---|---|---|
| “ | `” | 仅当数据被包含在双引号内时才需要。 |
| ‘ | \’ 或 ’ | 仅当数据被单引号括起来时才需要。 |
| NUL | \00 或 "\00" | 标准 LDAP 转义序列。 |
| | | \5c | 标准 LDAP 转义序列。 |
| * | \2a | 在 -eq 和 -ne 比较中会自动转义。若需通配符匹配,请使用 -like 和 -notlike。 |
| ( | /28 | 已自动转义。 |
| ) | /29 | 已自动转义。 |
| / | /2f | 已自动转义。 |
