Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
PRET — Printer Exploitation Toolkit - L'outil qui a rendu la fouille des poubelles obsolète. | Kitploit
Outils/GitHubGitHub/rub-nds/pret
Sécurité des Systèmes EmbarquésAnalyse des VulnérabilitésExploitationCollecte d'InformationsFuzzingTests d'IntrusionSécurité Matérielle
GitHubrub-nds/pret

PRET

Printer Exploitation Toolkit - L'outil qui a rendu la fouille des poubelles obsolète.

Voir le dépôt
4.3k651il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

PRET - Kit d'exploitation d'imprimantes

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 design

Installation

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 :

root@kitploit:~
# 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 :

root@kitploit:~
# pip install win_unicode_console

Pour l'impression expérimentale « sans pilote » (voir la commande print), ImageMagick et GhostScript doivent être installés :

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

Usage

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
Exemple d'utilisation :
root@kitploit:~
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
Arguments positionnels :

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 :

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            

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.

Arguments optionnels :

--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.

Generic Commands

Après vous être connecté à un périphérique d'imprimante, vous verrez le shell PRET et pourrez exécuter diverses commandes :

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

Une liste des commandes PRET génériques est donnée ci-dessous :

root@kitploit:~
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 :

root@kitploit:~
┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Commande  │ PS  │ PJL │ PCL │ Description                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ ls        │  ✓  │  ✓  │  ✓  │ Lister le contenu d'un répertoire distant.     │
│ get       │  ✓  │  ✓  │  ✓  │ Recevoir un fichier : get <fichier>               │
│ put       │  ✓  │  ✓  │  ✓  │ Envoyer un fichier : put <fichier local>            │
│ append    │  ✓  │  ✓  │     │ Ajouter à un fichier : append <fichier> <chaîne>    │
│ delete    │  ✓  │  ✓  │  ✓  │ Supprimer un fichier distant : delete <fichier>      │
│ rename    │  ✓  │     │     │ Renommer un fichier distant : rename <ancien> <nouveau> │
│ find      │  ✓  │  ✓  │     │ Lister récursivement le contenu d'un répertoire.   │
│ mirror    │  ✓  │  ✓  │     │ Miroiter le système de fichiers distant vers un répertoire local. │
│ cat       │  ✓  │  ✓  │  ✓  │ Afficher un fichier distant sur stdout.          │
│ edit      │  ✓  │  ✓  │  ✓  │ Éditer des fichiers distants avec vim.            │
│ touch     │  ✓  │  ✓  │     │ Mettre à jour les horodatages des fichiers : touch <fichier>   │
│ mkdir     │  ✓  │  ✓  │     │ Créer un répertoire distant : mkdir <chemin>  │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ cd        │  ✓  │  ✓  │     │ Changer de répertoire de travail distant.       │
│ pwd       │  ✓  │  ✓  │     │ Afficher le répertoire de travail sur l'appareil.      │
│ chvol     │  ✓  │  ✓  │     │ Changer de volume distant : chvol <volume>   │
│ traversal │  ✓  │  ✓  │     │ Définir le chemin de traversée : traversal <chemin>   │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ format    │  ✓  │  ✓  │     │ Initialiser le système de fichiers de l'imprimante.      │
│ fuzz      │  ✓  │  ✓  │     │ Fuzzing du système de fichiers : fuzz <catégorie>   │
├─ ─ ─ ─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤
│   chemin - Explorer la structure du système de fichiers avec des stratégies de traversée de chemin.      │
│   écriture - D'abord mettre/ajouter un fichier, puis vérifier son existence.  │
│   aveugle - Tests en lecture seule pour les fichiers existants comme /etc/passwd.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ Afficher les informations de volume.               │
│ free      │  ✓  │  ✓  │  ✓  │ Afficher la mémoire disponible.                 │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘

Commandes en mode PS

