Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
web:injection_xpath [2016/03/16 09:49] yorin |
web:injection_xpath [2016/04/15 10:10] arkinar |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
**1.Présentation de la Vulnérabilité ** | **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 utilises 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 intentionnelle) il est possible de bypasser des authentifications ou atteindre des données normalement inaccessible. | + | 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 intentionnelle) il est possible de bypasser des authentifications ou atteindre des données normalement inaccessible. |
**2.Exploit ** | **2.Exploit ** | ||
Ligne 15: | 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 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: | + | 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> | ||
Ligne 28: | 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 95: | Ligne 95: | ||
**3.Comment s'en protéger** | **3.Comment s'en protéger** | ||
- | Tout comme les injections SQL il faut echapper les inputs utilisateurs et "reconstruire" la requête après envoie. Il faut donc échapper la quote (') afin d'empêcher la fermeture de notre requête. Ici, toutes les ' seront remplacé par la version XML encoded à savoir "'". | + | 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 "'". |
<code> | <code> |