9100/tcp - PJL (Printer Job Language)

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

Desde esta página: Raw printing es lo que definimos como el proceso de establecer una conexión al puerto 9100/tcp de una impresora de red. Es el método predeterminado usado por CUPS y la arquitectura de impresión de Windows para comunicarse con impresoras de red, ya que se considera ‘the simplest, fastest, and generally the most reliable network protocol used for printers’. La impresión raw por el puerto 9100, también denominada JetDirect, AppSocket o PDL-datastream, en realidad no es un protocolo de impresión por sí mismo. En su lugar, todos los datos enviados son procesados directamente por el dispositivo de impresión, tal como una conexión paralela sobre TCP. En contraste con LPD, IPP y SMB, esto puede enviar retroalimentación directa al cliente, incluyendo mensajes de estado y de error. Un canal bidireccional así nos da acceso directo a los resultados de comandos PJL, PostScript o PCL. Por tanto, la impresión raw por puerto 9100 —que es soportada por casi cualquier impresora de red— se usa como canal para el análisis de seguridad con PRET y PFT.

Si quieres aprender más sobre hacking printers read this page.

Puerto por defecto: 9100

9100/tcp open  jetdirect

Enumeración

Manual

nc -vn <IP> 9100
@PJL INFO STATUS      #CODE=40000   DISPLAY="Sleep"   ONLINE=TRUE
@PJL INFO ID          # ID (Brand an version): Brother HL-L2360D series:84U-F75:Ver.b.26
@PJL INFO PRODINFO    #Product info
@PJL FSDIRLIST NAME="0:\" ENTRY=1 COUNT=65535  #List dir
@PJL INFO VARIABLES   #Env variales
@PJL INFO FILESYS     #?
@PJL INFO TIMEOUT     #Timeout variables
@PJL RDYMSG           #Ready message
@PJL FSINIT
@PJL FSDIRLIST
@PJL FSUPLOAD         #Useful to upload a file
@PJL FSDOWNLOAD       #Useful to download a file
@PJL FSDELETE         #Useful to delete a file

Automático

nmap -sV --script pjl-ready-message -p <PORT> <IP>
msf> use auxiliary/scanner/printer/printer_env_vars
msf> use auxiliary/scanner/printer/printer_list_dir
msf> use auxiliary/scanner/printer/printer_list_volumes
msf> use auxiliary/scanner/printer/printer_ready_message
msf> use auxiliary/scanner/printer/printer_version_info
msf> use auxiliary/scanner/printer/printer_download_file
msf> use auxiliary/scanner/printer/printer_upload_file
msf> use auxiliary/scanner/printer/printer_delete_file

Herramienta para Hacking de impresoras

Esta es la herramienta que quieres usar para abusar de impresoras: PRET

XPS/TrueType VM exploitation (Canon ImageCLASS)

  • Enviar XPS sobre PJL:

  • @PJL ENTER LANGUAGE = XPS

  • Luego envía los bytes del ZIP XPS en la misma conexión TCP.

  • Página XPS mínima que referencia una fuente maliciosa:

<Glyphs Fill="#ff000000" FontUri="/Resources/evil.ttf" FontRenderingEmSize="12" OriginX="10" OriginY="10"/>
  • Resumen de la primitiva RCE (TrueType hinting VM):

  • El bytecode de hinting en TTF es ejecutado por una VM TrueType. La VM de Canon carecía de comprobaciones de límites de pila.

  • CINDEX: lectura OOB de la pila → leak de información

  • DELTAP1: pivote relativo de pila sin comprobaciones → escrituras controladas con pushes posteriores

  • Combinar WS/RS (VM storage write/read) para preparar valores y realizar una escritura precisa de 32 bits tras el pivot.

  • Esquema del exploit:

  1. Crear XPS con la página anterior e incluir /Resources/evil.ttf.
  2. En fpgm/prep, usar CINDEX para leak y calcular stack_cur.
  3. Preparar el valor objetivo con WS; pivotar con DELTAP1 hacia el destino; usar RS para escribirlo (p. ej., en un puntero de función) para obtener control del PC.
  • Enviar por 9100/tcp:
{ printf "@PJL ENTER LANGUAGE = XPS\r\n"; cat exploit.xps; } | nc -q0 <PRINTER_IP> 9100
  • exploit.xps es un XPS ZIP válido que contiene Documents/1/Pages/1.fpage y /Resources/evil.ttf.

Shodan

  • pjl port:9100

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks