Noções básicas de escalonamento de privilégios do Windows

Decidi por mim e por aqueles que considerariam útil coletar tudo o que sei, mas não me lembro do tópico neste artigo. Compartilhe dicas. A principal fonte deste artigo é essa .

Traduzi livremente e acrescentei um pouco de mim mesmo, o que reuni e aprendi de outras fontes.

Em geral, aqui estão algumas maneiras de nos ajudar a alcançar nossa meta de escalação de privilégios.

O ponto de partida para este breve artigo é um shell sem privilégios (conta). Talvez tenhamos utilizado uma exploração ou realizado um ataque e conseguido esse shell.

Basicamente, no momento inicial, não entendemos a máquina: o que faz, a que está conectada, a qual nível de privilégios temos, ou mesmo que sistema operacional é.

Primeiro, precisamos obter as informações necessárias para entender onde estamos e o que temos:

systeminfo | findstr /B /C:" " /C:" " 

Este comando permite determinar, como você pode ver, o nome e a versão do sistema operacional. Você pode executá-lo sem parâmetros, então a saída do comando será mais completa, mas isso é suficiente para nós.

Em seguida, é importante descobrir o nome da máquina e o nome de usuário com o qual estamos conectados.

  • hostname é o nome de usuário.
  • eco% nome de usuário% - nome de usuário.

A seguir, vamos ver quais usuários ainda estão neste host e obter informações mais detalhadas sobre seus usuários.

  • usuários da rede - outros usuários
  • net user user1 - informações detalhadas sobre o usuário, onde user1 é o nome do seu usuário.

Depois de receber informações sobre a conta, veremos informações sobre a interação de rede deste host.

Primeiro, dê uma olhada nas interfaces disponíveis e na tabela de roteamento.

  • ipconfig / all - informações sobre as interfaces disponíveis.
  • impressão de rota - tabela de roteamento
  • arp -A - tabela de entradas arp

A seguir, veremos as conexões de rede ativas e as regras de firewall.

  • netstat -ano - conexões de rede ativas.

-a - iniciar com este parâmetro exibe todas as conexões TCP ativas, bem como as portas TCP e UDP ouvidas pelo sistema;
-n - o parâmetro permite mostrar conexões TCP ativas com endereços e números de porta;
-o - igual à chave anterior, exibe conexões TCP ativas, mas os códigos de processo são adicionados às estatísticas, já é possível determinar exatamente qual aplicativo usa a conexão.

  • netsh firewall show state - status do firewall
  • netsh firewall show config - configuração de firewall

Por fim, examinamos brevemente o que funciona em um host comprometido: tarefas agendadas, processos em execução, serviços em execução e drivers instalados.

 schtasks /query /fo LIST /v 

onde
/ query - Exibe dados sobre todas as tarefas agendadas,
/ fo LIST - Lista a saída.
/ v - Imprimir detalhes do trabalho.

O comando a seguir associa processos em execução a serviços em execução.

 tasklist /SVC 

onde
/ SVC - Serviços de mapeamento para cada processo.

Veja também uma lista de serviços do Windows em execução.

 net start 

Também é útil ver informações sobre os drivers de um sistema comprometido.

 DRIVERQUERY 

Em seguida, quero mencionar provavelmente o comando mais útil do Windows - wmic. O comando WMIC (Comando da Instrumentação de Gerenciamento do Windows) é usado para obter informações sobre o hardware e o sistema, gerenciar processos e seus componentes e alterar as configurações usando os recursos da Instrumentação de Gerenciamento do Windows (WMI). Boa descrição

Infelizmente, algumas configurações do Windows não permitem o acesso ao WMIC por padrão, se o usuário não for membro do grupo Administradores (o que é realmente uma boa ideia). Qualquer versão do XP não permitia acesso ao WMIC a partir de uma conta não privilegiada.

Por outro lado, o Windows 7 Professional e o Windows 8 Enterprise permitiram que usuários com privilégios baixos usassem o WMIC por padrão.

Como de costume - parâmetros do programa:

 wmic /? 

Um bom script para coletar informações através do wmic.

Antes de prosseguir, vale a pena percorrer as informações coletadas. Também vale a pena prestar atenção nos patches instalados no sistema, pois qualquer informação sobre os orifícios no sistema nos dará suporte adicional para aumentar nossos privilégios. O HotFix pode procurar vulnerabilidades de escalação de privilégios.

