XXE aveugle - exfiltration via DTD externe
Exploiting blind XXE to exfiltrate data using a malicious external DTD
Lab : fonctionnalité "Check stock" qui analyse du XML mais n’affiche pas le contenu injecté (blind XXE / OOB). Comportement observé : le parseur accepte une déclaration DOCTYPE reliant une DTD externe et effectue des requêtes vers celle-ci.
Exfiltrer silencieusement des données locales du serveur (par ex. /etc/hostname) en forçant le parseur XML à charger une DTD externe malveillante qui, elle-même, lit le fichier et déclenche une requête HTTP(S) vers notre serveur de contrôle (collaborator / exploit server) contenant le contenu lu.
Exemple de payload envoyé au serveur (appel initial qui inclut la DTD externe)
Remarque : ici la DTD externe est hébergée sur notre serveur (exploit server). Le parseur doit la récupérer pour que l’attaque fonctionne.

Contenu malveillant placé sur notre serveur (DTD externe)
La DTD fournie par le serveur d’exploit contient des entités qui lisent un fichier local et construisent une entité évaluée qui déclenchera une requête vers le collaborator avec le contenu exfiltré :
Explication succincte :
%file: lit le fichier localfile:///etc/hostname.%eval: construit dynamiquement une nouvelle entitéexfildont la valeur est une URL ciblant notre serveur d’exfiltration et incluant le contenu de%fileen paramètrecontent.%eval;et%exfil;provoquent l’expansion et la requête HTTP sortante contenant les données.
Exemple complet (appel final depuis l’attaquant vers l’application vulnérable)
La DTD à
https://.../exploitcontient les définitions DTD malveillantes ci-dessus.Quand le parseur récupère et évalue cette DTD, il finit par effectuer une requête HTTP vers notre serveur d’exfiltration avec le contenu de
/etc/hostname.

Mis à jour
Ce contenu vous a-t-il été utile ?