AD ACL Enum
Introducción
PowerView es una herramienta de PowerShell para obtener conocimiento situacional de la red en dominios de Windows. Contiene un conjunto de reemplazos en PowerShell para varios comandos de Windows “net *”, que utilizan hooks de AD de PowerShell y funciones subyacentes de la API de Win32 para realizar funcionalidades útiles de dominio de Windows.
Comandos de PowerView
Find-InterestingDomainAcl
Encuentra ACLs de objetos en el dominio actual (o especificado) con derechos de modificación establecidos en objetos no integrados.
Import-Module .\PowerView.ps1
Find-InterestingDomainAcl
Ejemplo:
- Encuentra ACLs interesantes en el dominio actual.
Find-InterestingDomainAcl
Targeted Enum
$sid = Convert-NameToSid USER
Get-DomainObjectACL -Identity * | ? {$_.SecurityIdentifier -eq $sid}
Mapeo de Valor GUID
- Example:
$guid= "00299570-246d-11d0-a768-00aa006e0529"
Get-ADObject -SearchBase "CN=Extended-Rights,$((Get-ADRootDSE).ConfigurationNamingContext)" -Filter {ObjectClass -like 'ControlAccessRight'} -Properties * |Select Name,DisplayName,DistinguishedName,rightsGuid| ?{$_.rightsGuid -eq $guid} | fl
-ResolverGUID
flagGet-DomainObjectACL -ResolveGUIDs -Identity * | ? {$_.SecurityIdentifier -eq $sid}
Creación de lista de usuarios del dominio AD
Get-ADUser -Filter * | Select-Object -ExpandProperty SamAccountName > ad_users.txt
Chequeo de cada usuario
foreach($line in [System.IO.File]::ReadLines("C:\Users\SOME-USER\Desktop\ad_users.txt")) {get-acl "AD:\$(Get-ADUser $line)" | Select-Object Path -ExpandProperty Access | Where-Object {$_.IdentityReference -match 'DOMAIN\\USER'}}
Ejemplo:
- Enumerando derechos del usuario “damundsen”
$sid2 = Convert-NameToSid damundsen Get-DomainObjectACL -ResolveGUIDs -Identity * | ? {$_.SecurityIdentifier -eq $sid2} -Verbose
AceType : AccessAllowed ObjectDN : CN=Help Desk Level 1,OU=Security Groups,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL ActiveDirectoryRights : ListChildren, ReadProperty, GenericWrite OpaqueLength : 0 ObjectSID : S-1-5-21-3842939050-3880317879-2865463114-4022 InheritanceFlags : ContainerInherit BinaryLength : 36 IsInherited : False IsCallback : False PropagationFlags : None SecurityIdentifier : S-1-5-21-3842939050-3880317879-2865463114-1176 AccessMask : 131132 AuditFlags : None AceFlags : ContainerInherit AceQualifier : AccessAllowed
- Este usuario tiene GenericWrite sobre el grupo Help Desk Level 1, esto significa que podemos agregar a cualquier usuario a este grupo con este usuario y también que si podemos agregar un usuario a este grupo va a tomar los privilegios de GenericWrite.
- Podemos chequear si este grupo está “anidado” a otro grupo.
Get-DomainGroup -Identity "Help Desk Level 1" | select memberof
memberof -------- CN=Information Technology,OU=Security Groups,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL
Bloodhound
- También se puede hacer todo esto mucho más fácil con Bloodhound en vez de con Powershell.
Funciones adicionales de PowerView
Export-PowerViewCSV
Exporta objetos a un archivo CSV de manera segura para hilos.
Get-DomainUser | Export-PowerViewCSV -Path "users.csv"
Get-DomainSPNTicket
Solicita un ticket de servicio Kerberos para un SPN especificado.
Get-DomainSPNTicket -SPN "HTTP/web.testlab.local"
Get-DomainUser -SPN | Get-DomainSPNTicket -OutputFormat Hashcat
Get-DomainTrust
Retorna todas las relaciones de confianza de dominio para el dominio actual o un dominio especificado.
Get-DomainTrust
Get-ForestTrust
Retorna todas las relaciones de confianza de bosque para el bosque actual o un bosque especificado.
Get-ForestTrust
Get-PathAcl
Enumera las ACL para una ruta de archivo especificada.
Get-PathAcl "\\SERVER\Share"
Find-DomainUserLocation
Encuentra máquinas de dominio donde usuarios específicos están conectados.
Find-DomainUserLocation -UserName "jdoe"
Find-DomainShare
Encuentra comparticiones accesibles en máquinas de dominio.
Find-DomainShare
Get-DomainGroupMember
Retorna los miembros de un grupo de dominio específico.
Get-DomainGroupMember -Identity "Domain Admins"