Base de connaisances

Injection de XPath

leave a comment »

Injection de XPath

On quitte le monde SQL pour arriver dans celui du XML. Xpath est un langage de requêtes spécialisée qui joue un rôle comparable à celui de SQL dans le contexte des bases de données. On regroupe des problème lié à l’injection de données. Ypath est utilisé pour parcourir de manière rapide et puissantes les documents XML complexes.

Un exemple de problème que peut rencontrer un développeur s’il utilise le stockage de données sensibles en XML.

<?xml version= "1.0" encoding= "ISO-8859-1"?>
<users>
	 <user>
                 <id>1</id>
		 <identifiant>admin</identifiant>
		 <password>test1234</password>
	 </user> 
         <user>
                 <id>2</id>
		 <identifiant>usertest</identifiant>
		 <password>testuser</password>
	 </user>
</users>  

Un code pour réalisation l’authentification en JAVA

String username = req.getParametre("identifiant");
String password = req.getPArametre("password");

XPath xpath = XPathFactory.newInstance().newXPath();
File file = new File (/usr/webappdata/users.xml");
InputSource src = new InputSource(new FIleInputStream(file));

XPathExpression exp = xpath.compile("//users[identifiant/text()=' " + identifiant + 
                      " ' and password/text()='password+" ']/id/text()");
String id = expr.evaluate(src);

Dans le code ci-dessus, aucun code n’est échappé. Le document XML contenant les numéros d’identifications, noms d0utilisateurs et mot de passe peut être différents selon les cas. Si aucune saisie n’est échappée, il est possible de remplacer le mot de passe par une expression telle que « ‘ or ‘1’=’1″. L’injection nous renvoie l’ID de l’administrateur sans connaissance du mot de passe.

Written by olivier

9 juin 2014 à 12:00

Laisser un commentaire