
Die Windows Print Spooler Schwachstelle zur Privilegienausweitung (CVE-2019-1040/CVE-2019-1019) wurde als Reflective DLL für Penetrationstests implementiert.
PrintSpoofer ist ein Tool, das eine lokale Privilegienausweitung durchführt, indem es eine Sicherheitslücke im Windows-Print-Spooler-Dienst ausnutzt (CVE-2019-1040 / CVE-2019-1019). Dieses Projekt implementiert den PrintSpoofer-Exploit im Reflective-DLL-Format, was ihn für den Einsatz mit Penetrationstest-Frameworks wie Cobalt Strike geeignet macht.
PrintSpoofer nutzt eine Sicherheitslücke im Windows-Print-Spooler-Dienst aus, die es einem Benutzer mit niedrigen Rechten ermöglicht, SYSTEM-Berechtigungen zu erlangen. Der Exploit missbraucht die Art und Weise, wie der Print-Spooler-Dienst benannte Pipes (Named Pipes) behandelt.
PrintSpoofer funktioniert, indem es die folgenden Schritte ausführt:
Der Exploit prüft zunächst, ob das aktuelle Token über das SE_IMPERSONATE_NAME-Privileg verfügt. Dies ist erforderlich, um das Token eines anderen Benutzers zu imitieren.
Eine benannte Pipe wird mit einer zufälligen UUID erstellt. Der Pipe-Pfad lautet:
\\.\pipe\<UUID>\pipe\spoolss
Auf dem erstellten Named Pipe wird auf eine asynchrone Verbindung gewartet. Ein Ereignis wird erstellt, und die Pipe wird darauf vorbereitet, eingehende Verbindungen zu akzeptieren.
In einem separaten Thread wird ein RPC-Aufruf an den Print-Spooler-Dienst getätigt. Durch das Aufrufen von RpcRemoteFindFirstPrinterChangeNotificationEx versucht der Dienst, eine Verbindung zu der von uns erstellten Pipe herzustellen.
Wenn der Print-Spooler-Dienst (der als SYSTEM läuft) eine Verbindung zur benannten Pipe herstellt, verwendet der Exploit ImpersonateNamedPipeClient, um das Token des Dienstes zu imitieren. Dies führt zur Erlangung von SYSTEM-Berechtigungen.
Mit einem SYSTEM-Token können nun Aktionen mit hohen Berechtigungen ausgeführt werden.
Der Windows-Print-Spooler-Dienst verarbeitet Druckerbenachrichtigungen über Named Pipes. Da der Dienst Pipe-Verbindungen nicht ordnungsgemäß validiert, kann ein Angreifer ihn dazu zwingen, eine Verbindung zu einer schädlichen Pipe herzustellen und anschließend das SYSTEM-Token zu imitieren.
Das Projekt kommuniziert mit dem Print-Spooler-Dienst über das MS-RPRN (Print System Remote Protocol). Dieses Protokoll wird über eine IDL-Datei (Interface Definition Language) definiert und ermöglicht RPC-Aufrufe.
Eine Reflective-DLL verhält sich anders als Standard-DLLs:
LoadLibrary-APIx64 oder Win32 (je nach Zielarchitektur)Release (Produktion) oder Debug (Entwicklung)Build Solution (Strg+Umschalt+B).PrintSpoofer\x64\Release\PrintSpoofer.dll (für x64)
PrintSpoofer\Win32\Release\PrintSpoofer.dll (für x86)
Das Projekt verwendet die folgenden Präprozessordefinitionen:
REFLECTIVE_DLL_EXPORTS: Aktiviert Reflective-DLL-ExporteREFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN: Verwendet eine benutzerdefinierte DllMainREFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR: Aktiviert LoadRemoteLibraryR (im Release-Modus)PrintSpoofer kann mit dem Befehl elevate von Cobalt Strike verwendet werden:
elevate PrintSpoofer LISTENER_NAME
Wobei:
PrintSpoofer: Der Name des Elevator-ModulsLISTENER_NAME: Der Listener, der die erhöhte Shell empfangen wirdDie DLL kann manuell mithilfe von Reflective-DLL-Injection-Techniken geladen werden.
Eine erfolgreiche Exploit-Ausführung zeigt:
[+] Found privilege: SeImpersonatePrivilege
[+] Named pipe listening...
[+] ImpersonateNamedPipeClient OK
[+] Exploit successfully, enjoy your shell
dllmain.cppDllMain)PrintSpoofer.cppms-rprn.idlReflectiveLoader.cppDieses Tool ist ausschließlich für Bildungszwecke und für autorisierte Penetrationstests bestimmt.
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Weitere Informationen finden Sie in der LIZENZ-Datei.