Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/rub-nds/pret
Seguridad de Sistemas EmbebidosAnálisis de VulnerabilidadesExplotaciónRecopilación de InformaciónFuzzingPruebas de PenetraciónSeguridad de Hardware
GitHubrub-nds/pret

PRET

Printer Exploitation Toolkit - La herramienta que hizo obsoleta la búsqueda en contenedores de basura.

Ver Repositorio
4.3k651hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

PRET - Kit de Explotación de Impresoras

¿Tu impresora es segura? Verifícalo antes de que alguien más lo haga...

PRET es una nueva herramienta para pruebas de seguridad de impresoras desarrollada en el marco de una Tesis de Maestría en la Universidad del Ruhr en Bochum. Se conecta a un dispositivo a través de red o USB y explota las características de un lenguaje de impresión dado. Actualmente se admiten PostScript, PJL y PCL, los cuales son utilizados por la mayoría de las impresoras láser. Esto permite cosas geniales como capturar o manipular trabajos de impresión, acceder al sistema de archivos y memoria de la impresora, o incluso causar daños físicos al dispositivo. Todos los ataques están documentados en detalle en el Wiki de Hacking Printers.

La idea principal de PRET es facilitar la comunicación entre el usuario final y la impresora. De este modo, después de ingresar un comando similar a UNIX, PRET lo traduce a PostScript, PJL o PCL, lo envía a la impresora, evalúa el resultado y lo traduce de vuelta a un formato amigable. PRET ofrece una gran cantidad de comandos útiles para ataques a impresoras y fuzzing.

PRET design

Instalación

PRET solo requiere un intérprete de Python2. Sin embargo, para salida coloreada y soporte SNMP, se deben instalar módulos de terceros:

root@kitploit:~
# pip install colorama pysnmp

Si se ejecuta en una consola de Windows y los caracteres Unicode no se muestran correctamente, instala el módulo win_unicode_console:

root@kitploit:~
# pip install win_unicode_console

Para la impresión experimental 'sin controlador' (ver comando print), es necesario instalar ImageMagick y GhostScript:

root@kitploit:~
# apt-get install imagemagick ghostscript

Uso

root@kitploit:~
usage: pret.py [-h] [-s] [-q] [-d] [-i file] [-o file] target {ps,pjl,pcl}

positional arguments:
  target                printer device or hostname
  {ps,pjl,pcl}          printing language to abuse

optional arguments:
  -h, --help            show this help message and exit
  -s, --safe            verify if language is supported
  -q, --quiet           suppress warnings and chit-chat
  -d, --debug           enter debug mode (show traffic)
  -i file, --load file  load and run commands from file
  -o file, --log file   log raw data sent to the target
Ejemplo de uso:
root@kitploit:~
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
Argumentos posicionales:

PRET requiere un objetivo válido y un lenguaje de impresión como argumentos. El objetivo puede ser la dirección IP/nombre de host de una impresora de red (con el puerto 9100/tcp abierto) o un dispositivo como /dev/usb/lp0 para una impresora USB local. Para descubrir rápidamente todas las impresoras de red en tu subred usando difusión SNMP, simplemente ejecuta PRET sin argumentos:

root@kitploit:~
./pret.py
No target given, discovering local printers

address          device                       uptime    status                 
───────────────────────────────────────────────────────────────────────────────
192.168.1.5      hp LaserJet 4250             10:21:49   Ready                 
192.168.1.11     HP LaserJet M3027 MFP        13 days    Paper jam             
192.168.1.27     Lexmark X792                 153 days   Ready                 
192.168.1.28     Brother MFC-7860DW           16:31:17   Sleep mode            

El lenguaje de impresión a explotar debe ser uno de ps, pjl o pcl. No todos los lenguajes son compatibles con todas las impresoras, por lo que puede que quieras cambiar de idioma si no recibes ninguna respuesta. Cada lenguaje de impresión está mapeado a un conjunto diferente de comandos de PRET y tiene diferentes capacidades para explotar.

Argumentos opcionales:

--safe intenta verificar a través de IPP, HTTP y SNMP si el lenguaje de impresión seleccionado (PS/PJL/PCL) es realmente compatible con el dispositivo antes de conectar. En impresoras no conectadas a la red (USB, cable paralelo) esta prueba fallará.

--quit suprime la determinación del modelo de impresora, el mensaje de introducción y otras charlas.

