
Printer Exploitation Toolkit - L'outil qui a rendu la fouille des poubelles obsolète.
Votre imprimante est-elle sécurisée ? Vérifiez avant que quelqu'un d'autre ne le fasse...
PRET est un nouvel outil de test de sécurité des imprimantes développé dans le cadre d'un Mémoire de Master à l'Université de la Ruhr à Bochum. Il se connecte à un périphérique via le réseau ou USB et exploite les fonctionnalités d'un langage d'imprimante donné. Actuellement, PostScript, PJL et PCL sont pris en charge, langages parlés par la plupart des imprimantes laser. Cela permet des choses sympas comme la capture ou la manipulation de travaux d'impression, l'accès au système de fichiers et à la mémoire de l'imprimante, voire même des dommages physiques à l'appareil. Toutes les attaques sont documentées en détail dans le Wiki Hacking Printers.
L'idée principale de PRET est de faciliter la communication entre l'utilisateur final et l'imprimante. Ainsi, après avoir saisi une commande de type UNIX, PRET la traduit en PostScript, PJL ou PCL, l'envoie à l'imprimante, évalue le résultat et le retraduit dans un format convivial pour l'utilisateur. PRET propose tout un ensemble de commandes utiles pour les attaques d'imprimantes et le fuzzing.

PRET nécessite uniquement un interpréteur Python2. Cependant, pour la sortie colorée et le support SNMP, des modules tiers doivent être installés :
# pip install colorama pysnmp
Si vous utilisez une console Windows et que les caractères Unicode ne s'affichent pas correctement, installez le module win_unicode_console :
# pip install win_unicode_console
Pour l'impression expérimentale « sans pilote » (voir la commande print), ImageMagick et GhostScript doivent être installés :
# 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 nécessite une cible valide et un langage d'imprimante comme arguments. La cible peut être soit l'adresse IP/le nom d'hôte d'une imprimante réseau (avec le port 9100/tcp ouvert) soit un périphérique comme /dev/usb/lp0 pour une imprimante USB locale. Pour découvrir rapidement toutes les imprimantes réseau de votre sous-réseau en utilisant la diffusion SNMP, exécutez simplement PRET sans arguments :
./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
Le langage d'imprimante à abuser doit être l'un des suivants : ps, pjl ou pcl. Tous les langages ne sont pas supportés par chaque imprimante, donc vous pouvez changer de langage si vous ne recevez aucun retour. Chaque langage d'imprimante est associé à un ensemble différent de commandes PRET et possède différentes capacités à exploiter.
--safe essaie de vérifier via IPP, HTTP et SNMP si le langage d'impression sélectionné (PS/PJL/PCL) est réellement supporté par l'appareil avant de se connecter. Sur les imprimantes non réseau (USB, câble parallèle), ce test échouera.
--quit supprime la détermination du modèle d'imprimante, le message d'introduction et quelques autres bavardages.
--debug affiche le flux de données réellement envoyé à l'appareil et les retours reçus. Notez que les en-têtes et autres surcharges sont filtrés. Pour voir tout le trafic, utilisez Wireshark. Le débogage peut également être activé/désactivé dans une session PRET à l'aide de la commande debug.
--load filename lit et exécute les commandes PRET à partir d'un fichier texte. Ceci est utile pour l'automatisation. Les fichiers de commandes peuvent également être invoqués ultérieurement dans une session PRET via la commande load.
--log filename écrit une copie du flux de données brutes envoyé à l'imprimante dans un fichier. Cela peut être utile pour construire un fichier de travail d'impression malveillant qui peut être déployé sur une autre imprimante non directement accessible, par exemple en l'imprimant depuis une clé USB.
Après vous être connecté à un périphérique d'imprimante, vous verrez le shell PRET et pourrez exécuter diverses commandes :
$ ./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
Une liste des commandes PRET génériques est donnée ci-dessous :
help Lister les commandes disponibles ou obtenir de l'aide détaillée avec 'help cmd'.
debug Entrer en mode débogage. Utiliser 'hex' pour hexdump : debug [hex]
load Exécuter les commandes depuis un fichier : load cmd.txt
loop Exécuter une commande pour plusieurs arguments : loop <cmd> <arg1> <arg2> …
open Se connecter à un périphérique distant : open <cible>
close Se déconnecter du périphérique.
timeout Définir le délai d'attente de connexion : timeout <secondes>
discover Découvrir les périphériques d'imprimante locaux via SNMP.
print Imprimer un fichier image ou du texte brut : print <fichier>|"texte"
site Exécuter une commande personnalisée sur l'imprimante : site <commande>
exit Quitter l'interpréteur.
Les opérations génériques sur le système de fichiers avec une implémentation spécifique PS/PJL/PCL sont :