root@kitploit:~
id         Afficher les informations du périphérique.
version    Afficher la version de l'interpréteur PostScript.
devices    Afficher les périphériques d'E/S disponibles.
uptime     Afficher la durée de fonctionnement du système (peut être aléatoire).
date       Afficher la date et l'heure système de l'imprimante.
pagecount  Afficher le compteur de pages de l'imprimante.

lock       Définir le mot de passe des paramètres startjob et système.
unlock     Supprimer le mot de passe des paramètres startjob et système.
restart    Redémarrer l'interpréteur PostScript.
reset      Réinitialiser les paramètres PostScript aux valeurs d'usine.
disable    Désactiver la fonctionnalité d'impression.
destroy    Causer des dommages physiques à la NVRAM de l'imprimante.
hang       Exécuter une boucle infinie PostScript.

overlay    Mettre un fichier eps en superposition sur toutes les copies papier : overlay <fichier.eps>
cross      Mettre un graffiti d'imprimante sur toutes les copies papier : cross <police> <texte>
replace    Remplacer une chaîne dans les documents à imprimer : replace <ancien> <nouveau>
capture    Capturer les travaux supplémentaires à imprimer sur ce périphérique.
hold       Activer la rétention des travaux.

set        Définir une clé à une valeur dans le dictionnaire le plus haut : set <clé=valeur>
known      Lister les opérateurs PostScript pris en charge : known <opérateur>
search     Rechercher dans tous les dictionnaires par clé : search <clé>
dicts      Retourner une liste des dictionnaires et de leurs permissions.
resource   Lister ou vider une ressource PostScript : resource <catégorie> [dump]

dump       Vider un dictionnaire : dump <dict>
  Dictionnaires : - systemdict - statusdict - userdict 
                - globaldict - serverdict - errordict
                - internaldict - currentsystemparams
                - currentuserparams - currentpagedevice

config     Modifier les paramètres de l'imprimante : config <paramètre>
  duplex        - Définir l'impression recto-verso.
  copies #      - Définir le nombre de copies.
  economode     - Définir le mode économique.
  negative      - Définir l'impression négative.
  mirror        - Définir l'inversion miroir.

Toutes les commandes ne sont pas supportées par toutes les imprimantes. Notamment les appareils Brother et Kyocera utilisent leurs propres clones PostScript – Br-Script et KPDL – au lieu de licencier l'« Adobe PostScript » original. Ces variantes du langage PostScript peuvent ne pas être 100 % compatibles, surtout en ce qui concerne les fonctionnalités sensibles à la sécurité comme la capture de travaux d'impression. L'accès au système de fichiers est supporté par la plupart des imprimantes, mais généralement limité à un certain répertoire cloisonné.

Commandes en mode PJL

root@kitploit:~
id         Afficher les informations du périphérique.
status     Activer les messages d'état.
version    Afficher la version du firmware ou le numéro de série (depuis 'info config').
pagecount  Manipuler le compteur de pages de l'imprimante : pagecount <nombre>
printenv   Afficher une variable d'environnement de l'imprimante : printenv <VAR>
env        Afficher les variables d'environnement (alias pour 'info variables').
set        Définir une variable d'environnement de l'imprimante : set <VAR=VALEUR>

display    Définir le message d'affichage de l'imprimante : display <message>
offline    Mettre l'imprimante hors ligne et afficher un message : offline <message>
restart    Redémarrer l'imprimante.
reset      Réinitialiser aux valeurs d'usine.
selftest   Effectuer divers auto-tests de l'imprimante.
disable    Désactiver la fonctionnalité d'impression.
destroy    Causer des dommages physiques à la NVRAM de l'imprimante.
flood      Inonder l'entrée utilisateur, peut révéler des débordements de tampon.

lock       Verrouiller les paramètres du panneau de contrôle et l'accès en écriture au disque.
unlock     Déverrouiller les paramètres du panneau de contrôle et l'accès en écriture au disque.
hold       Activer la rétention des travaux.