A seguir, consideraremos uma instalação silenciosa. Se for necessário instalar e configurar uma grande frota de máquinas, como regra geral, o pessoal técnico não passará de uma máquina para outra para configurar cada uma. Existem várias soluções para instalação autônoma. Não é tão importante para nós o que são esses métodos e como eles funcionam, mas o importante é que eles deixem os arquivos de configuração usados ​​para o processo de instalação que contêm muitas informações confidenciais, como a chave do produto do sistema operacional e a senha do administrador. O que mais nos interessa é a senha de administrador, que podemos usar para aumentar nossos privilégios.

Como regra, estes são os seguintes diretórios:

  • c: \ sysprep.inf
  • c: \ sysprep \ sysprep.xml
  • % WINDIR% \ Pantera \ Unattend \ Unattended.xml
  • % WINDIR% \ Panther \ Unattended.xml

Mas vale a pena conferir todo o sistema.

Esses arquivos contêm senhas em texto não criptografado ou codificado em BASE64.
Exemplos:

Sysprep.inf - senha em texto não criptografado.

"

Sysprep.xml - senha codificada em base64.

"

Unattended.xml - senha codificada em base64.



Além disso, para hosts conectados ao domínio, você pode procurar o arquivo Group.xml, que contém a senha criptografada AES256, mas que pode ser descriptografada, porque a chave é publicada no msdn (https://msdn.microsoft.com/en-us/library/cc422924.aspx) e em outras fontes. Mas esse é o caso se a política de criar usuários locais em hosts ou, por exemplo, definir uma senha para um administrador local for usada.

Por exemplo, eu tenho aqui:



Depois de aberto, procuramos o parâmetro "cpassword".



Em seguida, você precisa descriptografar esta sequência. Usamos, por exemplo, CrypTool . Primeiro, decodifique o Base64.
Os recursos da Base64 são que seu comprimento deve ser múltiplo de 4. Portanto, consideramos blocos de 4 e, se não houver caracteres suficientes no último bloco, adicionamos os caracteres ausentes com "=".
Eu tenho 2 "=".



Em seguida, descriptografamos. Usando a tecla acima.



Removemos os pontos extras que separam os caracteres e obtemos a senha.

Além do Group.xml, aqui estão alguns outros arquivos de preferências de política que podem ter um conjunto adicional de atributos do cPassword:

  • Services \ Services.xml
  • ScheduledTasks \ ScheduledTasks.xml
  • Printers \ Printers.xml
  • Drives \ Drives.xml
  • DataSources \ DataSources.xml

No entanto, todos gostamos de soluções automatizadas, para que possamos chegar à linha de chegada o mais rápido possível. Existem duas opções principais aqui, dependendo do tipo de shell / acesso que temos. Há um módulo metasploit que pode ser executado por meio de uma sessão estabelecida (https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp) ou você pode usar Get-GPPPassword, que faz parte do PowerSploit .

Ok, em seguida. Procuraremos o estranho parâmetro de registro "AlwaysInstallElevated". Essa opção permite que usuários sem privilégios instalem arquivos .msi do NT AUTHORITY \ SYSTEM.

Para poder usar isso, precisamos verificar se as duas chaves do Registro estão instaladas e, se houver, podemos obter um shell do SISTEMA. Verifique:

 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

O Metasploit inclui um módulo especial exploit / windows / local / always_install_elevated, que cria um arquivo MSI com um arquivo executável especial embutido nele, que é extraído e executado pelo instalador com privilégios de sistema. Após sua execução, o arquivo msi interrompe a instalação para impedir o registro de ações no sistema. Além disso, se você iniciar a instalação com a opção / quiet, nem receberá um erro.

Bem, alguns comandos úteis de pesquisa no sistema:

O comando abaixo procurará no sistema de arquivos por nomes de arquivos contendo palavras-chave específicas. Você pode especificar qualquer número de palavras-chave.

 dir /s *pass* == *cred* == *vnc* == *.config* 

Procurando tipos de arquivos específicos por palavra-chave, este comando pode gerar muita saída.

 findstr /si password *.xml *.ini *.txt 

Da mesma forma, os dois comandos abaixo podem ser usados ​​para saudar o registro por palavras-chave, neste caso, "senha".

 reg query HKLM /f password /t REG_SZ /s 

 reg query HKCU /f password /t REG_SZ /s 

No momento, já temos o suficiente para iniciar o sistema. Mas há mais alguns ataques direcionados para obter o resultado desejado: veremos os serviços e permissões do Windows para arquivos e pastas. Nosso objetivo aqui é usar permissões fracas para aprimorar os privilégios da sessão.

Verificaremos muitos direitos de acesso, accesschk.exe, que é uma ferramenta do Microsoft Sysinternals Suite, nos ajudará com isso. O Microsoft Sysinternals contém muitas ferramentas excelentes. O pacote pode ser baixado no site de tecnologia da Microsoft (https://docs.microsoft.com/ru-ru/sysinternals/downloads/sysinternals-suite).

Podemos verificar o nível de privilégio necessário para cada serviço usando accesschk.

Podemos ver as permissões que cada nível de usuário possui.



O Accesschk pode verificar automaticamente se temos acesso de gravação a um serviço do Windows com um nível de usuário específico. Como regra, como um usuário com baixos privilégios, queremos verificar os "Usuários". Certifique-se de verificar a quais grupos de usuários você pertence.

-c O nome é um serviço do Windows, por exemplo ssdpsrv (especifique "*" para exibir todos os serviços)
-d Processa apenas diretórios
-e Exibe apenas níveis de integridade especificados explicitamente (somente Windows Vista)
-k O nome é uma chave de registro, por exemplo, hklm \ software
-n Exibe apenas objetos que não possuem regras de acesso
-p O nome ou identificador do processo (PID) é especificado como o nome, por exemplo cmd.exe (especifique "*" como o nome para exibir todos os processos)
-q Omitir cabeçalho
-r Imprime apenas objetos que têm acesso de leitura
-s Processamento recursivo
-v Imprime informações detalhadas
-w Listar apenas objetos que têm acesso de gravação



Há também outro comando interessante:

 autorunsc.exe -a | findstr /n /R "File\ not\ found" 

Permite encontrar uma entrada de registro sobre um arquivo que foi iniciado automaticamente, mas que já está ausente do sistema. O registro poderá permanecer se, por exemplo, o serviço for excluído incorretamente. A cada inicialização, o sistema tenta executar esse arquivo sem êxito. Você também pode tirar proveito dessa situação para expandir sua autoridade. Apenas substitua este arquivo pelo nosso.

Em seguida, consideramos duas vulnerabilidades:

Primeiro: replique os resultados de um post escrito por Parvez da GreyHatHacker; “Elevando privilégios explorando permissões de pasta fracas” (http://www.greyhathacker.net/?p=738).

Este exemplo é um caso especial de seqüestro de dll. Os programas geralmente não podem funcionar por conta própria, eles têm muitos recursos que precisam conectar (principalmente dll, mas também seus próprios arquivos). Se um programa ou serviço baixa um arquivo de um diretório ao qual temos acesso de gravação, podemos abusar dele para iniciar um shell com privilégios sob os quais o programa é executado.

Normalmente, um aplicativo Windows usa caminhos de pesquisa predefinidos para encontrar a dll e verifica esses caminhos em uma ordem específica. O sequestro de DLL geralmente ocorre colocando DLLs maliciosos ao longo de um desses caminhos. Esse problema pode ser corrigido indicando para o aplicativo caminhos absolutos para a dll necessária.

Ordem de pesquisa DLL:

  1. O diretório a partir do qual o aplicativo está sendo executado
  2. Diretório do sistema de 32 bits (C: \ Windows \ System32)
  3. Diretório do sistema de 16 bits (C: \ Windows \ System)
  4. Diretório do Windows (C: \ Windows)
  5. Diretório de trabalho atual (CWD)
  6. Diretórios na variável de ambiente PATH (sistema e usuário)

Às vezes, os aplicativos tentam baixar arquivos DLL que estão faltando na máquina. Isso pode acontecer por vários motivos, por exemplo, se a biblioteca dll for necessária apenas para determinados plug-ins ou componentes que não estão instalados. Nesse caso, Parvez descobriu que alguns serviços do Windows estão tentando carregar bibliotecas DLL que não existem nas configurações padrão.

Como a dll não existe, acabamos passando por todos os caminhos de pesquisa. Como usuário com um nível de privilégio baixo, temos poucas chances de colocar uma dll maliciosa nos itens 1 a 4, 5. Mas se tivermos acesso de gravação a qualquer um dos diretórios, nossas chances de vitória são grandes.

Vamos ver como ele funciona na prática. No nosso exemplo, usaremos o serviço IKEEXT (IPSec IKE e AuthIP key modules) que tenta fazer o download do wlbsctrl.dll.

Qualquer diretório em "C: \" fornecerá acesso de gravação para usuários autenticados, isso nos dá uma chance.

 C:\Users\user1\Desktop> accesschk.exe -dqv "C:\Python27" 

 C:\Python27 Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE SYNCHRONIZE READ_CONTROL RW NT AUTHORITY\Authenticated Users FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL 

 C:\Users\user1\Desktop> icacls "C:\Python27" 

 C:\Python27 BUILTIN\Administrators:(ID)F BUILTIN\Administrators:(OI)(CI)(IO)(ID)F NT AUTHORITY\SYSTEM:(ID)F NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(ID)F BUILTIN\Users:(OI)(CI)(ID)R NT AUTHORITY\Authenticated Users:(ID)C NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(ID)C 

F - acesso completo.
(OI) - herança por objetos.
(CI) - herança por contêineres.
(IO) - apenas herança.
(NP) - uma proibição da distribuição de herança.
(I) - herda permissões do contêiner pai.

Antes de prosseguir com a ação, você deve verificar o status do serviço IKEEXT. Nesse caso, podemos ver que está definido como "AUTO_START"!

 sc qc IKEEXT 

 [SC] QueryServiceConfig SUCCESS SERVICE_NAME: IKEEXT TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : IKE and AuthIP IPsec Keying Modules DEPENDENCIES : BFE SERVICE_START_NAME : LocalSystem 

Agora sabemos que temos as condições necessárias e podemos criar uma dll maliciosa e interceptar o shell!

Usamos Metasploit -> msfvenom, por exemplo.



Depois de transferir o evil.dll para o computador de destino, tudo o que precisamos fazer é renomeá-lo para wlbsctrl.dll e movê-lo para "C: \ Python27". Feito isso, precisamos aguardar pacientemente a reinicialização da máquina (ou podemos tentar forçar a reinicialização) e obteremos o shell do sistema.

 copy evil.dll C:\Python27\wlbsctrl.dll 

Depois disso, resta apenas aguardar a reinicialização do sistema.

Para o nosso último exemplo, consideraremos as tarefas planejadas. Vou descrever o princípio, porque todos podem ter casos diferentes.

Encontramos o processo, serviço, aplicativo iniciado pelo agendador de tarefas do SYSTEM.
Verificamos os direitos de acesso à pasta em que nosso destino está localizado.

 accesschk.exe -dqv "__" 

É claro que esse é um problema sério de configuração, mas ainda pior é o fato de qualquer usuário autenticado (usuário autenticado) ter acesso de gravação a essa pasta. Neste exemplo, podemos simplesmente substituir o executável binário pelo arquivo gerado pelo metasploit.

Pode ser codificado opcionalmente.



Agora, resta apenas fazer o download do arquivo executável malicioso e substituí-lo na pasta do arquivo executável. Feito isso, podemos ir para a cama com segurança e fazer uma caminhada sistêmica de manhã cedo.

Esses dois exemplos devem nos dar uma idéia das vulnerabilidades que devem ser procuradas ao considerar permissões para arquivos e pastas. Levará algum tempo para aprender todos os caminhos do caminho do bin para serviços do Windows, tarefas agendadas e tarefas de execução automática.

Por fim, algumas dicas para usar o accesschk.exe.

Encontre todas as permissões fracas para pastas no disco.

 accesschk.exe -uwdqs Users c:\ accesschk.exe -uwdqs "Authenticated Users" c:\ 

Encontre todas as permissões fracas para arquivos no disco.

 accesschk.exe -uwqs Users c:\*.* accesschk.exe -uwqs "Authenticated Users" c:\*.* 

Como tudo.

Source: https://habr.com/ru/post/pt418441/


All Articles