
Printer Exploitation Toolkit - Lo strumento che ha reso obsoleto il frugare nei cassonetti.
La tua stampante è sicura? Controlla prima che lo faccia qualcun altro...
PRET è un nuovo strumento per il test di sicurezza delle stampanti sviluppato nell'ambito di una tesi magistrale presso la Ruhr University Bochum. Si connette a un dispositivo tramite rete o USB e sfrutta le funzionalità di un dato linguaggio di stampa. Attualmente sono supportati PostScript, PJL e PCL che sono utilizzati dalla maggior parte delle stampanti laser. Ciò consente operazioni interessanti come catturare o manipolare lavori di stampa, accedere al file system e alla memoria della stampante o addirittura causare danni fisici al dispositivo. Tutti gli attacchi sono documentati in dettaglio nel Wiki Hacking Printers.
L'idea principale di PRET è facilitare la comunicazione tra l'utente finale e la stampante. Quindi, dopo aver inserito un comando simile a UNIX, PRET lo traduce in PostScript, PJL o PCL, lo invia alla stampante, valuta il risultato e lo ritraduce in un formato user-friendly. PRET offre una vasta gamma di comandi utili per attacchi alle stampanti e fuzzing.

PRET richiede solo un interprete Python2. Tuttavia, per output colorato e supporto SNMP, è necessario installare moduli di terze parti:
# pip install colorama pysnmp
Se si esegue su console Windows e i caratteri Unicode non vengono visualizzati correttamente, installare il modulo win_unicode_console:
# pip install win_unicode_console
Per la stampa sperimentale 'senza driver' (vedi comando print), è necessario installare ImageMagick e 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 richiede un target valido e un linguaggio di stampa come argomenti. Il target può essere l'indirizzo IP/hostname di una stampante di rete (con porta 9100/tcp aperta) o un dispositivo come /dev/usb/lp0 per una stampante USB locale. Per scoprire rapidamente tutte le stampanti di rete nella tua sottorete utilizzando il broadcast SNMP, esegui semplicemente PRET senza argomenti:
./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
Il linguaggio di stampa da sfruttare deve essere uno tra ps, pjl o pcl. Non tutti i linguaggi sono supportati da ogni stampante, quindi potresti voler cambiare lingua se non ricevi alcun feedback. Ogni linguaggio di stampa è associato a un diverso insieme di comandi PRET e ha diverse capacità di sfruttamento.
--safe tenta di verificare tramite IPP, HTTP e SNMP se il linguaggio di stampa selezionato (PS/PJL/PCL) è effettivamente supportato dal dispositivo prima di connettersi. Su stampanti non collegate in rete (USB, cavo parallelo) questo test fallirà.
--quit sopprime la determinazione del modello di stampante, il messaggio introduttivo e altre chiacchiere.
--debug mostra il flusso di dati effettivamente inviato al dispositivo e il feedback ricevuto. Nota che i dati di intestazione e altri overhead sono filtrati. Per vedere tutto il traffico, usa wireshark. Il debug può anche essere attivato/disattivato all'interno di una sessione PRET usando il comando debug
--load filename legge ed esegue comandi PRET da un file di testo. Utile per l'automazione. I file di comando possono anche essere invocati in seguito all'interno di una sessione PRET tramite il comando load.
--log filename scrive una copia del flusso di dati grezzi inviato alla stampante in un file. Può essere utile per creare un file di lavoro di stampa malevolo da distribuire su un'altra stampante non direttamente raggiungibile, ad esempio stampandolo da un'unità USB.
Dopo aver effettuato la connessione a un dispositivo di stampa, vedrai la shell PRET e potrai eseguire vari comandi:
$ ./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
Di seguito è riportato un elenco di comandi PRET generici:
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.
Le operazioni generiche sul file system con implementazione specifica PS/PJL/PCL sono: