☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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) !
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- **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)**.**
- **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)**.
Vous pouvez faire envoyer une requête HTTP POST à plusieurs adresses IP pour essayer d'atteindre un port d'impression brute ouvert. Si trouvé, l'en-tête HTTP est soit imprimé en texte brut, soit ignoré en fonction des paramètres de l'imprimante. Les données POST peuvent cependant contenir des travaux d'impression arbitraires tels que des commandes PostScript ou PJL à interpréter.
### Impression croisée améliorée
Vous pouvez utiliser des objets JavaScript XMLHttpRequest (XHR) tels que définis dans pour effectuer des requêtes HTTP POST vers des imprimantes internes. Une limitation de l'approche d'impression croisée discutée jusqu'à présent est que les données ne peuvent être envoyées qu'au périphérique, pas reçues en raison de la politique de même origine. Pour contourner les restrictions de la politique de même origine, vous pouvez faire en sorte que le serveur réponde avec une fausse mais une réponse HTTP valide permettant les demandes CORS (y compris `Access-Control-Allow-Origin=*`). Un aperçu schématique de l'attaque est donné ci-dessous :
![Impression croisée avancée avec spoofing CORS](http://hacking-printers.net/wiki/images/thumb/c/ce/Cross-site-printing.png/900px-Cross-site-printing.png)
Dans une variante améliorée de XSP - combinée à un spoofing CORS - un attaquant web a un accès complet à la réponse HTTP, ce qui lui permet d'extraire des informations arbitraires telles que des travaux d'impression capturés à partir du périphérique d'impression. Un extrait de code JavaScript de preuve de concept est présenté ci-dessous :
```javascript
job = "\x1B%-12345X\r\n"
+ "%!\r\n"
+ "(HTTP/1.0 200 OK\\n) print\r\n"
+ "(Server: PostScript HTTPD\\n) print\r\n"
+ "(Access-Control-Allow-Origin: *\\n) print\r\n"
+ "(Connection: close\\n) print\r\n"
+ "(Content-Length: ) print\r\n"
+ "product dup length dup string cvs print\r\n"
+ "(\\n\\n) print\r\n"
+ "print\r\n"
+ "(\\n) print flush\r\n"
+ "\x1B%-12345X\r\n";
var x = new XMLHttpRequest();
x.open("POST", "http://printer:9100");
x.send(job);
x.onreadystatechange = function() {
if (x.readyState == 4)
alert(x.responseText);
};
```
### Limitations de l'impression inter-sites
Notez que **PCL** en tant que langage de description de page n'est **pas applicable pour le spoofing CORS** car il ne permet qu'un **seul nombre** à être **échoé**. **PJL ne peut pas** être utilisé car malheureusement il ajoute `@PJL ECHO` à toutes les chaînes échoées, ce qui rend impossible de simuler un en-tête HTTP valide. Cela ne signifie cependant **pas** que les attaques XSP améliorées sont **limitées** aux travaux PostScript : PostScript peut être utilisé pour répondre avec un en-tête HTTP spoofé et **l'** [**UEL** ](./#uel)**peut être invoqué pour changer la langue de l'imprimante**. De cette façon, un attaquant web peut également obtenir les résultats pour les commandes PJL. Deux pièges d'implémentation existent et méritent d'être mentionnés : premièrement, une `Content-Length` correcte pour les données à répondre doit être déterminée avec PostScript. Si l'attaquant ne peut pas prédire la taille globale de la réponse et que le codage par tronçons n'est pas une option, elle doit définir une valeur très élevée et utiliser un rembourrage. Deuxièmement, l'ajout du champ d'en-tête `Connection: close` est important, sinon les connexions HTTP/1.1 sont maintenues actives jusqu'à ce que le client web ou le périphérique d'impression déclenche une temporisation, ce qui signifie que l'imprimante ne sera pas accessible pendant un certain temps.
**Si** le périphérique d'impression prend en charge l'**impression de texte brut**, l'en-tête de la **requête HTTP** de la XHR est imprimé en dur - y compris le champ d'en-tête `Origin` contenant l'URL qui a invoqué le JavaScript malveillant, rendant ainsi difficile pour un attaquant de **rester silencieux**. Cela est inévitable, car nous ne prenons pas le contrôle de l'imprimante - et dans certaines circonstances, nous pouvons désactiver la fonctionnalité d'impression - jusqu'à ce que le corps HTTP soit traité et que l'en-tête HTTP ait déjà été interprété en texte brut par le périphérique d'impression. Si la réduction du bruit est une priorité, l'attaquant peut cependant **essayer de désactiver d'abord la fonctionnalité d'impression** avec des commandes PJL propriétaires comme proposé dans [PJL jobmedia](http://hacking-printers.net/wiki/index.php/Document_processing#PJL_jobmedia) en utilisant d'autres canaux XSP potentiels comme IPP, LPD, FTP ou le serveur web intégré de l'imprimante. Bien que tous les protocoles aient pu être testés avec succès pour déployer des travaux d'impression en utilisant des variantes de scripting inter-protocoles, ils ont certains inconvénients au-delà de ne pas fournir de commentaires en utilisant des en-têtes CORS spoofés :
* L'accès inter-protocole aux ports LPD et FTP est bloqué par divers navigateurs web
* Les paramètres pour l'impression directe sur le serveur web intégré sont spécifiques au modèle
* La norme IPP exige que le `Content-type` pour les demandes HTTP POST soit défini sur `application/ipp`, ce qui ne peut pas être fait avec des objets XHR - il appartient cependant à l'implémentation de se soucier réellement des types incorrects
Une comparaison des canaux d'impression inter-sites est donnée ci-dessous :
| Canal | Port | Pas de commentaires | Impression non sollicitée | Normalisé | Bloqué par |
| ----- | ---- | ----------------- | ------------------------ | --------- | ---------- |
| Brut | 9100 | - | ✔ | ✔ | - |
| Web | 80 | ✔ | - | - | - |
| IPP | 631 | ✔ | - | ✔ | - |
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
| FTP | 21 | ✔ | - | ✔ | FF, Ch, Op, IE |
Un problème majeur de XSP est de **trouver** l'**adresse** ou le nom d'hôte **correct** de l'**imprimante**. Notre approche consiste à **abuser de WebRTC** qui est implémenté dans la plupart des navigateurs modernes et qui a la fonctionnalité d'énumérer les adresses IP pour les interfaces de réseau local. Étant donné l'adresse IP locale, des objets XHR sont ensuite utilisés pour ouvrir des connexions au port **9100/tcp** pour les 253 adresses restantes afin de récupérer le nom du produit de l'imprimante en utilisant PostScript et le spoofing CORS, ce qui ne prend que quelques secondes dans nos tests. Si l'imprimante est sur le même sous-réseau que l'hôte de la victime, son adresse peut être détectée uniquement à l'aide de JavaScript. WebRTC est en développement pour Safari et est pris en charge par les versions actuelles de Firefox, Chrome et Microsoft Edge. Internet Explorer n'a pas de support WebRTC, mais VBScript et Java peuvent également être utilisés pour divulguer l'adresse IP locale. Si l'adresse de l'interface locale ne peut pas être récupérée, nous appliquons une approche de force brute intelligente : nous essayons de nous connecter au port 80 du routeur de la victime en utilisant des objets XHR. Pour cela, une liste de 115 adresses de routeur par défaut provenant de diverses ressources accessibles sur Internet a été compilée. Si un routeur est accessible, nous balayons le sous-réseau pour trouver des imprimantes comme décrit précédemment.
## Preuve de concept
Une implémentation de preuve de concept démontrant que les attaques avancées d'impression inter-sites sont pratiques et constituent une menace réelle pour les entreprises et les institutions est disponible sur [hacking-printers.net/xsp/](http://hacking-printers.net/xsp/)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 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) !
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- **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)**.**
- **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.