Skip to content

PowerView — Enumerating AD Computers

Enumerar computadoras del dominio

c
# Ver ayuda
.\SharpView.exe Get-DomainComputer -Help

# Propiedades clave de todas las computadoras
.\SharpView.exe Get-DomainComputer -Properties dnshostname,operatingsystem,lastlogontimestamp,useraccountcontrol
Get-DomainComputer | select dnshostname,operatingsystem,lastlogontimestamp,useraccountcontrol

# Contar hosts en el dominio
(Get-DomainComputer).count

# Exportar a CSV para análisis offline
Get-DomainComputer -Properties dnshostname,operatingsystem,lastlogontimestamp,useraccountcontrol | Export-Csv .\inlanefreight_computers.csv -NoTypeInformation

# Computadora específica con todos sus atributos
Get-DomainComputer -Identity EXCHG01 -Properties *
Get-DomainComputer -Identity WS01 | select dnshostname,distinguishedname,objectguid

Atributos clave para identificar objetivos

lastlogontimestamp — si tiene más de 90 días el host probablemente no ha sido encendido y le faltan parches de OS y aplicaciones. Combinarlo con el OS para priorizar objetivos.

operatingsystem — sistemas más antiguos como Windows 7 o Server 2008 son candidatos a EternalBlue y otros exploits. Tienen menos capacidades de logging y AV. Windows 10 Professional no tiene Credential Guard por defecto a diferencia de Enterprise, lo que lo hace más interesante para dumpear credenciales.

whencreated — cuanto más antiguo el host, más probable que se desvíe del build estándar. Puede tener contraseñas de admin local más débiles, más admins locales, software vulnerable o más datos.

useraccountcontrol — flags como TRUSTED_FOR_DELEGATION o TRUSTED_TO_AUTH_FOR_DELEGATION indican vectores de ataque de Kerberos.


Delegación en computadoras

Unconstrained Delegation

c
.\SharpView.exe Get-DomainComputer -Unconstrained -Properties dnshostname,useraccountcontrol
Get-DomainComputer -Unconstrained | select dnshostname,useraccountcontrol

Los DCs siempre aparecen aquí por diseño. Lo interesante es encontrar otros hosts con este flag ya que si consigues SYSTEM en ese host puedes capturar TGTs de cualquier usuario que se autentique a él.

Constrained Delegation (TrustedToAuth)

c
Get-DomainComputer -TrustedToAuth | select dnshostname,useraccountcontrol
Get-DomainComputer -TrustedToAuth | select dnshostname,msds-allowedtodelegateto

Hosts con TRUSTED_TO_AUTH_FOR_DELEGATION pueden impersonar a usuarios para autenticarse a servicios específicos. Útil para ataques de Kerberos delegation.


Búsquedas específicas

c
# Buscar por sistema operativo
Get-DomainComputer -OperatingSystem "*Server 2008*" | select dnshostname,operatingsystem
Get-DomainComputer -OperatingSystem "*Windows 7*" | select dnshostname,operatingsystem

# Buscar por nombre parcial
Get-DomainComputer -Filter {Name -like "SQL*"} | select dnshostname
Get-DomainComputer -LDAPFilter "(cn=SQL*)" | select dnshostname

# Buscar computadoras con SPN específico
Get-DomainComputer -SPN "MSSQLSvc*" | select dnshostname,serviceprincipalname

# Ver a qué OU pertenece una computadora
Get-DomainComputer -Identity WS01 | select dnshostname,distinguishedname

El distinguishedname te dice la OU en la que está el host. Se lee de izquierda a derecha: primero el CN del host, luego las OUs de más específica a más general, al final el dominio.


Verificar acceso en hosts

c
# Verificar si tenemos admin local en un host específico
Test-AdminAccess -ComputerName SQL01
Test-AdminAccess -ComputerName WS01

# Buscar en qué hosts tenemos admin local en todo el dominio
Find-LocalAdminAccess

Flujo recomendado al enumerar computadoras

c
# 1. Ver todos los hosts con propiedades clave
Get-DomainComputer | select dnshostname,operatingsystem,lastlogontimestamp,useraccountcontrol

# 2. Identificar hosts con OS desactualizados
Get-DomainComputer -OperatingSystem "*2008*" | select dnshostname,operatingsystem

# 3. Identificar hosts con lastlogon viejo (posiblemente no parcheados)
Get-DomainComputer | where {$_.lastlogontimestamp -lt (Get-Date).addDays(-90)} | select dnshostname,lastlogontimestamp

# 4. Buscar Unconstrained Delegation
Get-DomainComputer -Unconstrained | select dnshostname

# 5. Buscar Constrained Delegation
Get-DomainComputer -TrustedToAuth | select dnshostname,msds-allowedtodelegateto

# 6. Verificar acceso admin
Find-LocalAdminAccess