XXE
Last updated
Last updated
L'injection d'entité externe XML (également connue sous le nom de XXE) est une vulnérabilité de sécurité Web qui permet à un attaquant d'interférer avec le traitement des données XML par une application. Cela permet souvent à un attaquant d'afficher des fichiers sur le système de fichiers du serveur d'applications et d'interagir avec tout système dorsal ou externe auquel l'application elle-même peut accéder.
Lors d'une XXE, le serveur peut ne pas renvoyé d'erreur ou le contenu du fichier qu'on veut consulter. Ainsi des techniques de out of band doivent être mise en place afin de vérifier la présence de la vuln et avoir la possibilité d'exfiltrer de la donnée.
Parfois, les attaques XXE utilisant des entités régulières sont bloquées, en raison d'une validation d'entrée par l'application ou d'un durcissement de l'analyseur XML utilisé. Dans cette situation, vous pourrez peut-être utiliser des entités de paramètre XML à la place.
Cette manière de l'écrire nous permet d'appeler notre variable xxe directement dans le DTD et bypass le potentielle durcissement.
Pour exfiltrer de la données, voici le payload : malicious.dtd qu'il faut host sur un serveur
On génere une erreur afin d'y insérer le fichier qu'on veut récupérer.
Pour ce faire, on host un fichier malicieux dtd avec ce payload :
Puis on injecte ceci :
Certaines applications reçoivent des données soumises par le client, les intègrent côté serveur dans un document XML, puis analysent le document. Un exemple de cela se produit lorsque les données soumises par le client sont placées dans une requête SOAP , qui est ensuite traitée par le serveur SOAP .
Dans cette situation, vous ne pouvez pas mener une attaque XXE classique, car vous ne contrôlez pas l'intégralité du document XML et ne pouvez donc pas définir ou modifier un élément DOCTYPE. Cependant, vous pourrez peut-être utiliser XInclude à la place. XInclude fait partie de la spécification XML qui permet de construire un document XML à partir de sous-documents. Vous pouvez placer une attaque XInclude dans n'importe quelle valeur de données dans un document XML, de sorte que l'attaque peut être effectuée dans des situations où vous ne contrôlez qu'un seul élément de données placé dans un document XML côté serveur.
Pour effectuer une attaque XInclude, vous devez référencer l'espace de noms XInclude et fournir le chemin d'accès au fichier que vous souhaitez inclure. Par exemple:
On peut upload un svg contenant la payload suivante :