9100/tcp - PJL (Printer Job Language)
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Informations de base
D’après here : Raw printing est ce que nous définissons comme le processus consistant à établir une connexion au port 9100/tcp d’une imprimante réseau. C’est la méthode par défaut utilisée par CUPS et l’architecture d’impression Windows pour communiquer avec les imprimantes réseau car elle est considérée comme ‘le protocole réseau le plus simple, le plus rapide et généralement le plus fiable utilisé pour les imprimantes’. Raw port 9100 printing, également appelé JetDirect, AppSocket ou PDL-datastream n’est en réalité pas un protocole d’impression en lui-même. À la place, toutes les données envoyées sont directement traitées par le périphérique d’impression, comme une connexion parallèle sur TCP. Contrairement à LPD, IPP et SMB, ceci peut renvoyer des retours directs au client, y compris des messages d’état et d’erreur. Un tel canal bidirectionnel nous donne un accès direct aux résultats des commandes PJL, PostScript ou PCL. Par conséquent, le raw port 9100 printing — qui est supporté par presque toutes les imprimantes réseau — est utilisé comme canal pour l’analyse de sécurité avec PRET et PFT.
If you want to learn more about hacking printers read this page.
Port par défaut : 9100
9100/tcp open jetdirect
Énumération
Manuelle
nc -vn <IP> 9100
@PJL INFO STATUS #CODE=40000 DISPLAY="Sleep" ONLINE=TRUE
@PJL INFO ID # ID (Brand an version): Brother HL-L2360D series:84U-F75:Ver.b.26
@PJL INFO PRODINFO #Product info
@PJL FSDIRLIST NAME="0:\" ENTRY=1 COUNT=65535 #List dir
@PJL INFO VARIABLES #Env variales
@PJL INFO FILESYS #?
@PJL INFO TIMEOUT #Timeout variables
@PJL RDYMSG #Ready message
@PJL FSINIT
@PJL FSDIRLIST
@PJL FSUPLOAD #Useful to upload a file
@PJL FSDOWNLOAD #Useful to download a file
@PJL FSDELETE #Useful to delete a file
Automatique
nmap -sV --script pjl-ready-message -p <PORT> <IP>
msf> use auxiliary/scanner/printer/printer_env_vars
msf> use auxiliary/scanner/printer/printer_list_dir
msf> use auxiliary/scanner/printer/printer_list_volumes
msf> use auxiliary/scanner/printer/printer_ready_message
msf> use auxiliary/scanner/printer/printer_version_info
msf> use auxiliary/scanner/printer/printer_download_file
msf> use auxiliary/scanner/printer/printer_upload_file
msf> use auxiliary/scanner/printer/printer_delete_file
Outil de Hacking pour imprimantes
C’est l’outil que vous voulez utiliser pour abuser des imprimantes: PRET
Exploitation de la VM XPS/TrueType (Canon ImageCLASS)
-
Envoyer XPS via PJL :
-
@PJL ENTER LANGUAGE = XPS -
Puis envoyer les octets ZIP XPS sur la même connexion TCP.
-
Page XPS minimale référencant une police d’attaquant:
<Glyphs Fill="#ff000000" FontUri="/Resources/evil.ttf" FontRenderingEmSize="12" OriginX="10" OriginY="10"/>
-
Résumé de la primitive RCE (TrueType hinting VM) :
-
Le bytecode de hinting dans TTF est exécuté par une TrueType VM. La VM de Canon n’effectuait pas de vérifications des limites de pile.
-
CINDEX: OOB stack read → info leak
-
DELTAP1: unchecked relative stack pivot → controlled writes with subsequent pushes
-
Combinez
WS/RS(VM storage write/read) pour préparer des valeurs et effectuer une écriture 32-bit précise après le pivot. -
Exploit outline:
- Créer un XPS avec la page ci‑dessus et inclure
/Resources/evil.ttf. - Dans
fpgm/prep, utilisezCINDEXpour leak et calculerstack_cur. - Préparer la valeur cible avec
WS; pivoter avecDELTAP1vers la destination ; utiliserRSpour l’écrire (par ex. vers un pointeur de fonction) afin d’obtenir le contrôle du PC.
- Envoyer sur 9100/tcp:
{ printf "@PJL ENTER LANGUAGE = XPS\r\n"; cat exploit.xps; } | nc -q0 <PRINTER_IP> 9100
exploit.xpsest un ZIP XPS valide contenantDocuments/1/Pages/1.fpageet/Resources/evil.ttf.
Shodan
pjl port:9100
Références
- Hacking printers using fonts (Canon ImageCLASS TrueType VM bugs)
- Apple TrueType Reference Manual – Instruction Set and VM (26.6 fixed point)
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

