
Passe o Hash para um pipe nomeado para impersonação de token
Este projeto é um código de Prova de Conceito (PoC) para usar Pass-the-Hash na autenticação em um Named Pipe local para Impersonação de usuário. Também há um post no blog com explicações:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Ele é fortemente baseado nos códigos dos projetos Invoke-SMBExec.ps1 e RoguePotato.
No passado, enfrentei certas situações em projetos de Segurança Ofensiva onde já tinha o NTLM-Hash de uma conta de usuário com baixos privilégios e precisava de um shell para aquele usuário no sistema atualmente comprometido — mas isso não era possível com as ferramentas públicas atuais. Imagine mais dois fatos para uma situação como essa — o NTLM Hash não poderia ser quebrado e não existe nenhum processo do usuário vítima para injetar shellcode ou migrar para dentro dele. Isso pode soar como um caso extremo absurdo para alguns de vocês. Ainda assim, vivenciei isso várias vezes. Não apenas em um único engajamento gastei muito tempo procurando a ferramenta/técnica certa para aquela situação específica.
Meus objetivos pessoais para uma ferramenta/técnica eram:
baixos privilégios — dependendo dos objetivos do engajamento, pode ser necessário acessar um sistema com um usuário específico, como o CEO, contas de RH, administradores SAP ou outrosInfelizmente, o usuário impersonado não tem permissão para autenticação em rede, pois o novo processo usa um Token de Impersonação que é restrito. Portanto, você só pode usar esta técnica para ações locais com outro usuário.
Existem duas maneiras de usar esta técnica. Ou você compila \Resources\PipeServerImpersonate.sln e coloca o executável no host remoto e se conecta ao Named Pipe via \Resources\Invoke-NamedPipePTH.ps1:
Ou você pode usar o script autônomo para permanecer na memória:
Se não quiser soltar um binário para execução, basta passar argumentos para binários nativos do Windows, como o PowerShell
Invoke-ImpersonateUser-PTH -Username USERNAME -Hash NTLMHASH -Domain DOMAIN -PipeName mypipe -binary "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -argument "-nop -w 1 -sta -enc BASEBLOB"