8.8 KiB
Writable Sys Path +Dll Hijacking Privesc
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
Introdução
Se você descobriu que pode escrever em uma pasta do caminho do sistema (observe que isso não funcionará se você puder escrever em uma pasta do caminho do usuário), é possível que você possa elevar privilégios no sistema.
Para fazer isso, você pode abusar de um Dll Hijacking em que você vai sequestrar uma biblioteca 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 do Caminho do Sistema onde você pode escrever.
Para obter mais informações sobre o que é Dll Hijacking, consulte:
{% content-ref url="../dll-hijacking.md" %} dll-hijacking.md {% endcontent-ref %}
Privesc com Dll Hijacking
Encontrando uma Dll ausente
A primeira coisa que você precisa é identificar um processo em execução com mais privilégios do que você que está tentando carregar uma Dll do Caminho do Sistema em que você pode escrever.
O problema nesses casos é que provavelmente esses processos já estão em execução. Para encontrar quais Dlls estão faltando nos serviços que você precisa, inicie o procmon o mais rápido possível (antes que os processos sejam carregados). Então, para encontrar as .dlls ausentes, faça o seguinte:
- Crie a pasta
C:\privesc_hijacking
e adicione o caminhoC:\privesc_hijacking
à variável de ambiente do 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á emOpções
-->Habilitar log de inicialização
e pressioneOK
na janela de prompt. - Em seguida, reinicie o computador. Quando o Windows for reiniciado, o
procmon
começará a gravar eventos imediatamente. - Assim que o Windows for iniciado, execute o
procmon
novamente. Ele informará que está em execução e perguntará se você deseja armazenar os eventos em um arquivo. Responda sim e armazene os eventos em um arquivo. - Depois que o arquivo for gerado, feche a janela do
procmon
aberta e abra o arquivo de eventos. - Adicione esses filtros e você encontrará todas as DLLs que algum processo tentou carregar da pasta do caminho do sistema gravável:
DLLs Perdidas
Ao executar isso em uma máquina virtual (vmware) Windows 11 gratuita, obtive esses resultados:
Neste caso, os arquivos .exe são inúteis, então ignore-os. As DLLs perdidas 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 |
Depois de encontrar isso, encontrei este interessante post de blog que também explica como abusar do WptsExtensions.dll para escalonamento de privilégios. Que é o que vamos fazer agora.
Exploração
Portanto, para escalar privilégios, vamos sequestrar a biblioteca WptsExtensions.dll. Tendo o caminho e o nome, precisamos apenas gerar a DLL maliciosa.
Você pode tentar usar qualquer um desses exemplos. Você pode executar payloads como: obter um shell reverso, adicionar um usuário, executar um beacon...
{% hint style="warning" %}
Observe 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 abusando de suas permissões.
No entanto, esse usuário tem o privilégio seImpersonate
, então você pode usar o conjunto de ferramentas 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 deste artigo, 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 gravável com o nome WptsExtensions.dll e reinicie o computador (ou reinicie o serviço ou faça o que for necessário para executar novamente 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 o esperado).
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e o repositório hacktricks-cloud.