Objectif :
Récupérer le contenu du fichier /etc/passwd sur le serveur distant.
Solution :
On lance le lab et on se retrouve sur un site de commerce avec plusieurs articles affichés :
On accède au détail d'un produit et en bas de la page, on peut contrôler la quantité de stock restante dans différentes villes :
On clique sur "Check stock" et on observe la requête envoyée au serveur :
C'est une requête POST avec comme donnée l'identifiant du produit et l'identifiant du magasin lié à la ville.
Il se peut que le serveur intègre ces valeurs dans une donnée au format XML.
On va essayer une attaque de type XXE en utilisant la fonctionnalité XInclude avec le payload suivant :
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>
On remplace la valeur du premier paramètre POST ( "productId" ) par notre payload encodé en URL :
On redirige la requête vers le serveur et il nous retourne le contenu du fichier demandé :
Le lab est désormais résolu.