--debug muestra el flujo de datos realmente enviado al dispositivo y la retroalimentación recibida. Ten en cuenta que los datos de cabecera y otros gastos generales se filtran. Para ver todo el tráfico, usa wireshark. La depuración también se puede activar/desactivar dentro de una sesión de PRET usando el comando debug.

--load archivo lee y ejecuta comandos de PRET desde un archivo de texto. Esto es útil para automatización. Los archivos de comandos también se pueden invocar más tarde dentro de una sesión de PRET mediante el comando load.

--log archivo escribe una copia del flujo de datos sin procesar enviado a la impresora en un archivo. Esto puede ser útil para construir un archivo de trabajo de impresión malicioso que se pueda implementar en otra impresora no directamente accesible, por ejemplo imprimiéndolo desde una unidad USB.

Comandos Genéricos

Después de conectarse a un dispositivo de impresora, verás el shell de PRET y podrás ejecutar varios comandos:

root@kitploit:~
$ ./pret.py laserjet.lan pjl
      ________________
    _/_______________/|
   /___________/___//||   PRET | Printer Exploitation Toolkit v0.25
  |===        |----| ||    by Jens Mueller <[email protected]>
  |           |   ô| ||
  |___________|   ô| ||
  | ||/.´---.||    | ||        「 cause your device can be
  |-||/_____\||-.  | |´           more fun than paper jams 」
  |_||=L==H==||_|__|/

     (ASCII art by
     Jan Foerster)

Connection to laserjet.lan established
Device:   hp LaserJet 4250

Welcome to the pret shell. Type help or ? to list commands.
laserjet.lan:/> help

Available commands (type help <topic>):
=======================================
append  debug    edit    free  id    ls       open      restart   timeout  
cat     delete   env     fuzz  info  mirror   printenv  selftest  touch    
cd      df       exit    get   load  mkdir    put       set       traversal
chvol   disable  find    help  lock  nvram    pwd       site      unlock   
close   display  format  hold  loop  offline  reset     status    version  

laserjet.lan:/> ls ../../
-      834   .profile
d        -   bin
d        -   dev
d        -   etc
d        -   hp
d        -   hpmnt
-     1276   init
d        -   lib
d        -   pipe
d        -   tmp
laserjet.lan:/> exit

A continuación se muestra una lista de comandos genéricos de PRET:

root@kitploit:~
help      List available commands or get detailed help with 'help cmd'.
debug     Enter debug mode. Use 'hex' for hexdump:  debug [hex]
load      Run commands from file:  load cmd.txt
loop      Run command for multiple arguments:  loop <cmd> <arg1> <arg2> …
open      Connect to remote device:  open <target>
close     Disconnect from device.
timeout   Set connection timeout:  timeout <seconds>
discover  Discover local printer devices via SNMP.
print     Print image file or raw text:  print <file>|"text"
site      Execute custom command on printer:  site <command>
exit      Exit the interpreter.

Las operaciones genéricas del sistema de archivos con una implementación específica de PS/PJL/PCL son:

root@kitploit:~
┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Command   │ PS  │ PJL │ PCL │ Description                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ ls        │  ✓  │  ✓  │  ✓  │ Lista el contenido del directorio remoto.     │
│ get       │  ✓  │  ✓  │  ✓  │ Recibe archivo: get <archivo>               │
│ put       │  ✓  │  ✓  │  ✓  │ Envía archivo: put <archivo_local>            │
│ append    │  ✓  │  ✓  │     │ Añade al archivo: append <archivo> <cadena>    │
│ delete    │  ✓  │  ✓  │  ✓  │ Elimina archivo remoto: delete <archivo>      │
│ rename    │  ✓  │     │     │ Renombra archivo remoto: rename <antiguo> <nuevo> │
│ find      │  ✓  │  ✓  │     │ Lista recursivamente el contenido del directorio.   │
│ mirror    │  ✓  │  ✓  │     │ Refleja el sistema de archivos remoto al directorio local. │
│ cat       │  ✓  │  ✓  │  ✓  │ Envía archivo remoto a stdout.          │
│ edit      │  ✓  │  ✓  │  ✓  │ Edita archivos remotos con vim.            │
│ touch     │  ✓  │  ✓  │     │ Actualiza marcas de tiempo: touch <archivo>   │
│ mkdir     │  ✓  │  ✓  │     │ Crea directorio remoto: mkdir <ruta>  │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ cd        │  ✓  │  ✓  │     │ Cambia el directorio de trabajo remoto.       │
│ pwd       │  ✓  │  ✓  │     │ Muestra el directorio de trabajo en el dispositivo.      │
│ chvol     │  ✓  │  ✓  │     │ Cambia volumen remoto: chvol <volumen>   │
│ traversal │  ✓  │  ✓  │     │ Establece path traversal: traversal <ruta>   │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ format    │  ✓  │  ✓  │     │ Inicializa el sistema de archivos de la impresora.      │
│ fuzz      │  ✓  │  ✓  │     │ Fuzzing del sistema de archivos: fuzz <categoría>   │
├─ ─ ─ ─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
│   path   - Explora la estructura del FS con estrategias de path traversal.      │
│   write  - Primero coloca/añade archivo, luego verifica su existencia.      │
│   blind  - Pruebas de solo lectura para archivos existentes como /etc/passwd.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ Muestra información del volumen.               │
│ free      │  ✓  │  ✓  │  ✓  │ Muestra memoria disponible.                 │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘

