Enumeración del dominio
Módulo ActiveDirectory (sin dependencias de RSAT): github.com/samratashok/ADModule.
Para reutilizar el módulo AD en sesiones futuras, dejar la DLL Microsoft.ActiveDirectory.Management.dll en C:\Windows\Microsoft.NET\assembly\GAC_64\Microsoft.ActiveDirectory.Management\ y el módulo ActiveDirectory.psd1 en C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory\.
Permisos y tipos de objeto de AD interesantes para un atacante:
- GenericAll: derechos completos sobre el objeto (agregar usuarios a un grupo o restablecer la contraseña).
- GenericWrite: actualizar atributos del objeto (p. ej. el script de inicio de sesión).
- WriteOwner: cambiar el propietario del objeto a un principal controlado para tomar control de él.
- WriteDACL: modificar las ACEs del objeto y obtener control total sobre él.
- AllExtendedRights: agregar usuarios a un grupo o restablecer contraseñas.
- ForceChangePassword: cambiar la contraseña del usuario.
- Self (Self-Membership): agregarse a un grupo.
Existen dos tipos de ACL:
- DACL (Discretionary Access-Control List): define los permisos que un usuario o grupo tiene sobre un objeto.
- SACL (System Access-Control List): registra los mensajes de auditoría de éxito y error al acceder a un objeto.
PowerView
Cargar el módulo:
. .\PowerView.ps1Información del dominio:
Get-DomainEnumeración de los usuarios:
Get-DomainUser -Properties samaccountname,serviceprincipalname,description,logonCountGrupos del dominio:
Get-DomainGroup | select NameGrupos del usuario actual:
Get-DomainGroup -UserName $env:usernameEquipos del dominio:
Get-DomainComputer -Domain <DOMAIN> | select -ExpandProperty dnshostnameSistemas operativos de los equipos:
Get-DomainComputer | select name, operatingsystemEquipos con delegación sin restricciones (descartar los DC):
Get-DomainComputer -TrustedForDelegation
Get-DomainComputer -TrustedForDelegation | Select-Object Name, DistinguishedName, OperatingSystemControladores de dominio:
Get-DomainController | select nameMiembros del grupo Domain Admins (recursivo):
Get-DomainGroupMember -Identity "Domain Admins" -RecurseNombre y SID de los miembros de Domain Admins:
Get-DomainGroupMember -Identity "Domain Admins" -Recurse -Domain <DOMAIN> | select membername,membersidMiembros del grupo Enterprise Admins:
Get-DomainGroupMember -Name "Enterprise Admins" -Domain <DOMAIN> | select membername,membersidRecursos compartidos en el dominio actual:
Invoke-ShareFinder -VerboseArchivos sensibles en hosts del dominio:
Invoke-FileFinder -VerboseFileservers del dominio:
Get-NetFileServerListar las OUs (nombre):
Get-DomainOU -Properties NameEquipos dentro de una OU:
$OU = Get-DomainOU -Identity "<OU_NAME>" -Properties DistinguishedName
Get-DomainComputer -SearchBase $OU.DistinguishedName -Properties *Nombres de las GPOs:
Get-DomainGPO | select displaynameGPOs aplicadas a un equipo:
Get-DomainGPO -ComputerName <SERVER_NAME>GPO aplicada a una OU:
$string = (Get-DomainOU -Identity <OU_NAME>).gplink; $gpoIdentity = [regex]::Match($string, '({.*?})').Value; Get-DomainGPO -Identity $gpoIdentityACLs configuradas para Domain Admins:
Get-DomainObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDsPermisos de modificación del usuario actual:
Get-DomainObjectAcl -SamAccountName $env:username -ResolveGUIDsACEs con permiso GenericAll sobre un usuario:
Get-DomainObjectAcl -SamAccountName <USERNAME> -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}ACLs interesantes asociadas a un grupo o usuario:
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match '<GROUP/USERNAME>'} | select ObjectDN,ActiveDirectoryRights,IdentityReferenceNameUsuarios con permisos de replicación (DCSync):
Get-DomainObjectAcl -SearchBase "DC=<CHILD_DOMAIN>,DC=<PARENT_DOMAIN>,DC=local" -SearchScope Base -ResolveGUIDs | ?{($_.ObjectAceType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll')} | ForEach-Object {$_ | Add-Member NoteProperty 'IdentityName' $(Convert-SidToName $_.SecurityIdentifier);$_} | ?{$_.IdentityName -match "<USERNAME>"}Módulo ActiveDirectory
Cargar el módulo (archivos en C:\Temp):
Set-Location C:\Temp
Import-Module .\Microsoft.ActiveDirectory.Management.dll
Import-Module .\ActiveDirectory.psd1Información del dominio:
Get-ADDomainInformación básica de todos los usuarios:
Get-ADUser -Filter * -Properties * | Select-Object SamAccountName, UserPrincipalName, ServicePrincipalName, SIDUsuarios con “password” en la descripción de la cuenta:
Get-ADUser -Filter {Description -like "*password*"} -Properties * | Select-Object SamAccountName, DescriptionUsuarios con un SID conocido (RID 500):
Get-ADUser -Filter * | Where-Object {$_.SID -like "*-500"}Grupos del dominio:
Get-ADGroup -Filter * | select NameGrupos del usuario actual:
Get-ADPrincipalGroupMembership -Identity $env:usernameEquipos y sus sistemas operativos:
Get-ADComputer -Filter * -Properties * | select name, operatingsystemEquipos con delegación sin restricciones:
Get-ADComputer -Filter {TrustedForDelegation -eq $true}Controladores de dominio:
Get-ADDomainControllerMiembros del grupo Domain Admins (recursivo):
Get-ADGroupMember -Identity "Domain Admins" -RecursiveListar las OUs:
Get-ADOrganizationalUnit -Filter * | Select-Object DistinguishedName, NameEquipos dentro de una OU:
Get-ADComputer -Filter * -Properties * -SearchBase "ou=<OU_NAME>,dc=<CHILD_DOMAIN>,dc=<PARENT_DOMAIN>,dc=local" | Select-Object CanonicalNameNombres de las GPOs:
Get-GPO -All | select displaynameEnlace de GPO aplicado a una OU:
(Get-ADOrganizationalUnit "ou=<OU_NAME>,dc=<PARENT_DOMAIN>,dc=local" -Properties *).gpLinkACEs del dominio:
(Get-Acl (Get-ADObject -Filter *)).Access