Windows Local Privilege Escalation
Melhor ferramenta para procurar vetores de escalação de privilégios locais do Windows: WinPEAS
Teoria Inicial do Windows
Tokens de Acesso
Se você não sabe o que são Tokens de Acesso do Windows, leia a seguinte página antes de continuar:
pageAccess TokensACLs - DACLs/SACLs/ACEs
Consulte a seguinte página para mais informações sobre ACLs - DACLs/SACLs/ACEs:
pageACLs - DACLs/SACLs/ACEsNíveis de Integridade
Se você não sabe o que são níveis de integridade no Windows, você deve ler a seguinte página antes de continuar:
pageIntegrity LevelsControles de Segurança do Windows
Existem diferentes coisas no Windows que poderiam impedir você de enumerar o sistema, executar executáveis ou até mesmo detectar suas atividades. Você deve ler a seguinte página e enumerar todos esses mecanismos de defesa antes de iniciar a enumeração de escalonamento de privilégios:
pageWindows Security ControlsInformações do Sistema
Enumeração de informações de versão
Verifique se a versão do Windows possui alguma vulnerabilidade conhecida (verifique também as correções aplicadas).
Vulnerabilidades de Versão
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 ampla superfície de ataque que um ambiente Windows apresenta.
No sistema
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas tem o watson incorporado)
Localmente com informações do sistema
Repositórios do Github de exploits:
Ambiente
Alguma credencial/informação sensível salva nas variáveis de ambiente?
Histórico do PowerShell
Arquivos de Transcrição do PowerShell
Você pode aprender como ativar isso em https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
Registo do Módulo PowerShell
Os detalhes das execuções da pipeline do PowerShell são registados, abrangendo comandos executados, invocações de comandos e partes de scripts. No entanto, os detalhes completos da execução e os resultados de saída podem não ser capturados.
Para ativar isso, siga as instruções na secção "Ficheiros de Transcrição" da documentação, optando por "Registo do Módulo" em vez de "Transcrição do PowerShell".
Para visualizar os últimos 15 eventos nos logs do Powershell, você pode executar:
PowerShell Registo de Blocos de Script
Um registo completo de atividades e conteúdo completo da execução do script é capturado, garantindo que cada bloco de código seja documentado conforme é executado. Esse processo preserva um trilho 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.
O registro de eventos para o Bloco de Script pode ser encontrado no Visualizador de Eventos do Windows no caminho: Logs de Aplicativos e Serviços > Microsoft > Windows > PowerShell > Operacional. Para visualizar os últimos 20 eventos, você pode usar:
Configurações de Internet
Unidades
WSUS
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 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, a entrada do WSUS será ignorada.
Para explorar essas vulnerabilidades, você pode usar ferramentas como: Wsuxploit, pyWSUS - Estes são scripts de exploits weaponizados 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 usarem 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, como o serviço WSUS usa as configurações do usuário atual, ele também usará seu repositório de certificados. Se gerarmos um certificado autoassinado para o nome do host do WSUS e adicionarmos este certificado ao repositório de certificados do usuário atual, poderemos interceptar tanto o tráfego HTTP quanto o HTTPS do WSUS. O WSUS não usa mecanismos semelhantes ao HSTS para implementar uma validação do tipo 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, ele será aceito pelo serviço.
Você pode explorar essa vulnerabilidade usando a ferramenta WSUSpicious (quando estiver liberada).
KrbRelayUp
Uma vulnerabilidade de escalada 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 é imposta, os usuários possuem direitos próprios que lhes permitem configurar a Delegação Condicional Baseada em Recursos (RBCD) e a capacidade para os usuários criarem computadores dentro do domínio. É importante observar que esses requisitos são atendidos usando as configurações padrão.
Encontre o exploit em https://github.com/Dec0ne/KrbRelayUp
Para mais informações sobre o fluxo do ataque, consulte https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
Se esses 2 registros estiverem habilitados (valor é 0x1), então usuários de qualquer privilégio podem instalar (executar) arquivos *.msi
como NT AUTHORITY\SYSTEM.
Cargas úteis do Metasploit
Se você tiver uma sessão meterpreter, você pode automatizar essa técnica usando o módulo exploit/windows/local/always_install_elevated
PowerUP
Use o comando Write-UserAddMSI
do power-up para criar dentro do diretório atual um binário Windows MSI para escalar privilégios. Este script escreve um instalador MSI pré-compilado que solicita a adição de um usuário/grupo (portanto, você precisará de acesso GIU):
Invocar o binário criado para elevar privilégios.
Invólucro MSI
Leia este tutorial para aprender como criar um invólucro MSI usando estas ferramentas. Note que você pode envolver um arquivo ".bat" se você apenas quiser executar linhas de comando
pageMSI WrapperCriar MSI com WIX
pageCreate MSI with WIXCriar MSI com Visual Studio
Gerar com Cobalt Strike ou Metasploit um novo payload TCP EXE do Windows em
C:\privesc\beacon.exe
Abra o Visual Studio, selecione Criar um novo projeto e digite "instalador" na caixa de pesquisa. Selecione o projeto Assistente de Configuração e clique em Avançar.
Dê um nome ao projeto, como AlwaysPrivesc, use
C:\privesc
para a localização, selecione colocar solução e projeto no mesmo diretório, e clique em Criar.Continue clicando em Avançar até chegar à etapa 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 Explorador de Soluções e, nas Propriedades, altere TargetPlatform de x86 para x64.
Existem outras propriedades que você pode alterar, como o Autor e Fabricante, que podem tornar o aplicativo instalado mais legítimo.
Clique com o botão direito no projeto e selecione Exibir > Ações Personalizadas.
Clique com o botão direito em Instalar e selecione Adicionar Ação Personalizada.
Dê um duplo clique em Pasta do Aplicativo, selecione seu arquivo beacon.exe e clique em OK. Isso garantirá que o payload do beacon seja executado assim que o instalador for executado.
Sob as Propriedades da Ação Personalizada, altere Run64Bit para Verdadeiro.
Por fim, compile-o.
Se o aviso
O arquivo 'beacon-tcp.exe' direcionando para 'x64' não é compatível com a plataforma de destino do projeto 'x86'
for exibido, certifique-se de definir a plataforma para x64.
Instalação do MSI
Para executar a instalação do arquivo .msi
malicioso em segundo plano:
Para explorar essa vulnerabilidade, você pode usar: exploit/windows/local/always_install_elevated
Antivírus e Detectores
Configurações de Auditoria
Essas configurações decidem o que está sendo registrado, então você deve prestar atenção
WEF
Windows Event Forwarding, é interessante saber para onde os logs são enviados
LAPS
LAPS foi projetado para o gerenciamento de senhas de administrador local, garantindo que cada senha seja única, randomizada e atualizada regularmente em computadores integrados a um domínio. Essas senhas são armazenadas de forma segura no Active Directory e só podem ser acessadas por usuários que tenham recebido permissões suficientes por meio de ACLs, permitindo que visualizem senhas de administração local se autorizados.
pageLAPSWDigest
Se ativado, senhas em texto simples são armazenadas no LSASS (Local Security Authority Subsystem Service). Mais informações sobre o WDigest nesta página.
Proteção LSA
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.
Proteção de Credenciais
Credential Guard foi introduzido no Windows 10. Seu objetivo é proteger as credenciais armazenadas em um dispositivo contra ameaças como ataques de pass-the-hash.| Mais informações sobre o Credential Guard aqui.
Credenciais em Cache
As 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.
Usuários e Grupos
Enumerar Usuários e Grupos
Você deve verificar se algum dos grupos dos quais você faz parte possui permissões interessantes.
Grupos privilegiados
Se você pertence a algum grupo privilegiado, pode ser capaz de elevar os privilégios. Saiba mais sobre grupos privilegiados e como abusar deles para elevar privilégios aqui:
pagePrivileged GroupsManipulação de token
Saiba mais sobre o que é um token nesta página: Tokens do Windows. Confira a seguinte página para aprender sobre tokens interessantes e como abusar deles:
pageAbusing TokensUsuários logados / Sessões
Pastas pessoais
Política de Senhas
Obter o conteúdo da área de transferência
Processos em Execução
Permissões de Arquivos e Pastas
Primeiramente, ao listar os processos, verifique senhas dentro da linha de comando do processo. Verifique se você pode sobrescrever algum binário em execução ou se possui permissões de escrita na pasta do binário para explorar possíveis ataques de DLL Hijacking:
Sempre verifique se há depuradores electron/cef/chromium em execução, você poderia abusar deles para escalar privilégios.
Verificando as permissões dos binários dos processos
Verificando as permissões das pastas dos binários dos processos (DLL Hijacking)
Mineração de Senha na Memória
Você pode criar um despejo de memória de um processo em execução usando o procdump do sysinternals. Serviços como FTP têm as credenciais em texto claro na memória, tente fazer o despejo da memória e ler as credenciais.
Aplicativos GUI inseguros
Aplicativos em execução como SYSTEM podem permitir a um usuário iniciar um CMD ou navegar 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"
Serviços
Obter uma lista de serviços:
Permissões
Você pode usar sc para obter informações de um serviço
É recomendado ter o binário accesschk da Sysinternals para verificar o nível de privilégio necessário para cada serviço.
É recomendado verificar se "Usuários Autenticados" podem modificar algum serviço:
Você pode baixar accesschk.exe para XP aqui
Habilitar serviço
Se você estiver tendo esse erro (por exemplo com SSDPSRV):
O erro do sistema 1058 ocorreu. O 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
Tenha em conta que o serviço upnphost depende do SSDPSRV para funcionar (para XP SP1)
Outra solução alternativa para este problema é executar:
Modificar o caminho do binário do serviço
No cenário em que o grupo "Usuários Autenticados" possui SERVICE_ALL_ACCESS em um serviço, é possível modificar o binário executável do serviço. Para modificar e executar sc:
Reiniciar serviço
Os privilégios podem ser escalados através de várias permissões:
SERVICE_CHANGE_CONFIG: Permite a reconfiguração do binário do serviço.
WRITE_DAC: Permite a reconfiguração de permissões, levando à capacidade de alterar configurações de serviço.
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ço.
GENERIC_ALL: Também herda a capacidade de alterar configurações de serviço.
Para a detecção e exploração dessa vulnerabilidade, o exploit/windows/local/service_permissions pode ser utilizado.
Permissões fracas de binários de serviços
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 em system32) e verificar suas permissões usando icacls:
Você também pode usar sc e icacls:
Permissões de modificação do registro de serviços
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 ser verificado se os Usuários Autenticados ou NT AUTHORITY\INTERACTIVE possuem permissões de Controle Total
. Se sim, o binário executado pelo serviço pode ser alterado.
Para alterar o Caminho do binário executado:
Permissões AppendData/AddSubdirectory no registro de serviços
Se você tiver essa permissão sobre um registro, isso significa que você pode criar sub-registros a partir deste. No caso dos serviços do Windows, isso é suficiente para executar código arbitrário:
pageAppendData/AddSubdirectory permission over service registryCaminhos de Serviço sem Aspas
Se o caminho para um executável não estiver entre aspas, o Windows tentará executar tudo 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 pertencentes a serviços integrados do Windows:
Você pode detectar e explorar essa vulnerabilidade com o metasploit: exploit/windows/local/trusted\_service\_path
Você pode criar manualmente um binário de serviço com o metasploit:
Ações de Recuperação
O Windows permite aos usuários especificar ações a serem tomadas caso um serviço falhe. Essa funcionalidade pode ser configurada para apontar para um binário. Se este binário for substituível, pode ser possível a escalada de privilégios. Mais detalhes podem ser encontrados na documentação oficial.
Aplicações
Aplicações Instaladas
Verifique as permissões dos binários (talvez você possa sobrescrever um e escalar privilégios) e das pastas (DLL Hijacking).
Permissões de Escrita
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 pasta/arquivos no sistema é fazendo:
Executar na inicialização
Verifique se você pode sobrescrever algum registro ou binário que será executado por um usuário diferente. Leia a página seguinte para aprender mais sobre locais de autorun interessantes para escalar privilégios:
pagePrivilege Escalation with AutorunsDrivers
Procure possíveis drivers de terceiros estranhos/vulneráveis.
Hijacking de DLL do PATH
Se você tiver permissões de escrita dentro de uma pasta presente no PATH, você pode ser capaz de sequestrar uma DLL carregada por um processo e elevar privilégios.
Verifique as permissões de todas as pastas dentro do PATH:
Para obter mais informações sobre como abusar dessa verificação:
pageWritable Sys Path +Dll Hijacking PrivescRede
Compartilhamentos
ficheiro hosts
Verifique se existem outros computadores conhecidos codificados no ficheiro hosts
Interfaces de Rede & DNS
Portas Abertas
Verifique os serviços restritos de fora.
Tabela de Roteamento
Tabela ARP
Regras do Firewall
Verifique esta página para comandos relacionados ao Firewall (listar regras, criar regras, desligar, desativar...)
Mais comandos para enumeração de rede aqui
Subsistema do Windows para Linux (WSL)
O binário bash.exe
também pode ser encontrado em C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Se você obter acesso de usuário root, poderá ouvir em qualquer porta (na primeira vez que você usar nc.exe
para ouvir 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 do WSL
na pasta C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Credenciais do Windows
Credenciais do Winlogon
Gerenciador de credenciais / Vault do Windows
De https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault O Vault do Windows armazena as credenciais do usuário para servidores, sites e outros programas que o Windows pode fazer login automaticamente. À primeira vista, isso pode parecer que os usuários podem armazenar suas credenciais do Facebook, Twitter, Gmail etc., para fazer login automaticamente via navegadores. Mas não é assim.
O Vault do Windows armazena credenciais que o Windows pode usar para fazer login automaticamente nos usuários, o que significa que qualquer aplicativo do Windows que precisa de credenciais para acessar um recurso (servidor ou site) pode fazer uso deste Gerenciador de Credenciais e do Vault do Windows e usar as credenciais fornecidas em vez de os usuários inserirem o nome de usuário e senha o tempo todo.
A menos que os aplicativos interajam com o Gerenciador de Credenciais, acredito que não seja possível para eles usar as credenciais para um determinado recurso. Portanto, se seu aplicativo deseja fazer uso do vault, ele deve de alguma forma comunicar-se com o gerenciador de credenciais e solicitar as credenciais para esse recurso do vault 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 exemplo a seguir está chamando um binário remoto via um compartilhamento SMB.
Usando runas
com um conjunto fornecido de credenciais.
Observe que o mimikatz, lazagne, credentialfileview, VaultPasswordView, ou do módulo Empire Powershells.
DPAPI
O Data Protection API (DPAPI) fornece um método para criptografia simétrica de dados, predominantemente usado no sistema operacional Windows para a criptografia simétrica de chaves privadas assimétricas. Essa criptografia utiliza um segredo do usuário ou do sistema para contribuir significativamente para a entropia.
O DPAPI permite a criptografia de chaves por meio de uma chave simétrica derivada dos segredos de login do usuário. Em cenários que envolvem a criptografia do sistema, ele utiliza os segredos de autenticação de domínio do sistema.
As chaves RSA do usuário criptografadas, ao usar o 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 observar que o acesso a este diretório é restrito, impedindo a listagem de seu conteúdo por meio do comando dir
no CMD, embora possa ser listado por meio do PowerShell).
Você pode usar o módulo mimikatz 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:
Pode usar o módulo mimikatz dpapi::cred
com o /masterkey
apropriado para descriptografar.
Você pode extrair muitos DPAPI masterkeys da memória com o módulo sekurlsa::dpapi
(se você for root).
Credenciais do PowerShell
As credenciais do PowerShell são frequentemente usadas para scripts e tarefas de automação como uma forma de armazenar credenciais criptografadas de forma 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 do PowerShell do arquivo que a contém, você pode fazer:
Wifi
Conexões RDP Salvas
Você pode encontrá-las em HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
e em HKCU\Software\Microsoft\Terminal Server Client\Servers\
Comandos Executados Recentemente
Gestor de Credenciais do Remote Desktop
Use o módulo Mimikatz dpapi::rdg
com o /masterkey
apropriado para descriptografar qualquer arquivo .rdg. Você pode extrair muitas DPAPI masterkeys da memória com o módulo Mimikatz sekurlsa::dpapi
.
Notas Adesivas
As pessoas frequentemente usam o aplicativo StickyNotes em estações de trabalho com 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.
AppCmd.exe
Observe que para recuperar senhas do AppCmd.exe você precisa ser Administrador e executar em um nível de Integridade Alto.
O 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 possam ser recuperadas.
Este código foi extraído do PowerUP:
SCClient / SCCM
Verifique se C:\Windows\CCM\SCClient.exe
existe.
Os instaladores são executados com privilégios do SISTEMA, muitos são vulneráveis ao DLL Sideloading (Informações de https://github.com/enjoiz/Privesc).
Ficheiros e Registo (Credenciais)
Credenciais do Putty
Chaves de Host SSH do Putty
Chaves SSH no registro
Chaves privadas SSH podem ser armazenadas dentro da chave do registro HKCU\Software\OpenSSH\Agent\Keys
, então você deve verificar se há algo interessante lá:
Se 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ê deseja que ele inicie automaticamente durante a inicialização, execute:
Parece que esta 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.
Arquivos não assistidos
Você também pode procurar por esses arquivos usando metasploit: post/windows/gather/enum_unattend
Conteúdo de exemplo:
Backups do SAM & SYSTEM
Credenciais na Nuvem
McAfee SiteList.xml
Procure por um arquivo chamado SiteList.xml
Senha GPP em Cache
Anteriormente, existia um recurso 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 significativas de segurança. Em primeiro lugar, os Objetos de Política de Grupo (GPOs), armazenados como arquivos XML no SYSVOL, podiam ser acessados por qualquer usuário de domínio. Em segundo lugar, as senhas dentro desses GPPs, criptografadas com AES256 usando uma chave padrão publicamente documentada, podiam ser descriptografadas por qualquer usuário autenticado. Isso representava um risco sério, pois poderia permitir que os usuários obtivessem privilégios elevados.
Para mitigar esse risco, foi desenvolvida uma função para procurar arquivos GPP em cache local contendo um campo "cpassword" que não está vazio. Ao encontrar tal arquivo, a função descriptografa a senha e retorna um objeto PowerShell personalizado. Esse objeto inclui detalhes sobre o GPP e a localização do arquivo, auxiliando na identificação e correçã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 o cPassword:
Usando o crackmapexec para obter as senhas:
Configuração da Web do IIS
Exemplo de web.config com credenciais:
Credenciais do OpenVPN
Registos
Solicitar credenciais
Você sempre pode pedir ao usuário para inserir suas credenciais ou até mesmo as credenciais de um usuário diferente se você acha que ele pode conhecê-las (observe que solicitar diretamente ao cliente as credenciais é realmente arriscado):
Possíveis nomes de arquivos contendo credenciais
Arquivos conhecidos que em algum momento contiveram senhas em texto claro ou Base64
Pesquise todos os arquivos propostos:
Credenciais na Lixeira
Você também deve verificar a Lixeira em busca de credenciais dentro dela.
Para recuperar senhas salvas por vários programas, você pode usar: http://www.nirsoft.net/password_recovery_tools.html
Dentro do registro
Outras chaves de registro possíveis com credenciais
Extrair chaves openssh do registro.
Histórico dos Navegadores
Você deve verificar bancos de dados onde senhas do Chrome ou Firefox são armazenadas. Também verifique o histórico, favoritos e marcadores dos navegadores, pois talvez algumas senhas estejam armazenadas lá.
Ferramentas para extrair senhas dos navegadores:
Mimikatz:
dpapi::chrome
Sobrescrita de DLL COM
Modelo de Objeto de Componente (COM) é uma tecnologia incorporada no sistema operacional Windows que permite intercomunicação entre componentes de software de diferentes idiomas. Cada componente COM é identificado por meio de um ID de classe (CLSID) e cada componente expõe funcionalidades por meio de uma ou mais interfaces, identificadas por IDs de interface (IIDs).
As classes e interfaces COM são definidas no registro em 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 (Thread Único), Free (Thread Múltiplo), Both (Único ou Múltiplo) ou Neutral (Thread Neutro).
Basicamente, se você puder sobrescrever qualquer uma das DLLs que serão executadas, poderá elevar privilégios se essa DLL for executada por um usuário diferente.
Para aprender como os atacantes usam o Sequestro de COM como um mecanismo de persistência, verifique:
pageCOM HijackingPesquisa Genérica de Senhas em Arquivos e no Registro
Pesquisar conteúdo de arquivos
Procurar por um arquivo com um determinado nome de arquivo
Pesquise o registro por nomes de chaves e senhas
Ferramentas que procuram por senhas
O Plugin MSF-Credentials é um plugin do msf que criei para executar automaticamente todos os módulos POST do metasploit que procuram por credenciais dentro da vítima. O Winpeas busca automaticamente por todos os arquivos que contenham senhas mencionadas nesta página. O Lazagne é outra ótima ferramenta para extrair senhas de um sistema.
A ferramenta SessionGopher procura por sessões, nomes de usuários e senhas de várias ferramentas que salvam esses dados em texto claro (PuTTY, WinSCP, FileZilla, SuperPuTTY e RDP).
Manipuladores Vazados
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 baixos privilégios, 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 do 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).
Impersonação de Cliente de Pipe Nomeado
Segmentos de memória compartilhada, referidos como pipes, permitem a comunicação entre processos e transferência de dados.
O Windows fornece um recurso chamado Pipes Nomeados, permitindo que processos não relacionados compartilhem dados, mesmo em redes diferentes. Isso se assemelha a uma arquitetura cliente/servidor, com funções definidas como servidor de pipe nomeado e cliente de pipe nomeado.
Quando dados são enviados por um cliente através de um pipe, 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 a oportunidade de obter privilégios mais altos ao adotar a identidade desse processo quando ele interage com o pipe que você estabeleceu. Para instruções sobre como executar esse tipo de 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
Misc
Monitorando Linhas de Comando para senhas
Ao obter um shell como 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 dos processos a cada dois segundos e compara o estado atual com o estado anterior, exibindo quaisquer diferenças.
Roubo de senhas de processos
De Usuário de Baixo Privilégio para NT\AUTHORITY SYSTEM (CVE-2019-1388) / Bypass de UAC
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 a escalada de privilégios e a bypass do UAC ao mesmo tempo com a mesma vulnerabilidade. Além disso, não é necessário 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árias no seguinte repositório do GitHub:
https://github.com/jas502n/CVE-2019-1388
De Nível de Integridade Médio para Alto / Bypass do UAC
Leia isso para aprender sobre Níveis de Integridade:
pageIntegrity LevelsEntão leia isso para aprender sobre o UAC e os bypasses do UAC:
pageUAC - User Account ControlDe Alto Integridade para Sistema
Novo serviço
Se você já está rodando em um processo de Alta Integridade, a passagem para o SISTEMA pode ser fácil apenas criando e executando um novo serviço:
AlwaysInstallElevated
A partir de um processo de alta integridade, você pode tentar ativar as entradas do registro AlwaysInstallElevated e instalar um shell reverso usando um invólucro .msi. Mais informações sobre as chaves de registro envolvidas e como instalar um pacote .msi aqui.
Privilégio High + SeImpersonate para System
Você pode encontrar o código aqui.
De SeDebug + SeImpersonate para privilégios de token completos
Se você tiver esses privilégios de token (provavelmente encontrará isso em um processo já de alta integridade), você poderá abrir quase qualquer processo (exceto processos protegidos) com o privilégio SeDebug, copiar o token do processo e criar um processo arbitrário com esse token. Usar essa técnica geralmente seleciona 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.
Pipes Nomeados
Essa técnica é usada pelo meterpreter para escalar no getsystem
. A técnica consiste em criar um pipe e depois criar/abusar de um serviço para escrever nesse pipe. Em seguida, 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 do 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.
Dll Hijacking
Se você conseguir sequestrar 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.
De Administrador ou Serviço de Rede para System
De SERVIÇO LOCAL ou SERVIÇO DE REDE para privilégios completos
Leia: https://github.com/itm4n/FullPowers
Mais ajuda
Binários estáticos do impacket
Ferramentas úteis
Melhor ferramenta para procurar vetores de escalonamento de privilégios locais do Windows: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Verifique configurações incorretas e arquivos sensíveis (verifique aqui). Detectado.
JAWS -- Verifique algumas possíveis configurações incorretas e colete informações (verifique aqui).
privesc -- Verifique configurações incorretas
SessionGopher -- Extrai informações de sessões salvas do PuTTY, WinSCP, SuperPuTTY, FileZilla e RDP. Use -Thorough localmente.
Invoke-WCMDump -- Extrai credenciais do Gerenciador de Credenciais. Detectado.
DomainPasswordSpray -- Espalhe senhas coletadas por todo o domínio
Inveigh -- Inveigh é uma ferramenta de spoofing e man-in-the-middle ADIDNS/LLMNR/mDNS/NBNS do PowerShell.
WindowsEnum -- Enumeração básica de privesc do Windows
Sherlock ~~~~ -- Procure por vulnerabilidades de privesc conhecidas (DEPRECIADO para Watson)
WINspect -- Verificações locais (Necessita de direitos de administrador)
Exe
Watson -- Procure por vulnerabilidades de privesc conhecidas (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 configurações incorretas (executável pré-compilado no github). Não recomendado. Não funciona bem no Win10.
Windows-Privesc-Check -- Verifique 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 de 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ê precisa 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:
Bibliografia
Last updated