Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
PRET — Printer Exploitation Toolkit - Lo strumento che ha reso obsoleto il frugare nei cassonetti. | Kitploit
Strumenti/GitHubGitHub/rub-nds/pret
Sicurezza Sistemi EmbeddedAnalisi delle VulnerabilitàExploitRaccolta InformazioniFuzzingPenetration TestingSicurezza Hardware
GitHubrub-nds/pret

PRET

Printer Exploitation Toolkit - Lo strumento che ha reso obsoleto il frugare nei cassonetti.

Vedi Repository
4.3k6513 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

PRET - Toolkit di sfruttamento delle stampanti

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.

Progettazione PRET

Installazione

PRET richiede solo un interprete Python2. Tuttavia, per output colorato e supporto SNMP, è necessario installare moduli di terze parti:

root@kitploit:~
# pip install colorama pysnmp

Se si esegue su console Windows e i caratteri Unicode non vengono visualizzati correttamente, installare il modulo win_unicode_console:

root@kitploit:~
# pip install win_unicode_console

Per la stampa sperimentale 'senza driver' (vedi comando print), è necessario installare ImageMagick e GhostScript:

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

Utilizzo

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
Esempio di utilizzo:
root@kitploit:~
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
Argomenti posizionali:

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:

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            

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.

Argomenti opzionali:

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

Comandi generici

Dopo aver effettuato la connessione a un dispositivo di stampa, vedrai la shell PRET e potrai eseguire vari comandi:

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

Di seguito è riportato un elenco di comandi PRET generici:

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.

Le operazioni generiche sul file system con implementazione specifica PS/PJL/PCL sono:

root@kitploit:~
┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Comando   │ PS  │ PJL │ PCL │ Descrizione                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ ls        │  ✓  │  ✓  │  ✓  │ Elenca il contenuto della directory remota.     │
│ get       │  ✓  │  ✓  │  ✓  │ Ricevi file: get <file>               │
│ put       │  ✓  │  ✓  │  ✓  │ Invia file: put <file locale>            │
│ append    │  ✓  │  ✓  │     │ Aggiungi al file: append <file> <str>    │
│ delete    │  ✓  │  ✓  │  ✓  │ Elimina file remoto: delete <file>      │
│ rename    │  ✓  │     │     │ Rinomina file remoto: rename <vecchio> <nuovo> │
│ find      │  ✓  │  ✓  │     │ Elenca ricorsivamente il contenuto della directory.   │
│ mirror    │  ✓  │  ✓  │     │ Rispecchia il filesystem remoto in una directory locale. │
│ cat       │  ✓  │  ✓  │  ✓  │ Invia file remoto in stdout.          │
│ edit      │  ✓  │  ✓  │  ✓  │ Modifica file remoti con vim.            │
│ touch     │  ✓  │  ✓  │     │ Aggiorna timestamp file: touch <file>   │
│ mkdir     │  ✓  │  ✓  │     │ Crea directory remota: mkdir <percorso>  │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ cd        │  ✓  │  ✓  │     │ Cambia directory di lavoro remota.       │
│ pwd       │  ✓  │  ✓  │     │ Mostra la directory di lavoro sul dispositivo.      │
│ chvol     │  ✓  │  ✓  │     │ Cambia volume remoto: chvol <volume>   │
│ traversal │  ✓  │  ✓  │     │ Imposta path traversal: traversal <percorso>   │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ format    │  ✓  │  ✓  │     │ Inizializza il filesystem della stampante.      │
│ fuzz      │  ✓  │  ✓  │     │ Fuzzing del filesystem: fuzz <categoria>   │
├─ ─ ─ ─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤
│   path   - Esplora la struttura del filesystem con strategie di path traversal.      │
│   write  - Prima metti/aggiungi file, poi verifica la sua esistenza.      │
│   blind  - Test di sola lettura per file esistenti come /etc/passwd.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ Mostra informazioni sul volume.               │
│ free      │  ✓  │  ✓  │  ✓  │ Mostra memoria disponibile.                 │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘

Comandi in modalità PS

root@kitploit:~
id         Mostra informazioni sul dispositivo.
version    Mostra la versione dell'interprete PostScript.
devices    Mostra i dispositivi I/O disponibili.
uptime     Mostra il tempo di attività del sistema (potrebbe essere casuale).
date       Mostra la data e l'ora del sistema della stampante.
pagecount  Mostra il contatore pagine della stampante.

lock       Imposta la password dei parametri startjob e di sistema.
unlock     Rimuovi la password dei parametri startjob e di sistema.
restart    Riavvia l'interprete PostScript.
reset      Ripristina le impostazioni PostScript ai valori di fabbrica.
disable    Disabilita la funzionalità di stampa.
destroy    Causa danni fisici alla NVRAM della stampante.
hang       Esegui un ciclo infinito PostScript.

overlay    Metti file eps di overlay su tutte le copie cartacee: overlay <file.eps>
cross      Metti graffiti della stampante su tutte le copie: cross <font> <testo>
replace    Sostituisci stringa nei documenti da stampare: replace <vecchio> <nuovo>
capture    Cattura i prossimi lavori da stampare su questo dispositivo.
hold       Abilita la conservazione dei lavori.

set        Imposta chiave a valore nel dizionario superiore: set <chiave=valore>
known      Elenca operatori PostScript supportati: known <operatore>
search     Cerca in tutti i dizionari per chiave: search <chiave>
dicts      Restituisce un elenco di dizionari e i loro permessi.
resource   Elenca o scarica risorsa PostScript: resource <categoria> [dump]

dump       Scarica dizionario: dump <dict>
  Dizionari: - systemdict - statusdict - userdict 
                - globaldict - serverdict - errordict
                - internaldict - currentsystemparams
                - currentuserparams - currentpagedevice

