
¿Cómo puedo ver la consulta LDAP ejecutada por Get-ADUser?entre bastidores, es decir. este comando
Get-ADUser -Filter * -Properties * | Where { $_.Enabled -eq $True } | Where { $_.PasswordNeverExpires -eq $False } | Where { $_.PasswordExpired -eq $False }
Me gustaría saber la consulta LDAP exacta enviada a los servidores de Active Directory.
Editar: Estoy intentando convertir algunos scripts de Powershell a Python, por lo tanto, necesito una consulta LDAP sin formato que pueda enviar a python-ldap.
Edit2: El Centro administrativo de Active Directory tiene una función interesante para aprender consultas LDAP. En la búsqueda global puede crear consultas utilizando palabras clave y marcando casillas de verificación, y luego haciendo clic enConvertir a LDAP. Disfrute de una consulta LDAP agradable y compleja.
Respuesta1
El ActiveDirectory
módulo tiene una lógica inteligente que calcula propiedades "populares", como si una cuenta de usuario está configurada Enabled
o la ha PasswordNeverExpires
configurado y las presenta como atributos normales.
Internamente, se derivan de atributos de cuenta reales comouserAccountControl
y pwdLastSet
.
Configuraciones de la cuenta
userAccountControl
es un campo de bits y contiene una larga lista de configuraciones relacionadas con la seguridad de la cuenta, como "El usuario no puede cambiar la contraseña" y la cuenta "Desactivada".
La implementación LDAP de Microsoft le permite filtrar dicho atributo con operadores bit a bit, identificados por un Identificador de objeto (OID):
LDAP_MATCHING_RULE_BIT_AND: 1.2.840.113556.1.4.803
LDAP_MATCHING_RULE_BIT_OR : 1.2.840.113556.1.4.804
Para buscar Disabled
cuentas, podemos utilizar la siguiente sintaxis de filtro:
(&(userAccountControl:1.2.840.113556.1.4.803:=2))
Como siempre, puedes negar una expresión ldap con !
, en este ejemplo recuperando todas Enabled
las cuentas:
(!(userAccountControl:1.2.840.113556.1.4.803:=2))
Asimismo, una configuración llamada DONT_EXPIRE_PASSWORD
tiene valor 65536 (0x10000), y podemos encontrar estas cuentas con:
(&(userAccountControl:1.2.840.113556.1.4.803:=65536))
Caducidad de la contraseña
Calcular la caducidad de la contraseña esun poco más complicado. Para ayudar a los desarrolladores e integradores, Microsoft ha implementado un atributo dinámico llamadomsDS-User-Account-Control-Computed
.
msDS-User-Account-Control-Computed
devuelve de forma transparente el mismo valor que userAccountControl
, pero con la adición de los siguientes bits, calculados sobre la marcha en el momento de la búsqueda:
UF_LOCKOUT 0x0010
UF_PASSWORD_EXPIRED 0x800000
UF_PARTIAL_SECRETS_ACCOUNT 0x4000000
UF_USE_AES_KEYS 0x8000000
No lo he probado, pero si la memoria no me falla, esto debería ayudarte.seguramenteidentifique cuentas con contraseñas caducadas con este filtro :
(&(msDS-User-Account-Control-Computed:1.2.840.113556.1.4.803:=8388608))
Desafortunadamente no puedes usar atributos construidos en los filtros de consulta LDAP, así que lo que tendrás que hacer es filtrar por las dos primeras declaraciones:
(&(!userAccountControl:1.2.840.113556.1.4.803:=2)(!userAccountControl:1.2.840.113556.1.4.803:=65536))
Asegúrese de solicitar el msDS-User-Account-Control-Computed
valor al servidor de directorio y luego realice su máscara AND bit a bit en los resultados, en el lado del cliente.
Respuesta2
Si realmente desea saber qué consultas LDAP exactas realizan los cmdlets de Powershell, puede descompilarlas utilizando DotPeek, utilizando el método que describo aquí:
https://www.myotherpcisacloud.com/post/2013/07/08/Taking-a-Peek-Inside-Powershell-Cmdlets.aspx
Úselo $(Get-Command Get-ADUser).DLL
para ver desde qué DLL se importa el cmdlet. Luego use Trace-Command
para ver el nombre del método dentro de la DLL que llama Get-ADUser
.
Trace-Command -Name CommandDiscovery -Expression { Get-ADUser bob } -PSHost
Ahora use JetBrains DotPeek para descompilar esa DLL y observe el código usted mismo.
Alternativamente, en lugar de pasar por todo ese lío, ¿por qué no haces esto?
Get-ADUser -LDAPFilter "(objectCategory=person)"
Y ahora sabe (y tiene control sobre) exactamente qué consulta LDAP está utilizando.
Respuesta3
Creo que tendrás más suerte si pasas algún tiempo aprendiendo sobre elEsquema ADy crear consultas usted mismo, en lugar de intentar aplicar ingeniería inversa a las propias herramientas de Microsoft. AD es un directorio LDAP bastante sencillo al que generalmente se aplicarán artículos de referencia que hablan sobre LDAP. Allásonalgunas cosas raras comocampos de bitsenatributos heredados de Windows NT 4.0que son bastante importantes para consultas de tipo administrador de sistemas, por ejemplo.