hacktricks/network-services-pentesting/pentesting-printers/print-job-manipulation.md
2023-06-03 13:10:46 +00:00

6.9 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Contenu Overlay

Une façon simple de manipuler l'apparence des impressions est d'utiliser des superpositions.
PCL a une fonction documentée pour mettre des macros de superposition sur un document. Malheureusement, cette fonctionnalité est limitée au travail d'impression en cours et ne peut pas être rendue permanente.
PostScript n'offre pas une telle fonctionnalité par défaut, mais elle peut être programmée en redéfinissant l'opérateur showpage qui est contenu dans chaque document PostScript pour imprimer la page en cours. L'attaquant peut s'insérer là, exécuter son propre code et ensuite appeler la version originale de l'opérateur.
Ainsi, elle peut superposer toutes les pages à imprimer avec un fichier EPS personnalisé. Cette astuce peut être utilisée pour ajouter des graphiques ou des polices arbitraires aux copies papier d'un document (Il est possible de modifier complètement l'apparence d'un document en superposant une page blanche et en ajoutant ensuite un contenu personnalisé).
Évidemment, une telle approche ne peut réussir que si PostScript est utilisé comme pilote d'imprimante et qu'aucun StartJobPassword n'est défini.

Comment tester cette attaque ?

Utilisez les commandes cross ou overlay de PRET en mode ps, puis déconnectez-vous et imprimez un document arbitraire :

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> overlay overlays/smiley.eps
printer:/> cross whoa "HACKED"
printer:/> exit

Remplacement de contenu

Même si un attaquant peut superposer un document existant, elle ne pourra pas modifier des valeurs spécifiques dans le document original à moins de connaître sa structure exacte. Parfois, on ne veut pas seulement ajouter un contenu personnalisé, mais analyser et remplacer des parties du document existant.
Le problème de remplacement de texte dans les fichiers PostScript peut être réduit au problème d'extraction de chaînes du document rendu. Ce n'est pas trivial, car les chaînes peuvent être construites dynamiquement par le programme PostScript lui-même. Ainsi, l'analyse et le remplacement simples dans le code source du document ne sont pas une option.
Vous pouvez utiliser un opérateur show redéfini. L'opérateur show accepte une chaîne en entrée, qui est peinte à un certain emplacement de la page actuelle. En redéfinissant l'opérateur, le texte peut être extrait de manière élégante. Cette approche peut également être utilisée pour une recherche et un remplacement ciblés dans les chaînes immédiatement avant qu'elles ne soient peintes.
L'approche est réussie pour les documents PostScript basés sur LaTeX qui sont directement envoyés à l'imprimante, tandis qu'elle échoue pour les fichiers PostScript générés par GIMP qui, au lieu de chaînes, créent des graphiques raster de leur représentation. Le même problème se produit pour tout format de document - même PostScript lui-même - lorsqu'il est traité par CUPS. Théoriquement, de tels langages de construction pourraient également être analysés et devraient faire l'objet de recherches ultérieures.

Comment tester cette attaque ?

Utilisez la commande replace de PRET en mode ps, puis déconnectez et imprimez un document PostScript contenant "DEF" :

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> replace "ABC" "DEF"
printer:/> exit
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