config     Cambia impostazioni stampante: config <impostazione>
  duplex        - Imposta stampa fronte/retro.
  copies #      - Imposta numero di copie.
  economode     - Imposta modalità economica.
  negative      - Imposta stampa negativa.
  mirror        - Imposta inversione speculare.

Non tutti i comandi sono supportati da ogni stampante. Soprattutto i dispositivi Brother e Kyocera utilizzano i propri cloni PostScript – Br-Script e KPDL – invece di licenziare l'originale 'Adobe PostScript'. Tali varianti del linguaggio PostScript potrebbero non essere compatibili al 100%, specialmente per quanto riguarda le funzionalità sensibili alla sicurezza come la cattura dei lavori di stampa. L'accesso al filesystem è supportato dalla maggior parte delle stampanti, ma di solito limitato a una determinata directory in sandbox.

Comandi in modalità PJL

root@kitploit:~
id         Mostra informazioni sul dispositivo.
status     Abilita messaggi di stato.
version    Mostra versione firmware o numero di serie (da 'info config').
pagecount  Manipola il contatore pagine della stampante: pagecount <numero>
printenv   Mostra variabile d'ambiente della stampante: printenv <VAR>
env        Mostra variabili d'ambiente (alias per 'info variables').
set        Imposta variabile d'ambiente della stampante: set <VAR=VALORE>

display    Imposta messaggio sul display della stampante: display <messaggio>
offline    Porta la stampante offline e mostra messaggio: offline <messaggio>
restart    Riavvia stampante.
reset      Ripristina ai valori di fabbrica.
selftest   Esegue vari autotest della stampante.
disable    Disabilita funzionalità di stampa.
destroy    Causa danni fisici alla NVRAM della stampante.
flood      Inonda l'input utente, potrebbe rivelare buffer overflow.

lock       Blocca impostazioni pannello di controllo e accesso in scrittura al disco.
unlock     Sblocca impostazioni pannello di controllo e accesso in scrittura al disco.
hold       Abilita conservazione lavori.

nvram      Operazioni NVRAM: nvram <operazione>
  nvram dump [all]           - Scarica (tutta) la NVRAM su file locale.
  nvram read addr            - Legge un singolo byte dall'indirizzo.
  nvram write addr value     - Scrive un singolo byte all'indirizzo.

info       Mostra informazioni: info <categoria>
  info config      - Fornisce informazioni di configurazione.
  info filesys     - Restituisce informazioni sul filesystem PJL.
  info id          - Fornisce il numero del modello della stampante.
  info memory      - Identifica la quantità di memoria disponibile.
  info pagecount   - Restituisce il numero di pagine stampate.
  info status      - Fornisce lo stato corrente della stampante.
  info ustatus     - Elenca le variabili di stato non richieste.
  info variables   - Elenca le variabili d'ambiente della stampante.

Alcuni comandi sono supportati esclusivamente dalle stampanti HP, perché altri produttori hanno implementato solo un sottoinsieme dello standard PJL. Ciò è particolarmente vero per i comandi basati su PML come restart o reset. L'abilitazione della conservazione a lungo termine dei lavori tramite il comando hold sembra possibile solo per alcuni dispositivi Epson. L'accesso alla NVRAM tramite il comando nvram è una caratteristica proprietaria delle stampanti Brother. L'accesso limitato al filesystem è supportato da vari dispositivi HP, OKI, Konica, Xerox, Epson e Ricoh.

Comandi in modalità PCL

root@kitploit:~
selftest   Esegue l'autotest della stampante.
info       Mostra informazioni: info <categoria>
  info fonts      - Mostra i font installati.
  info macros     - Mostra le macro installate.
  info patterns   - Mostra i pattern definiti dall'utente.
  info symbols    - Mostra i set di simboli.
  info extended   - Mostra i font estesi.

PCL è un linguaggio di descrizione della pagina molto limitato senza accesso al filesystem. I comandi get/put/ls utilizzano quindi un filesystem virtuale basato su macro PCL, implementato principalmente per il valore di hacking. Questa prova di concetto mostra che anche un dispositivo che supporta solo linguaggi minimalisti come PCL può essere utilizzato per memorizzare file arbitrari come materiale che viola il copyright. Sebbene tale servizio di condivisione file non sia di per sé una vulnerabilità di sicurezza, potrebbe costituire un 'abuso del servizio' a seconda delle politiche aziendali.

Elenco file

  • pret.py - Programma principale eseguibile
  • capabilities.py - Routine per verificare il supporto del linguaggio di stampa
  • discovery.py - Routine per elencare le stampanti usando broadcast SNMP
  • printer.py - Codice generico per descrivere un dispositivo di stampa
  • postscript.py - Codice specifico PS (eredita dalla classe printer)
  • pjl.py - Codice specifico PJL (eredita dalla classe printer)
  • pcl.py - Codice specifico PCL (eredita dalla classe printer)
  • helper.py - Funzioni di supporto per output, logging, socket, ecc.
  • codebook.py - Tabella statica dei codici di stato/errore PJL
  • fuzzer.py - Costanti per il fuzzing del filesystem
  • mibs/* - MIB SNMP specifici della stampante
  • db/* - database dei modelli supportati

Per iniziare

Date le funzionalità e le varie estensioni proprietarie nei linguaggi di stampa come PostScript e PJL, condurre un pentest sulle stampanti non è un compito banale. PRET può aiutare ad assistere e verificare i problemi noti nel linguaggio. Una volta che hai giocato con lo strumento, potresti voler eseguire un'analisi sistematica della sicurezza della stampante. Un buon punto di partenza è il Printer Security Testing Cheat Sheet.

Happy Hacking!

Scarica lo strumento
  • lpd/* - Script per il fuzzing LPD