
Pass the Hash an eine Named Pipe für Token-Impersonation
Dieses Projekt ist ein PoC-Code zur Nutzung von Pass-the-Hash für die Authentifizierung bei einer lokalen Named Pipe Benutzer-Impersonation. Es gibt auch einen Blogbeitrag zur Erklärung:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Es basiert stark auf dem Code der Projekte Invoke-SMBExec.ps1 und RoguePotato.
Ich bin in der Vergangenheit auf bestimmte Situationen in Offensive-Security-Projekten gestoßen, in denen ich bereits den NTLM-Hash eines niedrig privilegierten Benutzerkontos hatte und eine Shell für diesen Benutzer auf dem aktuell kompromittierten System benötigte – das war jedoch mit den derzeit verfügbaren öffentlichen Tools nicht möglich. Stellen Sie sich zwei weitere Fakten für eine solche Situation vor – der NTLM-Hash konnte nicht geknackt werden und es gibt keinen Prozess des Opferbenutzers, um Shellcode darin auszuführen oder in diesen Prozess zu migrieren. Das mag für einige von Ihnen wie ein absurder Grenzfall klingen. Ich habe das trotzdem mehrfach erlebt. Nicht nur in einem Einsatz habe ich viel Zeit damit verbracht, das richtige Tool/die richtige Technik für diese spezielle Situation zu suchen.
Meine persönlichen Ziele für ein Tool/eine Technik waren:
niedrig privilegierte Konten zu impersonieren – abhängig von den Einsatzzielen kann es erforderlich sein, auf ein System mit einem bestimmten Benutzer zuzugreifen, wie z. B. CEO, HR-Konten, SAP-Administratoren oder andereDer impersonierte Benutzer hat leider keine Netzwerkauthentifizierung erlaubt, da der neue Prozess einen eingeschränkten Impersonation-Token verwendet. Daher können Sie diese Technik nur für lokale Aktionen mit einem anderen Benutzer verwenden.
Es gibt zwei Möglichkeiten, diese Technik zu verwenden. Entweder Sie kompilieren \Resources\PipeServerImpersonate.sln und legen die ausführbare Datei auf dem entfernten Host ab und verbinden sich über \Resources\Invoke-NamedPipePTH.ps1 mit der Named Pipe:
Oder Sie verwenden das eigenständige Skript, um im Speicher zu bleiben:
Wenn Sie keine ausführbare Datei ablegen möchten, übergeben Sie einfach Argumente für native Windows-Binärdateien wie 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"