Windows Local Privilege Escalation
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Se você não sabe o que são Tokens de Acesso do Windows, leia a página a seguir antes de continuar:
Verifique a página a seguir para mais informações sobre ACLs - DACLs/SACLs/ACEs:
Se você não sabe o que são níveis de integridade no Windows, deve ler a página a seguir antes de continuar:
Existem diferentes coisas no Windows que podem impedir você de enumerar o sistema, executar executáveis ou até mesmo detectar suas atividades. Você deve ler a página a seguir e enumerar todos esses mecanismos de defesa antes de iniciar a enumeração de escalonamento de privilégios:
Verifique se a versão do Windows possui alguma vulnerabilidade conhecida (verifique também os patches aplicados).
Este site é útil para buscar informações detalhadas sobre vulnerabilidades de segurança da Microsoft. Este banco de dados possui mais de 4.700 vulnerabilidades de segurança, mostrando a superfície de ataque massiva que um ambiente Windows apresenta.
No sistema
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas tem watson embutido)
Localmente com informações do sistema
Repositórios do Github de exploits:
Alguma credencial/informação suculenta salva nas variáveis de ambiente?
Você pode aprender como ativar isso em https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
Os detalhes das execuções do pipeline do PowerShell são registrados, abrangendo comandos executados, invocações de comandos e partes de scripts. No entanto, detalhes completos da execução e resultados de saída podem não ser capturados.
Para habilitar isso, siga as instruções na seção "Transcript files" da documentação, optando por "Module Logging" em vez de "Powershell Transcription".
Para visualizar os últimos 15 eventos dos logs do PowersShell, você pode executar:
Um registro completo de atividade e conteúdo total da execução do script é capturado, garantindo que cada bloco de código seja documentado à medida que é executado. Esse processo preserva um histórico de auditoria abrangente de cada atividade, valioso para forense e análise de comportamento malicioso. Ao documentar toda a atividade no momento da execução, são fornecidas informações detalhadas sobre o processo.
Os eventos de registro para o Script Block podem ser encontrados no Visualizador de Eventos do Windows no caminho: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. Para visualizar os últimos 20 eventos, você pode usar:
Você pode comprometer o sistema se as atualizações não forem solicitadas usando httpS mas http.
Você começa verificando se a rede usa uma atualização WSUS não SSL executando o seguinte:
Se você receber uma resposta como:
E se HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
for igual a 1
.
Então, é explorável. Se o último registro for igual a 0, então, a entrada do WSUS será ignorada.
Para explorar essas vulnerabilidades, você pode usar ferramentas como: Wsuxploit, pyWSUS - Esses são scripts de exploits armados MiTM para injetar atualizações 'falsas' no tráfego WSUS não SSL.
Leia a pesquisa aqui:
WSUS CVE-2020-1013
Leia o relatório completo aqui. Basicamente, esta é a falha que esse bug explora:
Se tivermos o poder de modificar nosso proxy de usuário local, e as Atualizações do Windows usam o proxy configurado nas configurações do Internet Explorer, portanto, temos o poder de executar PyWSUS localmente para interceptar nosso próprio tráfego e executar código como um usuário elevado em nosso ativo.
Além disso, uma vez que o serviço WSUS usa as configurações do usuário atual, ele também usará seu armazenamento de certificados. Se gerarmos um certificado autoassinado para o nome do host WSUS e adicionarmos esse certificado ao armazenamento de certificados do usuário atual, seremos capazes de interceptar tanto o tráfego WSUS HTTP quanto HTTPS. O WSUS não usa mecanismos semelhantes ao HSTS para implementar uma validação de confiança na primeira utilização no certificado. Se o certificado apresentado for confiável pelo usuário e tiver o nome do host correto, será aceito pelo serviço.
Você pode explorar essa vulnerabilidade usando a ferramenta WSUSpicious (uma vez que seja liberada).
Uma vulnerabilidade de elevação de privilégio local existe em ambientes de domínio do Windows sob condições específicas. Essas condições incluem ambientes onde a assinatura LDAP não é aplicada, usuários possuem direitos próprios que permitem configurar Delegação Constrained Baseada em Recurso (RBCD), e a capacidade de usuários criarem computadores dentro do domínio. É importante notar que esses requisitos são atendidos usando configurações padrão.
Encontre o exploit em https://github.com/Dec0ne/KrbRelayUp
Para mais informações sobre o fluxo do ataque, verifique https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
Se esses 2 registros estiverem ativados (o valor é 0x1), então usuários de qualquer privilégio podem instalar (executar) arquivos *.msi
como NT AUTHORITY\SYSTEM.
Se você tiver uma sessão meterpreter, pode automatizar essa técnica usando o módulo exploit/windows/local/always_install_elevated
Use o comando Write-UserAddMSI
do power-up para criar dentro do diretório atual um binário MSI do Windows para escalar privilégios. Este script gera um instalador MSI pré-compilado que solicita a adição de um usuário/grupo (portanto, você precisará de acesso GIU):
Apenas execute o binário criado para escalar privilégios.
Leia este tutorial para aprender como criar um wrapper MSI usando estas ferramentas. Note que você pode envolver um ".bat" se você apenas quiser executar linhas de comando.
Gere com Cobalt Strike ou Metasploit um novo payload TCP EXE do Windows em C:\privesc\beacon.exe
Abra Visual Studio, selecione Criar um novo projeto e digite "instalador" na caixa de pesquisa. Selecione o projeto Setup Wizard e clique em Próximo.
Dê um nome ao projeto, como AlwaysPrivesc, use C:\privesc
para o local, selecione colocar solução e projeto no mesmo diretório, e clique em Criar.
Continue clicando em Próximo até chegar ao passo 3 de 4 (escolher arquivos para incluir). Clique em Adicionar e selecione o payload Beacon que você acabou de gerar. Em seguida, clique em Concluir.
Destaque o projeto AlwaysPrivesc no Solution Explorer e nas Propriedades, mude TargetPlatform de x86 para x64.
Existem outras propriedades que você pode alterar, como o Autor e o Fabricante, que podem fazer o aplicativo instalado parecer mais legítimo.
Clique com o botão direito no projeto e selecione Ver > Ações Personalizadas.
Clique com o botão direito em Instalar e selecione Adicionar Ação Personalizada.
Clique duas vezes em Pasta do Aplicativo, selecione seu arquivo beacon.exe e clique em OK. Isso garantirá que o payload beacon seja executado assim que o instalador for executado.
Nas Propriedades da Ação Personalizada, mude Run64Bit para True.
Finalmente, construa-o.
Se o aviso File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
for exibido, certifique-se de definir a plataforma como x64.
Para executar a instalação do arquivo malicioso .msi
em background:
Para explorar essa vulnerabilidade, você pode usar: exploit/windows/local/always_install_elevated
Essas configurações decidem o que está sendo registrado, então você deve prestar atenção
O Windows Event Forwarding é interessante para saber para onde os logs são enviados.
LAPS é projetado para o gerenciamento de senhas de Administrador local, garantindo que cada senha seja única, aleatória e atualizada regularmente em computadores conectados a um domínio. Essas senhas são armazenadas de forma segura no Active Directory e só podem ser acessadas por usuários que receberam permissões suficientes através de ACLs, permitindo que visualizem senhas de administrador local se autorizados.
Se ativo, senhas em texto simples são armazenadas no LSASS (Local Security Authority Subsystem Service). Mais informações sobre WDigest nesta página.
A partir do Windows 8.1, a Microsoft introduziu uma proteção aprimorada para a Autoridade de Segurança Local (LSA) para bloquear tentativas de processos não confiáveis de ler sua memória ou injetar código, aumentando ainda mais a segurança do sistema. Mais informações sobre a Proteção LSA aqui.
Credential Guard foi introduzido no Windows 10. Seu objetivo é proteger as credenciais armazenadas em um dispositivo contra ameaças como ataques pass-the-hash.| Mais informações sobre Credentials Guard aqui.
Credenciais de domínio são autenticadas pela Autoridade de Segurança Local (LSA) e utilizadas por componentes do sistema operacional. Quando os dados de logon de um usuário são autenticados por um pacote de segurança registrado, as credenciais de domínio para o usuário são tipicamente estabelecidas. Mais informações sobre Credenciais em Cache aqui.
Você deve verificar se algum dos grupos aos quais pertence possui permissões interessantes.
Se você pertencer a algum grupo privilegiado, pode ser capaz de escalar privilégios. Aprenda sobre grupos privilegiados e como abusar deles para escalar privilégios aqui:
Saiba mais sobre o que é um token nesta página: Tokens do Windows. Confira a página a seguir para aprender sobre tokens interessantes e como abusar deles:
Primeiro de tudo, liste os processos verifique se há senhas dentro da linha de comando do processo. Verifique se você pode sobrescrever algum binário em execução ou se você tem permissões de gravação na pasta do binário para explorar possíveis ataques de DLL Hijacking:
Sempre verifique se há possíveis depuradores electron/cef/chromium em execução, você pode abusar disso para escalar privilégios.
Verificando permissões dos binários dos processos
Verificando as permissões das pastas dos binários dos processos (DLL Hijacking)
Você pode criar um despejo de memória de um processo em execução usando procdump do sysinternals. Serviços como FTP têm as credenciais em texto claro na memória, tente despejar a memória e ler as credenciais.
Aplicativos executando como SYSTEM podem permitir que um usuário inicie um CMD ou navegue por diretórios.
Exemplo: "Ajuda e Suporte do Windows" (Windows + F1), pesquise por "prompt de comando", clique em "Clique para abrir o Prompt de Comando"
Obtenha uma lista de serviços:
Você pode usar sc para obter informações de um serviço
É recomendável ter o binário accesschk do Sysinternals para verificar o nível de privilégio necessário para cada serviço.
É recomendável verificar se "Usuários Autenticados" podem modificar algum serviço:
Você pode baixar accesschk.exe para XP aqui
Se você estiver recebendo este erro (por exemplo, com SSDPSRV):
Erro do sistema 1058 ocorreu. &#xNAN;TO serviço não pode ser iniciado, seja porque está desativado ou porque não possui dispositivos habilitados associados a ele.
Você pode habilitá-lo usando
Leve em consideração que o serviço upnphost depende do SSDPSRV para funcionar (para XP SP1)
Outra solução alternativa para esse problema é executar:
No cenário em que o grupo "Usuários autenticados" possui SERVICE_ALL_ACCESS em um serviço, a modificação do binário executável do serviço é possível. Para modificar e executar sc:
Os privilégios podem ser elevados através de várias permissões:
SERVICE_CHANGE_CONFIG: Permite a reconfiguração do binário do serviço.
WRITE_DAC: Habilita a reconfiguração de permissões, levando à capacidade de alterar configurações de serviços.
WRITE_OWNER: Permite a aquisição de propriedade e reconfiguração de permissões.
GENERIC_WRITE: Herda a capacidade de alterar configurações de serviços.
GENERIC_ALL: Também herda a capacidade de alterar configurações de serviços.
Para a detecção e exploração dessa vulnerabilidade, o exploit/windows/local/service_permissions pode ser utilizado.
Verifique se você pode modificar o binário que é executado por um serviço ou se você tem permissões de escrita na pasta onde o binário está localizado (DLL Hijacking). Você pode obter todos os binários que são executados por um serviço usando wmic (não no system32) e verificar suas permissões usando icacls:
Você também pode usar sc e icacls:
Você deve verificar se pode modificar algum registro de serviço. Você pode verificar suas permissões sobre um registro de serviço fazendo:
Deve-se verificar se Authenticated Users ou NT AUTHORITY\INTERACTIVE possuem permissões de FullControl
. Se sim, o binário executado pelo serviço pode ser alterado.
Para mudar o caminho do binário executado:
Se você tiver essa permissão sobre um registro, isso significa que você pode criar sub-registros a partir deste. No caso de serviços do Windows, isso é suficiente para executar código arbitrário:
Se o caminho para um executável não estiver entre aspas, o Windows tentará executar tudo que terminar antes de um espaço.
Por exemplo, para o caminho C:\Program Files\Some Folder\Service.exe, o Windows tentará executar:
Liste todos os caminhos de serviço não entre aspas, excluindo aqueles que pertencem a serviços internos do Windows:
Você pode detectar e explorar essa vulnerabilidade com metasploit: exploit/windows/local/trusted\_service\_path
Você pode criar manualmente um binário de serviço com metasploit:
O Windows permite que os usuários especifiquem ações a serem tomadas se um serviço falhar. Esse recurso pode ser configurado para apontar para um binário. Se esse binário for substituível, a escalada de privilégios pode ser possível. Mais detalhes podem ser encontrados na documentação oficial.
Verifique as permissões dos binários (talvez você possa sobrescrever um e escalar privilégios) e das pastas (DLL Hijacking).
Verifique se você pode modificar algum arquivo de configuração para ler algum arquivo especial ou se você pode modificar algum binário que será executado por uma conta de Administrador (schedtasks).
Uma maneira de encontrar permissões fracas de pastas/arquivos no sistema é fazendo:
Verifique se você pode sobrescrever algum registro ou binário que será executado por um usuário diferente. Leia a página seguinte para saber mais sobre locais interessantes de autorun para escalar privilégios:
Procure por possíveis drivers estranhos/vulneráveis de terceiros
Se você tiver permissões de escrita dentro de uma pasta presente no PATH, poderá ser capaz de sequestrar uma DLL carregada por um processo e escalar privilégios.
Verifique as permissões de todas as pastas dentro do PATH:
Para mais informações sobre como abusar dessa verificação:
Verifique se há outros computadores conhecidos codificados no arquivo hosts
Verifique os serviços restritos do lado de fora
Verifique esta página para comandos relacionados ao Firewall (listar regras, criar regras, desligar, desligar...)
Mais comandos para enumeração de rede aqui
Binary bash.exe
também pode ser encontrado em C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Se você obter o usuário root, pode escutar em qualquer porta (na primeira vez que você usar nc.exe
para escutar em uma porta, ele perguntará via GUI se nc
deve ser permitido pelo firewall).
Para iniciar facilmente o bash como root, você pode tentar --default-user root
Você pode explorar o sistema de arquivos WSL
na pasta C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
De https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault O Cofre do Windows armazena credenciais de usuário para servidores, sites e outros programas que Windows pode fazer login nos usuários automaticamente. À primeira vista, isso pode parecer que agora os usuários podem armazenar suas credenciais do Facebook, credenciais do Twitter, credenciais do Gmail etc., para que façam login automaticamente via navegadores. Mas não é bem assim.
O Cofre do Windows armazena credenciais que o Windows pode usar para fazer login nos usuários automaticamente, o que significa que qualquer aplicativo do Windows que precise de credenciais para acessar um recurso (servidor ou um site) pode fazer uso deste Gerenciador de Credenciais & Cofre do Windows e usar as credenciais fornecidas em vez de os usuários digitarem o nome de usuário e a senha o tempo todo.
A menos que os aplicativos interajam com o Gerenciador de Credenciais, não acho que seja possível para eles usarem as credenciais para um determinado recurso. Portanto, se seu aplicativo quiser fazer uso do cofre, ele deve de alguma forma comunicar-se com o gerenciador de credenciais e solicitar as credenciais para esse recurso do cofre de armazenamento padrão.
Use o cmdkey
para listar as credenciais armazenadas na máquina.
Então você pode usar runas
com a opção /savecred
para usar as credenciais salvas. O seguinte exemplo chama um binário remoto via um compartilhamento SMB.
Usando runas
com um conjunto de credenciais fornecido.
Note que mimikatz, lazagne, credentialfileview, VaultPasswordView, ou do Empire Powershells module.
A API de Proteção de Dados (DPAPI) fornece um método para criptografia simétrica de dados, predominantemente utilizado dentro do sistema operacional Windows para a criptografia simétrica de chaves privadas assimétricas. Essa criptografia utiliza um segredo de usuário ou sistema para contribuir significativamente com a entropia.
A DPAPI permite a criptografia de chaves através de uma chave simétrica que é derivada dos segredos de login do usuário. Em cenários que envolvem criptografia de sistema, utiliza os segredos de autenticação de domínio do sistema.
As chaves RSA de usuário criptografadas, usando DPAPI, são armazenadas no diretório %APPDATA%\Microsoft\Protect\{SID}
, onde {SID}
representa o Identificador de Segurança do usuário. A chave DPAPI, co-localizada com a chave mestra que protege as chaves privadas do usuário no mesmo arquivo, normalmente consiste em 64 bytes de dados aleatórios. (É importante notar que o acesso a este diretório é restrito, impedindo a listagem de seu conteúdo via o comando dir
no CMD, embora possa ser listado através do PowerShell).
Você pode usar o mimikatz module dpapi::masterkey
com os argumentos apropriados (/pvk
ou /rpc
) para descriptografá-lo.
Os arquivos de credenciais protegidos pela senha mestra geralmente estão localizados em:
Você pode usar o mimikatz module dpapi::cred
com o apropriado /masterkey
para descriptografar.
Você pode extrair muitos DPAPI masterkeys da memória com o módulo sekurlsa::dpapi
(se você for root).
Credenciais do PowerShell são frequentemente usadas para scripting e tarefas de automação como uma forma de armazenar credenciais criptografadas de maneira conveniente. As credenciais são protegidas usando DPAPI, o que geralmente significa que só podem ser descriptografadas pelo mesmo usuário no mesmo computador em que foram criadas.
Para descriptografar uma credencial PS do arquivo que a contém, você pode fazer:
Você pode encontrá-las em HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
e em HKCU\Software\Microsoft\Terminal Server Client\Servers\
Use o módulo dpapi::rdg
do Mimikatz com o /masterkey
apropriado para descriptografar qualquer arquivo .rdg
Você pode extrair muitas chaves mestras DPAPI da memória com o módulo sekurlsa::dpapi
do Mimikatz
As pessoas costumam usar o aplicativo StickyNotes em estações de trabalho Windows para salvar senhas e outras informações, sem perceber que é um arquivo de banco de dados. Este arquivo está localizado em C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
e sempre vale a pena procurar e examinar.
Observe que para recuperar senhas do AppCmd.exe você precisa ser Administrador e executar sob um nível de Alta Integridade.
AppCmd.exe está localizado no diretório %systemroot%\system32\inetsrv\
.
Se este arquivo existir, então é possível que algumas credenciais tenham sido configuradas e podem ser recuperadas.
Este código foi extraído do PowerUP:
Verifique se C:\Windows\CCM\SCClient.exe
existe.
Instaladores são executados com privilégios de SYSTEM, muitos são vulneráveis a DLL Sideloading (Informações de https://github.com/enjoiz/Privesc).
As chaves privadas SSH podem ser armazenadas dentro da chave de registro HKCU\Software\OpenSSH\Agent\Keys
, então você deve verificar se há algo interessante lá:
Se você encontrar alguma entrada dentro desse caminho, provavelmente será uma chave SSH salva. Ela é armazenada criptografada, mas pode ser facilmente descriptografada usando https://github.com/ropnop/windows_sshagent_extract. Mais informações sobre essa técnica aqui: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Se o serviço ssh-agent
não estiver em execução e você quiser que ele inicie automaticamente na inicialização, execute:
Parece que essa técnica não é mais válida. Tentei criar algumas chaves ssh, adicioná-las com ssh-add
e fazer login via ssh em uma máquina. O registro HKCU\Software\OpenSSH\Agent\Keys não existe e o procmon não identificou o uso de dpapi.dll
durante a autenticação de chave assimétrica.
Você também pode procurar por esses arquivos usando metasploit: post/windows/gather/enum_unattend
Exemplo de conteúdo:
Procure um arquivo chamado SiteList.xml
Um recurso estava anteriormente disponível que permitia a implantação de contas de administrador local personalizadas em um grupo de máquinas via Preferências de Política de Grupo (GPP). No entanto, esse método tinha falhas de segurança significativas. Primeiro, os Objetos de Política de Grupo (GPOs), armazenados como arquivos XML no SYSVOL, podiam ser acessados por qualquer usuário do domínio. Em segundo lugar, as senhas dentro desses GPPs, criptografadas com AES256 usando uma chave padrão documentada publicamente, podiam ser descriptografadas por qualquer usuário autenticado. Isso representava um sério risco, pois poderia permitir que usuários obtivessem privilégios elevados.
Para mitigar esse risco, uma função foi desenvolvida para escanear arquivos GPP em cache localmente que contêm um campo "cpassword" que não está vazio. Ao encontrar tal arquivo, a função descriptografa a senha e retorna um objeto PowerShell personalizado. Este objeto inclui detalhes sobre o GPP e a localização do arquivo, ajudando na identificação e remediação dessa vulnerabilidade de segurança.
Procure em C:\ProgramData\Microsoft\Group Policy\history
ou em C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (anterior ao W Vista) por esses arquivos:
Groups.xml
Services.xml
Scheduledtasks.xml
DataSources.xml
Printers.xml
Drives.xml
Para descriptografar a cPassword:
Usando crackmapexec para obter as senhas:
Exemplo de web.config com credenciais:
Você pode sempre pedir ao usuário para inserir suas credenciais ou até mesmo as credenciais de um usuário diferente se você achar que ele pode conhecê-las (note que pedir diretamente ao cliente as credenciais é realmente arriscado):
Arquivos conhecidos que há algum tempo continham senhas em texto claro ou Base64
Pesquise todos os arquivos propostos:
Você também deve verificar a Lixeira para procurar credenciais dentro dela.
Para recuperar senhas salvas por vários programas, você pode usar: http://www.nirsoft.net/password_recovery_tools.html
Outras possíveis chaves de registro com credenciais
Extrair chaves openssh do registro.
Você deve verificar bancos de dados onde senhas do Chrome ou Firefox estão armazenadas. Também verifique o histórico, favoritos e marcadores dos navegadores, pois talvez algumas senhas estejam armazenadas lá.
Ferramentas para extrair senhas de navegadores:
Mimikatz: dpapi::chrome
Component Object Model (COM) é uma tecnologia incorporada no sistema operacional Windows que permite a intercomunicação entre componentes de software de diferentes linguagens. Cada componente COM é identificado por um ID de classe (CLSID) e cada componente expõe funcionalidade por meio de uma ou mais interfaces, identificadas por IDs de interface (IIDs).
As classes e interfaces COM são definidas no registro sob HKEY_CLASSES_ROOT\CLSID e HKEY_CLASSES_ROOT\Interface, respectivamente. Este registro é criado mesclando HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes = HKEY_CLASSES_ROOT.
Dentro dos CLSIDs deste registro, você pode encontrar o registro filho InProcServer32, que contém um valor padrão apontando para uma DLL e um valor chamado ThreadingModel que pode ser Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single ou Multi) ou Neutral (Thread Neutral).
Basicamente, se você puder sobrescrever qualquer uma das DLLs que serão executadas, você poderá escalar privilégios se essa DLL for executada por um usuário diferente.
Para aprender como os atacantes usam o COM Hijacking como um mecanismo de persistência, verifique:
Pesquisar por conteúdos de arquivos
Procure um arquivo com um determinado nome de arquivo
Pesquise no registro por nomes de chave e senhas
MSF-Credentials Plugin é um plugin msf que eu criei para executar automaticamente todos os módulos POST do metasploit que buscam por credenciais dentro da vítima. Winpeas busca automaticamente por todos os arquivos contendo senhas mencionados nesta página. Lazagne é outra ótima ferramenta para extrair senhas de um sistema.
A ferramenta SessionGopher busca por sessões, nomes de usuário e senhas de várias ferramentas que salvam esses dados em texto claro (PuTTY, WinSCP, FileZilla, SuperPuTTY e RDP)
Imagine que um processo em execução como SYSTEM abre um novo processo (OpenProcess()
) com acesso total. O mesmo processo também cria um novo processo (CreateProcess()
) com privilégios baixos, mas herdando todos os manipuladores abertos do processo principal.
Então, se você tiver acesso total ao processo de baixo privilégio, você pode pegar o manipulador aberto para o processo privilegiado criado com OpenProcess()
e injetar um shellcode.
Leia este exemplo para mais informações sobre como detectar e explorar essa vulnerabilidade.
Leia este outro post para uma explicação mais completa sobre como testar e abusar de mais manipuladores abertos de processos e threads herdados com diferentes níveis de permissões (não apenas acesso total).
Segmentos de memória compartilhada, referidos como pipes, permitem a comunicação entre processos e a transferência de dados.
O Windows fornece um recurso chamado Named Pipes, permitindo que processos não relacionados compartilhem dados, mesmo através de diferentes redes. Isso se assemelha a uma arquitetura cliente/servidor, com papéis definidos como servidor de pipe nomeado e cliente de pipe nomeado.
Quando os dados são enviados através de um pipe por um cliente, o servidor que configurou o pipe tem a capacidade de assumir a identidade do cliente, desde que tenha os direitos necessários de SeImpersonate. Identificar um processo privilegiado que se comunica via um pipe que você pode imitar oferece uma oportunidade para obter privilégios mais altos ao adotar a identidade desse processo uma vez que ele interaja com o pipe que você estabeleceu. Para instruções sobre como executar tal ataque, guias úteis podem ser encontrados aqui e aqui.
Além disso, a seguinte ferramenta permite interceptar uma comunicação de pipe nomeado com uma ferramenta como burp: https://github.com/gabriel-sztejnworcel/pipe-intercept e esta ferramenta permite listar e ver todos os pipes para encontrar privescs https://github.com/cyberark/PipeViewer
Ao obter um shell como um usuário, pode haver tarefas agendadas ou outros processos sendo executados que passam credenciais na linha de comando. O script abaixo captura as linhas de comando do processo a cada dois segundos e compara o estado atual com o estado anterior, exibindo quaisquer diferenças.
Se você tiver acesso à interface gráfica (via console ou RDP) e o UAC estiver habilitado, em algumas versões do Microsoft Windows é possível executar um terminal ou qualquer outro processo como "NT\AUTHORITY SYSTEM" a partir de um usuário não privilegiado.
Isso torna possível escalar privilégios e contornar o UAC ao mesmo tempo com a mesma vulnerabilidade. Além disso, não há necessidade de instalar nada e o binário usado durante o processo é assinado e emitido pela Microsoft.
Alguns dos sistemas afetados são os seguintes:
Para explorar essa vulnerabilidade, é necessário realizar os seguintes passos:
Você tem todos os arquivos e informações necessários no seguinte repositório do GitHub:
https://github.com/jas502n/CVE-2019-1388
Leia isto para aprender sobre Níveis de Integridade:
Então leia isto para aprender sobre UAC e bypasses de UAC:
Se você já estiver executando um processo de Alta Integridade, o passo para SYSTEM pode ser fácil apenas criando e executando um novo serviço:
De um processo de Alta Integridade, você pode tentar habilitar as entradas de registro AlwaysInstallElevated e instalar um shell reverso usando um .msi wrapper. Mais informações sobre as chaves de registro envolvidas e como instalar um pacote .msi aqui.
Você pode encontrar o código aqui.
Se você tiver esses privilégios de token (provavelmente você encontrará isso em um processo de Alta Integridade já existente), você poderá abrir quase qualquer processo (processos não protegidos) com o privilégio SeDebug, copiar o token do processo e criar um processo arbitrário com esse token. Usando essa técnica, geralmente é selecionado qualquer processo em execução como SYSTEM com todos os privilégios de token (sim, você pode encontrar processos SYSTEM sem todos os privilégios de token). Você pode encontrar um exemplo de código executando a técnica proposta aqui.
Essa técnica é usada pelo meterpreter para escalar em getsystem
. A técnica consiste em criar um pipe e então criar/abusar de um serviço para escrever nesse pipe. Então, o servidor que criou o pipe usando o privilégio SeImpersonate
poderá impersonar o token do cliente do pipe (o serviço) obtendo privilégios SYSTEM.
Se você quiser saber mais sobre pipes nomeados, você deve ler isso.
Se você quiser ler um exemplo de como ir de alta integridade para System usando pipes nomeados, você deve ler isso.
Se você conseguir sequestar uma dll sendo carregada por um processo em execução como SYSTEM, você poderá executar código arbitrário com essas permissões. Portanto, o Dll Hijacking também é útil para esse tipo de escalonamento de privilégios e, além disso, é muito mais fácil de alcançar a partir de um processo de alta integridade, pois terá permissões de gravação nas pastas usadas para carregar dlls. Você pode saber mais sobre Dll hijacking aqui.
Leia: https://github.com/itm4n/FullPowers
Melhor ferramenta para procurar vetores de escalonamento de privilégios locais do Windows: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Verifique se há configurações incorretas e arquivos sensíveis (verifique aqui). Detectado.
JAWS -- Verifique se há algumas possíveis configurações incorretas e colete informações (verifique aqui).
privesc -- Verifique se há configurações incorretas
SessionGopher -- Extrai informações de sessão salvas do PuTTY, WinSCP, SuperPuTTY, FileZilla e RDP. Use -Thorough em local.
Invoke-WCMDump -- Extrai credenciais do Gerenciador de Credenciais. Detectado.
DomainPasswordSpray -- Pulveriza senhas coletadas pelo domínio
Inveigh -- Inveigh é uma ferramenta de spoofing e man-in-the-middle PowerShell ADIDNS/LLMNR/mDNS/NBNS.
WindowsEnum -- Enumeração básica de privesc do Windows
Sherlock ~~~~ -- Procura por vulnerabilidades conhecidas de privesc (DEPRECATED para Watson)
WINspect -- Verificações locais (Necessita de direitos de Admin)
Exe
Watson -- Procura por vulnerabilidades conhecidas de privesc (precisa ser compilado usando o VisualStudio) (pré-compilado)
SeatBelt -- Enumera o host em busca de configurações incorretas (mais uma ferramenta de coleta de informações do que de privesc) (precisa ser compilado) (pré-compilado)
LaZagne -- Extrai credenciais de muitos softwares (exe pré-compilado no github)
SharpUP -- Porta do PowerUp para C#
Beroot ~~~~ -- Verifique se há configurações incorretas (executável pré-compilado no github). Não recomendado. Não funciona bem no Win10.
Windows-Privesc-Check -- Verifique se há possíveis configurações incorretas (exe do python). Não recomendado. Não funciona bem no Win10.
Bat
winPEASbat -- Ferramenta criada com base neste post (não precisa do accesschk para funcionar corretamente, mas pode usá-lo).
Local
Windows-Exploit-Suggester -- Lê a saída do systeminfo e recomenda exploits funcionais (python local) Windows Exploit Suggester Next Generation -- Lê a saída do systeminfo e recomenda exploits funcionais (python local)
Meterpreter
multi/recon/local_exploit_suggestor
Você deve compilar o projeto usando a versão correta do .NET (veja isso). Para ver a versão instalada do .NET no host da vítima, você pode fazer:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)