Skip to content

PowerView — Enumerating AD Users

Conteo y exploración inicial

c
# Contar usuarios del dominio
(Get-DomainUser).count
(Get-DomainUser -Domain INLANEFREIGHT.LOCAL).count

# Ver ayuda de un comando en SharpView
.\SharpView.exe Get-DomainUser -Help

Propiedades clave de un usuario

c
Get-DomainUser -Identity harry.jones -Domain inlanefreight.local | Select-Object -Property name,samaccountname,description,memberof,whencreated,pwdlastset,lastlogontimestamp,accountexpires,admincount,userprincipalname,serviceprincipalname,mail,useraccountcontrol

Exportar todos los usuarios a CSV

c
Get-DomainUser * -Domain inlanefreight.local | Select-Object -Property name,samaccountname,description,memberof,whencreated,pwdlastset,lastlogontimestamp,accountexpires,admincount,userprincipalname,serviceprincipalname,mail,useraccountcontrol | Export-Csv .\inlanefreight_users.csv -NoTypeInformation

Útil para procesar todo el dominio de una vez y trabajar offline con los datos.


Búsquedas específicas por atributos de seguridad

ASREPRoasteables

c
.\SharpView.exe Get-DomainUser -KerberosPreauthNotRequired -Properties samaccountname,useraccountcontrol,memberof
Get-DomainUser -PreauthNotRequired | select samaccountname,useraccountcontrol,memberof

Constrained Delegation (TrustedToAuth)

c
.\SharpView.exe Get-DomainUser -TrustedToAuth -Properties samaccountname,useraccountcontrol,memberof
Get-DomainUser -TrustedToAuth | select samaccountname,memberof

Unconstrained Delegation

c
.\SharpView.exe Get-DomainUser -LDAPFilter "(userAccountControl:1.2.840.113556.1.4.803:=524288)"
Get-DomainUser -LDAPFilter "(userAccountControl:1.2.840.113556.1.4.803:=524288)" | select samaccountname,memberof

Contraseñas en campo description

c
Get-DomainUser -Properties samaccountname,description | Where {$_.description -ne $null}

Es muy común encontrar contraseñas o notas sensibles en este campo ya que es visible para todos los usuarios del dominio.

Usuarios con SPN (Kerberoasteables)

c
.\SharpView.exe Get-DomainUser -SPN -Properties samaccountname,memberof,serviceprincipalname
Get-DomainUser * -spn | select samaccountname,serviceprincipalname

Usuarios admin con SPN (alto impacto)

c
Get-DomainUser -AdminCount -SPN | select samaccountname,serviceprincipalname

Combinar adminCount=1 con SPN es el escenario ideal para Kerberoasting porque crackear el hash te da credenciales de una cuenta privilegiada.

Usuarios con SPN en otro dominio (cross-forest Kerberoasting)

c
Get-DomainUser -SPN -Domain freightlogistics.local | select samaccountname,memberof,serviceprincipalname | fl

Usuarios foráneos en grupos del dominio actual

c
# Buscar grupos con miembros de otros dominios
Find-ForeignGroup

# Resolver el SID del miembro foráneo a nombre legible
Convert-SidToName S-1-5-21-888139820-103978830-333442103-1602

Si un usuario de otro dominio aparece como miembro de un grupo privilegiado en tu dominio, al hacer DCSync obtienes sus credenciales y puedes autenticarte al dominio remoto directamente.


Análisis de fechas de contraseñas — Password Spray Intel

Antes de lanzar un spray es crítico analizar pwdlastset para no bloquear cuentas y maximizar resultados.

c
# Ver todos los pwdlastset ordenados de más antiguo a más reciente
Get-DomainUser -Properties samaccountname,pwdlastset,lastlogon -Domain InlaneFreight.local | select samaccountname,pwdlastset,lastlogon | Sort-Object -Property pwdlastset

# Cuentas con contraseña sin cambiar en más de 90 días
Get-DomainUser -Properties samaccountname,pwdlastset,lastlogon -Domain InlaneFreight.local | select samaccountname,pwdlastset,lastlogon | where { $_.pwdlastset -lt (Get-Date).addDays(-90) }

# Más de 365 días
Get-DomainUser -Properties samaccountname,pwdlastset,lastlogon -Domain InlaneFreight.local | select samaccountname,pwdlastset,lastlogon | where { $_.pwdlastset -lt (Get-Date).addDays(-365) }

Patrones que indican oportunidades:

Varias cuentas con pwdlastset en la misma fecha y hora indican reset masivo por Help Desk, probablemente con la misma contraseña temporal como Empresa2023! o Welcome1.

Contraseñas con más de 1-2 años sin cambiar suelen ser débiles o seguir un patrón predecible. Son las primeras a probar antes de un spray masivo.

Si el administrador cambió su cuenta personal y su cuenta admin en fechas similares, probablemente usan la misma contraseña.

Cuentas con lastlogon muy antiguo o nunca usadas pueden ser cuentas de servicio olvidadas con contraseñas débiles o por defecto.