8.1 KiB
Caminho do Sistema Gravável + Escalada de Privilégio por Hijacking de DLL
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub HackTricks e HackTricks Cloud.
Introdução
Se você descobriu que pode escrever em uma pasta do Caminho do Sistema (note que isso não funcionará se você puder escrever em uma pasta do Caminho do Usuário), é possível que você consiga escalar privilégios no sistema.
Para fazer isso, você pode abusar de um Hijacking de DLL onde você vai sequestrar uma biblioteca que está sendo carregada por um serviço ou processo com mais privilégios do que os seus, e porque esse serviço está carregando uma DLL que provavelmente nem existe em todo o sistema, ele vai tentar carregá-la a partir do Caminho do Sistema onde você pode escrever.
Para mais informações sobre o que é Hijacking de DLL, confira:
{% content-ref url="../dll-hijacking.md" %} dll-hijacking.md {% endcontent-ref %}
Escalada de Privilégio com Hijacking de DLL
Encontrando uma DLL ausente
A primeira coisa que você precisa é identificar um processo rodando com mais privilégios do que você que está tentando carregar uma DLL a partir do Caminho do Sistema no qual você pode escrever.
O problema nesses casos é que provavelmente esses processos já estão em execução. Para descobrir quais DLLs estão faltando nos serviços, você precisa iniciar o procmon o mais rápido possível (antes que os processos sejam carregados). Então, para encontrar .dlls ausentes, faça:
- Crie a pasta
C:\privesc_hijacking
e adicione o caminhoC:\privesc_hijacking
à variável de ambiente Caminho do Sistema. Você pode fazer isso manualmente ou com PS:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"
# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
- Inicie o
procmon
e vá paraOpções
-->Habilitar registro de inicialização
e pressioneOK
no prompt. - Em seguida, reinicie. Quando o computador for reiniciado, o
procmon
começará a registrar eventos o mais rápido possível. - Uma vez que o Windows for iniciado, execute o
procmon
novamente, ele informará que esteve em execução e perguntará se você deseja armazenar os eventos em um arquivo. Diga sim e armazene os eventos em um arquivo. - Após o arquivo ser gerado, feche a janela do
procmon
aberta e abra o arquivo de eventos. - Adicione estes filtros e você encontrará todas as DLLs que algum processo tentou carregar da pasta do Caminho do Sistema editável:
DLLs Ausentes
Executando isso em uma máquina virtual (vmware) Windows 11 gratuita, obtive estes resultados:
Neste caso, os .exe são inúteis, então ignore-os, as DLLs ausentes eram de:
Serviço | Dll | Linha de Comando |
---|---|---|
Agendador de Tarefas (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
Serviço de Política de Diagnóstico (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
Após encontrar isso, encontrei este interessante post de blog que também explica como abusar do WptsExtensions.dll para privesc. Que é o que vamos fazer agora.
Exploração
Então, para escalar privilégios, vamos sequestrar a biblioteca WptsExtensions.dll. Tendo o caminho e o nome, só precisamos gerar a dll maliciosa.
Você pode tentar usar qualquer um destes exemplos. Você poderia executar cargas úteis como: obter um shell reverso, adicionar um usuário, executar um beacon...
{% hint style="warning" %}
Note que nem todos os serviços são executados com NT AUTHORITY\SYSTEM
alguns também são executados com NT AUTHORITY\LOCAL SERVICE
, que tem menos privilégios e você não poderá criar um novo usuário para abusar de suas permissões.
No entanto, esse usuário tem o privilégio seImpersonate
, então você pode usar a suíte potato para escalar privilégios. Portanto, neste caso, um shell reverso é uma opção melhor do que tentar criar um usuário.
{% endhint %}
No momento da escrita, o serviço Agendador de Tarefas é executado com Nt AUTHORITY\SYSTEM.
Tendo gerado a Dll maliciosa (no meu caso, usei um shell reverso x64 e consegui um shell de volta, mas o defender o matou porque era do msfvenom), salve-a no Caminho do Sistema editável com o nome WptsExtensions.dll e reinicie o computador (ou reinicie o serviço ou faça o que for necessário para reexecutar o serviço/programa afetado).
Quando o serviço for reiniciado, a dll deve ser carregada e executada (você pode reutilizar o truque do procmon para verificar se a biblioteca foi carregada conforme esperado).
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o merchandising oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas dicas de hacking enviando PRs para os repositórios do GitHub HackTricks e HackTricks Cloud.