Comandos en modo PS

root@kitploit:~
id         Muestra información del dispositivo.
version    Muestra la versión del intérprete PostScript.
devices    Muestra los dispositivos de E/S disponibles.
uptime     Muestra el tiempo de actividad del sistema (puede ser aleatorio).
date       Muestra la fecha y hora del sistema de la impresora.
pagecount  Muestra el contador de páginas de la impresora.

lock       Establece la contraseña de startjob y parámetros del sistema.
unlock     Desactiva la contraseña de startjob y parámetros del sistema.
restart    Reinicia el intérprete PostScript.
reset      Restablece la configuración PostScript a los valores de fábrica.
disable    Desactiva la funcionalidad de impresión.
destroy    Causa daño físico a la NVRAM de la impresora.
hang       Ejecuta un bucle infinito PostScript.

overlay    Coloca un archivo EPS superpuesto en todas las copias impresas:  overlay <archivo.eps>
cross      Coloca graffiti de impresora en todas las copias impresas:  cross <fuente> <texto>
replace    Reemplaza cadena en documentos a imprimir:  replace <antiguo> <nuevo>
capture    Captura trabajos adicionales a imprimir en este dispositivo.
hold       Habilita la retención de trabajos.

set        Establece clave en el diccionario superior:  set <clave=valor>
known      Lista los operadores PostScript compatibles:  known <operador>
search     Busca en todos los diccionarios por clave:  search <clave>
dicts      Devuelve una lista de diccionarios y sus permisos.
resource   Lista o vuelca recurso PostScript:  resource <categoría> [dump]

dump       Vuelca diccionario:  dump <diccionario>
  Diccionarios: - systemdict - statusdict - userdict 
                - globaldict - serverdict - errordict
                - internaldict - currentsystemparams
                - currentuserparams - currentpagedevice

config     Cambia la configuración de la impresora:  config <configuración>
  duplex        - Establece impresión a doble cara.
  copies #      - Establece número de copias.
  economode     - Establece modo económico.
  negative      - Establece impresión negativa.
  mirror        - Establece inversión de espejo.

No todos los comandos son compatibles con todas las impresoras. Especialmente los dispositivos Brother y Kyocera utilizan sus propios clones de PostScript – Br-Script y KPDL – en lugar de licenciar el 'Adobe PostScript' original. Tales variedades del lenguaje PostScript pueden no ser 100% compatibles, especialmente en lo que respecta a funciones sensibles a la seguridad como la captura de trabajos de impresión. El acceso al sistema de archivos es compatible con la mayoría de las impresoras, aunque generalmente limitado a un directorio específico y aislado.

Comandos en modo PJL

root@kitploit:~
id         Muestra información del dispositivo.
status     Habilita mensajes de estado.
version    Muestra la versión del firmware o número de serie (de 'info config').
pagecount  Manipula el contador de páginas de la impresora:  pagecount <número>
printenv   Muestra variable de entorno de la impresora:  printenv <VAR>
env        Muestra variables de entorno (alias de 'info variables').
set        Establece variable de entorno de la impresora:  set <VAR=VALOR>