nvram      Opérations NVRAM : nvram <opération>
  nvram dump [all]           - Vider (toute) la NVRAM dans un fichier local.
  nvram read addr            - Lire un seul octet à une adresse.
  nvram write addr value     - Écrire un seul octet à une adresse.

info       Afficher des informations : info <catégorie>
  info config      - Fournit des informations de configuration.
  info filesys     - Retourne les informations du système de fichiers PJL.
  info id          - Fournit le numéro de modèle de l'imprimante.
  info memory      - Identifie la quantité de mémoire disponible.
  info pagecount   - Retourne le nombre de pages imprimées.
  info status      - Fournit le statut actuel de l'imprimante.
  info ustatus     - Liste les variables de statut non sollicitées.
  info variables   - Liste les variables d'environnement de l'imprimante.

Certaines commandes sont supportées exclusivement par les imprimantes HP, car d'autres fabricants n'ont implémenté qu'un sous-ensemble du standard PJL. C'est particulièrement vrai pour les commandes basées sur PML comme restart ou reset. L'activation de la rétention à long terme des travaux via la commande hold semble n'être possible que pour certains appareils Epson. L'accès à la NVRAM via la commande nvram est une fonctionnalité propriétaire des imprimantes Brother. Un accès limité au système de fichiers est supporté par divers appareils HP, OKI, Konica, Xerox, Epson et Ricoh.

Commandes en mode PCL

root@kitploit:~
selftest   Effectuer un auto-test de l'imprimante.
info       Afficher des informations : info <catégorie>
  info fonts      - Afficher les polices installées.
  info macros     - Afficher les macros installées.
  info patterns   - Afficher les motifs définis par l'utilisateur.
  info symbols    - Afficher les jeux de symboles.
  info extended   - Afficher les polices étendues.

PCL est un langage de description de page très limité sans accès au système de fichiers. Les commandes get/put/ls utilisent donc un système de fichiers virtuel basé sur des macros PCL, implémenté principalement pour la valeur de piratage. Cette preuve de concept montre que même un appareil qui ne supporte que des langages minimalistes comme PCL peut être utilisé pour stocker des fichiers arbitraires comme du matériel portant atteinte aux droits d'auteur. Bien qu'un tel service de partage de fichiers ne soit pas une vulnérabilité de sécurité en soi, il pourrait être considéré comme un « détournement de service » selon la politique de l'entreprise.

File Listing

  • pret.py - Programme principal exécutable
  • capabilities.py - Routines pour vérifier le support du langage d'imprimante
  • discovery.py - Routines pour lister les imprimantes via diffusion SNMP
  • printer.py - Code générique pour décrire un périphérique d'impression
  • postscript.py - Code spécifique PS (hérite de la classe printer)
  • pjl.py - Code spécifique PJL (hérite de la classe printer)
  • pcl.py - Code spécifique PCL (hérite de la classe printer)
  • helper.py - Fonctions d'aide pour la sortie, la journalisation, les sockets, etc.
  • codebook.py - Table statique des codes d'état/erreur PJL
  • fuzzer.py - Constantes pour le fuzzing du système de fichiers
  • mibs/* - MIBs SNMP spécifiques à l'imprimante
  • db/* - Base de données des modèles supportés

Getting Started

Étant donné les fonctionnalités et les diverses extensions propriétaires dans les langages d'impression comme PostScript et PJL, mener un pentest sur des imprimantes n'est pas un travail trivial. PRET peut aider à assister et à vérifier les problèmes connus dans le langage. Une fois que vous avez joué avec l'outil, vous voudrez peut-être effectuer une analyse de sécurité systématique des imprimantes. Un bon point de départ est le Aide-mémoire pour les tests de sécurité des imprimantes.

Bon hacking !

Télécharger l’outil
  • lpd/* - Scripts pour le fuzzing LPD