
Passer le hash à un tube nommé pour l'impersonation de jeton
Ce projet est un code de Preuve de Concept (PoC) pour utiliser Pass-the-Hash pour l'authentification sur une impersonation d'utilisateur de Named Pipe locale. Il existe également un article de blog explicatif :
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Il est fortement basé sur le code des projets Invoke-SMBExec.ps1 et RoguePotato.
J'ai été confronté par le passé à certaines situations de projets Offensive Security, où j'avais déjà le hash NTLM d'un compte utilisateur low privileged et avais besoin d'un shell pour cet utilisateur sur le système compromis actuel - mais cela n'était pas possible avec les outils publics actuels. Imaginez deux faits supplémentaires pour une telle situation - le hash NTLM ne pouvait pas être cracké et il n'y a aucun processus de l'utilisateur victime pour y exécuter du shellcode ou migrer dans ce processus. Cela peut sembler un cas limite absurde pour certains d'entre vous. J'ai pourtant expérimenté cela plusieurs fois. Non seulement lors d'un engagement, j'ai passé beaucoup de temps à chercher le bon outil/technique dans cette situation spécifique.
Mes objectifs personnels pour un outil/technique étaient :
low privileged - selon les objectifs de l'engagement, il peut être nécessaire d'accéder à un système avec un utilisateur spécifique tel que le PDG, les comptes RH, les administrateurs SAP ou autresMalheureusement, l'utilisateur impersonné n'a aucune authentification réseau autorisée, car le nouveau processus utilise un jeton d'impersonation qui est restreint. Vous ne pouvez donc utiliser cette technique que pour des actions locales avec un autre utilisateur.
Il existe deux façons d'utiliser cette technique. Soit vous compilez \Resources\PipeServerImpersonate.sln et déposez l'exécutable sur l'hôte distant et vous connectez au Named Pipe via \Resources\Invoke-NamedPipePTH.ps1 :
Ou vous pouvez utiliser le script autonome pour rester en mémoire :
Si vous ne voulez pas déposer un binaire pour exécution, passez simplement des arguments pour des binaires Windows natifs comme 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"