(XXE) XML External Entity - PortSwigger (Writeup)
BASIC XSS Vulnerabilities:
Exploiting XXE using external entities to retrieve files:
Ce laboratoire dispose d'une fonctionnalité "Vérification du stock" qui analyse les entrées XML et renvoie toute valeur inattendue dans la réponse.
Pour résoudre le laboratoire, injectez une entité externe XML afin de récupérer le contenu du fichier
/etc/passwd.
Modifiez la structure XXE en ajoutant la déclaration DOCTYPE et en ajustant la variable en insérant &xxe; dans le champ "email" du formulaire.
&xxe; dans le champ "email" du formulaire.

Exploiting XXE to perform SSRF attacks:
Ce laboratoire dispose d'une fonctionnalité "Vérifier le stock" qui analyse l'entrée XML et renvoie toute valeur inattendue dans la réponse.
Le serveur du laboratoire exécute un point de terminaison de métadonnées EC2 (simulé) à l'URL par défaut, qui est http://169.254.169.254/. Ce point de terminaison peut être utilisé pour récupérer des données sur l'instance, dont certaines peuvent être sensibles.
Pour résoudre le laboratoire, exploitez la vulnérabilité XXE pour réaliser une attaque SSRF qui obtient la clé d'accès secrète IAM du serveur à partir du point de terminaison de métadonnées EC2.
Modifiez la structure XXE en ajoutant la déclaration DOCTYPE qui redirige vers le serveur interne et en ajustant la variable en insérant &xxe; dans le champ "email" du formulaire.
&xxe; dans le champ "email" du formulaire.Cela devrait renvoyer un JSON contenant le SecretAccessKey.

Blind XXE with out-of-band interaction
Ce laboratoire dispose d'une fonctionnalité "Vérifier le stock" qui analyse les entrées XML mais n'affiche pas le résultat.
Vous pouvez détecter la vulnérabilité XXE aveugle en déclenchant des interactions hors bande avec un domaine externe.
Pour résoudre le laboratoire, utilisez une entité externe pour amener le parseur XML à émettre une requête DNS et une requête HTTP vers Burp Collaborator.
Tout d'abord, nous utiliserons Burp Suite Collaborator pour copier l'adresse IP d'un serveur temporaire.

Ensuite on va modifier la structure XXE en ajoutant la déclaration DOCTYPE qui redirige vers le serveur et en ajustant la variable en insérant &xxe; dans le champ "productId" du formulaire.

Nous recevons des demandes HTTP et DNS du serveur.

Blind XXE with out-of-band interaction via XML parameter entities:
Ce laboratoire dispose d'une fonctionnalité "Vérifier le stock" qui analyse l'entrée XML, mais ne montre aucune valeur inattendue et bloque les requêtes contenant des entités externes régulières.
Pour résoudre le laboratoire, utilisez une entité paramètre pour que l'analyseur XML effectue une recherche DNS et une requête HTTP vers Burp Collaborator.
Premièrement, si l'on essaie de charger une entité normale qui doit afficher du texte, on obtient un message d'erreur nous indiquant qu'il y a des mesures de sécurité : "Entities are not allowed for security reasons."

Nous allons vérifier si le serveur peut envoyer des trames à notre serveur Burp Suite Collaborator, en observant si des trames sont reçues.

Exploiting blind XXE to exfiltrate data using a malicious external DTD:
Ce laboratoire dispose d'une fonctionnalité "Vérifier le stock" qui analyse les entrées XML, mais n'affiche pas le résultat.
Pour résoudre le laboratoire, exfiltrez le contenu du fichier
/etc/hostname.
PortSwigger met à disposition un serveur externe temporaire pour simuler l'interception du trafic.

Nous devons donc inclure dans ce serveur un corps d'exploitation (exploit body) qui redirige le contenu de /etc/hostname de la machine victime vers notre serveur Burp Suite Collaborator.

Pour vérifier que nous recevons correctement les journaux (logs) :

Ensuite, nous introduisons le payload malveillant avec des entités, qui sera stocké dans le fichier d'exploitation :


Nous envoyons la requête, et finalement, nous recevons la réponse contenant le contenu du fichier dans la variable content sur notre serveur Burp Suite Collaborator.


Exploiting blind XXE to retrieve data via error messages:
Ce laboratoire dispose d'une fonctionnalité "Vérifier le stock" qui analyse les entrées XML mais n'affiche pas le résultat.
Pour résoudre le laboratoire, utilisez une DTD externe pour déclencher un message d'erreur qui affiche le contenu du fichier
/etc/passwd.Le laboratoire contient un lien vers un serveur d'exploitation sur un autre domaine où vous pouvez héberger votre DTD malveillante
Nous tentons d'injecter une entité externe vers le serveur Burpsuite, mais nous recevons un message d'erreur avec le code suivant :

Nous consultons les journaux pour confirmer la réception de la requête et constatons effectivement une requête GET sur la route exploit.

Pour consulter le contenu du fichier /etc/passwd sur la machine cible, nous allons établir les entités suivantes. Cela va forcer le système à tenter de lister un fichier inexistant, ce qui déclenchera une erreur dans laquelle le contenu du fichier ciblé sera affiché grâce à l'entité définie :
Nous venons d'obtenir le fichier /etc/passwd.

Exploiting XInclude to retrieve files:
Ce laboratoire possède une fonctionnalité "Vérifier le stock" qui intègre l'entrée de l'utilisateur dans un document XML côté serveur qui est ensuite analysé.
Étant donné que vous ne contrôlez pas l'intégralité du document XML, vous ne pouvez pas définir un DTD pour lancer une attaque XXE classique.
Pour résoudre le laboratoire, injectez une instruction
XIncludepour récupérer le contenu du fichier/etc/passwd.
La structure XML reste invisible à l'utilisateur.

Nous allons utiliser le site "PayloadAllTheThings" pour copier un payload en cas d'absence de structure visible, permettant ainsi d'exploiter une attaque de type XInclude.

Exploiting XXE via image file upload:
Ce laboratoire permet aux utilisateurs d'ajouter des avatars aux commentaires et utilise la bibliothèque Apache Batik pour traiter les fichiers d'images d'avatars.
Pour résoudre le laboratoire, téléchargez une image qui affiche le contenu du fichier
/etc/hostnameaprès traitement. Ensuite, utilisez le bouton "Soumettre la solution" pour soumettre la valeur du nom d'hôte du serveur.
Nous pouvons également nous référer au site "PayloadsAllTheThings" pour identifier la vulnérabilité liée à l'upload d'une image au format SVG.
Nous allons créer depuis le terminal une image SVG contenant le code malveillant suivant, qui permettra d'afficher le fichier /etc/hostname :


Une fois cette image uploadée sur le serveur cible, si nous ouvrons l'image, nous obtiendrons le contenu du fichier /etc/hostname.


Wrapper Base64 :
Pour modifier le contenu d'un XXE afin de convertir le fichier /etc/passwd en base64, vous pouvez utiliser la syntaxe suivante :


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




