hacktricks/network-services-pentesting/pentesting-printers/accounting-bypass.md

93 lines
10 KiB
Markdown
Raw Normal View History

<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres moyens de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
2022-05-01 12:49:36 +00:00
# **Introduction**
**Imprimer sans autorisation** peut en soi constituer un risque de sécurité ou une violation de la politique de l'entreprise. Dans les environnements où les travaux d'impression sont facturés, un attaquant interne a une motivation pour contourner le système de comptabilité. De plus, être capable d'imprimer est une condition préalable pour la plupart des attaques contre les imprimantes réseau.
Il existe deux approches principales en matière de comptabilité des travaux d'impression : soit **laisser l'imprimante gérer directement, soit utiliser un serveur d'impression intermédiaire**. La première approche est spécifique au fournisseur, implique généralement une sorte de pilote d'imprimante spécial et n'est pas discutée ici. L'autre approche implique un serveur d'impression séparé généralement une implémentation logicielle comme [CUPS](https://en.wikipedia.org/wiki/CUPS) ou [LPRng](https://en.wikipedia.org/wiki/LPRng) pour gérer la comptabilité et est assez courante dans les entreprises et les institutions. Le serveur d'impression peut utiliser LPD, IPP ou d'autres protocoles d'impression et transfère les travaux vers l'imprimante réelle. **Il est important de noter que l'accès direct au réseau de l'imprimante doit être restreint**, sinon un attaquant peut **facilement contourner le serveur d'impression** et ses mécanismes de comptabilité. Cela signifie filtrer l'accès aux ports typiques et atypiques (LPD, IPP, brut, HTTP, SMB, FTP, SNMP).
Il existe essentiellement deux approches pour contourner les systèmes de comptabilité des travaux d'impression : soit **usurper l'identité d'un autre utilisateur, soit manipuler le compteur** de pages imprimées. Dans la suite, les deux options sont discutées pour les installations LPRng (v3.8.B) et CUPS (v2.1.4) qui sont des systèmes d'impression open-source populaires utilisés dans les environnements académiques et d'entreprise. Une comparaison des fonctionnalités de sécurité des deux systèmes est donnée ci-dessous.
2023-06-03 13:10:46 +00:00
| Système d'impression | Protocole | Chiffrement | Authentification | Compteur de pages |
| -------------------- | --------- | ----------- | ---------------- | ----------------- |
| **LPRng** | LPD | SSL/TLS | Kerberos, PGP | matériel |
| **CUPS** | IPP | SSL/TLS | Kerberos, HTTP | logiciel |
# Contournements d'authentification
LPRng et CUPS offrent tous deux un chiffrement de canal basé sur SSL et des schémas d'authentification sécurisés tels que [Kerberos](https://en.wikipedia.org/wiki/Kerberos\_\(protocol\)), [PGP](https://en.wikipedia.org/wiki/Pretty\_Good\_Privacy) signant des travaux d'impression ou une authentification HTTP [basic](https://en.wikipedia.org/wiki/Basic\_access\_authentication)/[digest](https://en.wikipedia.org/wiki/Digest\_access\_authentication). Si **configuré correctement** et dans le cas où l'attaquant ne peut pas accéder directement à l'imprimante, il ne sera **pas capable d'usurper l'identité d'autres utilisateurs**. Cependant, ces fonctionnalités de sécurité sont **optionnelles et rarement appliquées** dans les serveurs d'impression réels. Au lieu de cela, les **noms d'utilisateur donnés en tant que paramètres LPD (LPRng) ou IPP (CUPS) sont enregistrés et comptabilisés** qui peuvent être définis à des valeurs arbitraires par le côté client. La raison en est une simple considération coût-bénéfice dans la plupart des institutions : **Kerberos nécessite une configuration spéciale** sur chaque client et l'authentification **HTTP** **exige** des utilisateurs d'entrer un **mot de passe** chaque fois qu'ils veulent imprimer quelque chose alors que le coût de quelques impressions non comptabilisées est supportable.
Vous pouvez **vérifier une authentification appropriée** en essayant d'imprimer avec un **nom d'utilisateur personnalisé** comme ceci :
```
lp -U nobody test.ps
```
2023-06-03 13:10:46 +00:00
# Manipulation du compteur de pages
2023-06-03 13:10:46 +00:00
## Compteurs de pages matériels
Pour une comptabilité correcte, **le nombre de pages imprimées doit être déterminé** par le système d'impression, ce qui n'est pas une tâche triviale. Les auteurs de **LPRng** _partent du principe que l'imprimante dispose d'une sorte de mécanisme de compteur de pages non-volatile fiable et insensible aux cycles de mise sous/hors tension_. De tels **compteurs de pages matériels** sont pris en charge par la plupart des imprimantes et **lus** par LPRng **à l'aide de PJL après** chaque **travail d'impression**. **HP** a même documenté une fonctionnalité pour **écrire** sur la variable du **compteur de pages** en mettant l'imprimante en mode service. De cette façon, le **compteur de pages** des _HP LaserJet 1200, HP LaserJet 4200N_ et _HP LaserJet 4250N_ **peut être manipulé** au sein d'un travail d'impression. À la fin du document à imprimer et séparé par le [UEL](./#uel), le compteur doit simplement être réinitialisé à sa valeur d'origine (par exemple, `2342`) :
```
\x1b%-12345X@PJL JOB
This page was printed for free
\x1b%-12345X@PJL EOJ
\x1b%-12345X@PJL JOB
@PJL SET SERVICEMODE=HPBOISEID
@PJL SET PAGES=2342
\x1b%-12345X@PJL EOJ
```
2023-06-03 13:10:46 +00:00
Un attaquant pourrait définir un nombre négatif de pages imprimées. Notez que la réinitialisation de l'appareil aux [paramètres d'usine](factory-defaults.md) **réinitialise également le compteur de pages à zéro sur certains** des appareils testés.\
Réduire le compteur de pages peut également être utilisé pour **vendre une imprimante au-dessus de son prix** car cela peut être comparé à l'odomètre lors de l'achat d'une voiture d'occasion. Il convient cependant de souligner que **la réinitialisation du compteur de pages n'est pas nécessairement à des fins malveillantes** : Il s'agit d'un modèle commercial bien connu de vendre de l'encre surévaluée pour des appareils à jet d'encre à faible coût et de bloquer les kits de recharge de tiers en refusant d'imprimer après un certain nombre de pages pour gérer de telles pratiques non éthiques, il est absolument légitime de réinitialiser le compteur de pages.
Sur les anciens laserjets HP, la commande `pagecount` de [PRET](https://github.com/RUB-NDS/PRET) peut être utilisée pour facilement définir les compteurs de pages matériels :
```
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> pagecount 10
Old pagecounter: 53214
New pagecounter: 10
```
2023-06-03 13:10:46 +00:00
## Compteurs de pages logiciels
**CUPS** utilise des **compteurs de pages logiciels** qui ont été implémentés pour tous les principaux langages de description de page. Pour PostScript, une manière simple de contourner la comptabilité est de vérifier si le paramètre système PageCount existe ce qui retournera faux lorsqu'interprété dans CUPS/Ghostscript avant d'imprimer réellement le document comme montré ci-dessous.
```
currentsystemparams (PageCount) known {
<@\textit{[...] code which is only executed on a printer device [...]}@>
} if
```
Ainsi, le logiciel de comptabilité utilisé par CUPS rend un document différent de celui de l'imprimante. **CUPS ne compte qu'une seule page** ce qui semble être un **minimum codé en dur** tandis que le **vrai** travail d'impression peut contenir **des centaines** **de pages**. Notez que l'utilisation de la file d'attente/option 'raw' IPP est obligatoire, sinon CUPS analyse le code avec un filtre PostScript vers PostScript (ps2write de Ghostscript) avant qu'il n'atteigne le compteur de pages.
2023-06-03 13:10:46 +00:00
**Comment tester cette attaque ?**
**Encapsulez** un **document PostScript de plusieurs pages** arbitraire dans le **code ci-dessus** et imprimez. Ensuite, allez sur [`http://printserver:631/jobs?which_jobs=all`](http://printserver:631/jobs?which\_jobs=all) et vérifiez le compteur de pages de CUPS pour ce travail d'impression. Notez que vous devez établir une file d'attente raw. C'est-à-dire, une file d'attente où le système de filtrage n'est pas impliqué et le travail d'impression va directement à une imprimante. Pour CUPS, cela se fait en définissant le type de contenu sur `application/vnd.cups-raw`. Si votre système est déjà configuré pour utiliser le serveur d'impression à tester, utilisez simplement :
```
lp -o raw test.ps
```
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres moyens de soutenir HackTricks :
2022-04-28 16:01:33 +00:00
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>