XXE aveugle — filtrage de données via messages d'erreur

Exploiting blind XXE to retrieve data via error messages

Laboratoire : la fonctionnalité Check stock analyse un XML sans afficher directement la réponse. L’objectif est exploiter une entité externe (DTD hébergée sur un serveur d’exploit) pour provoquer une erreur qui fera apparaître, dans le message d’exception, le contenu du fichier /etc/passwd. On utilise la technique consistant à forcer le parser à inclure le contenu de fichier dans une URI inexistante afin que l’exception révèle ce contenu.

  • Le point d’entrée parse du XML mais ne renvoie pas le résultat normalement.

  • Le serveur autorise l’inclusion d’un DTD externe (hébergé sur le domaine de l’exploit).

  • Le message d’erreur du parser contient suffisamment d’informations pour que, si le DTD provoque une référence mal formée incluant le contenu d’un fichier, ce contenu apparaisse dans l’exception.

Charger un DTD externe hébergé sur le serveur d’exploit en ajoutant une déclaration DOCTYPE pointant vers l’URL de l’exploit server :

Le parser retourne une erreur du type : XML parser exited with error: org.xml.sax.SAXParseException; systemId: https://qf9v476...; lineNumber: 1; columnNumber: 2; The markup declarations ... must be well-formed.

  1. Tentative directe pour lister /etc/passwd (problème : trop de lignes) :

  1. Technique utilisée avec contexte d’erreur — insérer le contenu du fichier dans une référence impossible pour forcer le parser à l’afficher dans l’exception :

En déclenchant la référence vers file:///nonexistent/%file;, le parser génère une exception contenant le texte de la ressource incluse (/etc/passwd), ce qui permet d’exfiltrer le contenu malgré l’absence d’un retour normal dans la fonctionnalité.

Mis à jour

Ce contenu vous a-t-il été utile ?