display    Establece mensaje en pantalla de la impresora:  display <mensaje>
offline    Desconecta la impresora y muestra mensaje:  offline <mensaje>
restart    Reinicia la impresora.
reset      Restablece valores de fábrica.
selftest   Realiza varias autopruebas de la impresora.
disable    Desactiva la funcionalidad de impresión.
destroy    Causa daño físico a la NVRAM de la impresora.
flood      Inunda la entrada del usuario, puede revelar desbordamientos de búfer.

lock       Bloquea la configuración del panel de control y el acceso de escritura al disco.
unlock     Desbloquea la configuración del panel de control y el acceso de escritura al disco.
hold       Habilita la retención de trabajos.

nvram      Operaciones NVRAM:  nvram <operación>
  nvram dump [all]           - Vuelca (toda) la NVRAM a un archivo local.
  nvram read addr            - Lee un solo byte de una dirección.
  nvram write addr value     - Escribe un solo byte en una dirección.

info       Muestra información:  info <categoría>
  info config      - Proporciona información de configuración.
  info filesys     - Devuelve información del sistema de archivos PJL.
  info id          - Proporciona el número de modelo de la impresora.
  info memory      - Identifica la cantidad de memoria disponible.
  info pagecount   - Devuelve el número de páginas impresas.
  info status      - Proporciona el estado actual de la impresora.
  info ustatus     - Lista las variables de estado no solicitadas.
  info variables   - Lista las variables de entorno de la impresora.

Algunos comandos son compatibles exclusivamente con impresoras HP, porque otros fabricantes solo han implementado un subconjunto del estándar PJL. Esto es especialmente cierto para comandos basados en PML como restart o reset. Habilitar la retención de trabajos a largo plazo mediante el comando hold parece ser posible solo en algunos dispositivos Epson. El acceso a la NVRAM a través del comando nvram es una característica propietaria de las impresoras Brother. El acceso limitado al sistema de archivos es compatible con varios dispositivos HP, OKI, Konica, Xerox, Epson y Ricoh.

Comandos en modo PCL

root@kitploit:~
selftest   Realiza autoprueba de la impresora.
info       Muestra información:  info <categoría>
  info fonts      - Muestra fuentes instaladas.
  info macros     - Muestra macros instaladas.
  info patterns   - Muestra patrones definidos por el usuario.
  info symbols    - Muestra conjuntos de símbolos.
  info extended   - Muestra fuentes extendidas.

PCL es un lenguaje de descripción de página muy limitado sin acceso al sistema de archivos. Por lo tanto, los comandos get/put/ls utilizan un sistema de archivos virtual basado en macros PCL, implementado principalmente por el valor de 'hack'. Esta prueba de concepto muestra que incluso un dispositivo que solo admite lenguajes minimalistas como PCL puede usarse para almacenar archivos arbitrarios, como material que infringe derechos de autor. Aunque dicho servicio de intercambio de archivos no es una vulnerabilidad de seguridad per se, podría considerarse como 'mal uso del servicio' según la política corporativa.

Listado de Archivos

  • pret.py - Programa principal ejecutable
  • capabilities.py - Rutinas para verificar compatibilidad con lenguaje de impresión
  • discovery.py - Rutinas para listar impresoras usando difusión SNMP
  • printer.py - Código genérico para describir un dispositivo de impresión
  • postscript.py - Código específico de PS (hereda de la clase printer)
  • pjl.py - Código específico de PJL (hereda de la clase printer)
  • pcl.py - Código específico de PCL (hereda de la clase printer)
  • helper.py - Funciones auxiliares para salida, registro, sockets, etc.
  • codebook.py - Tabla estática de códigos de estado/error PJL
  • fuzzer.py - Constantes para fuzzing del sistema de archivos
  • mibs/* - MIBs SNMP específicos de impresora
  • db/* - base de datos de modelos compatibles

Primeros Pasos

Dadas las características y varias extensiones propietarias en lenguajes de impresión como PostScript y PJL, realizar un pentest en impresoras no es un trabajo trivial. PRET puede ayudar a asistir y verificar problemas conocidos en el lenguaje. Una vez que hayas jugado con la herramienta, es posible que desees realizar un análisis de seguridad sistemático de impresoras. Un buen punto de partida es el Cheat Sheet de Pruebas de Seguridad de Impresoras.

¡Feliz Hacking!

Descargar herramienta
  • lpd/* - Scripts para fuzzing LPD