OWASP WebGoat:Web Service SQL Injection
Jump to navigation
Jump to search
Web Service SQL Injection
Description
Tout comme il est possible d'injecter du code JavaScript ou SQL dans un champ de formulaire non contrôlé, il est possible d'en faire de même avec le XML afin de modifier des requêtes de WebServices. C'est ce que propose cet exercice.
Première méthode : utilisation de WebScarab
Note
Pour pouvoir résoudre cet exercice avec WebScarab, il est nécessaire de posséder la version "self-contained" (webscarab-selfcontained-20070504-1631.jar) car la version standard ne propose pas nativement l'analyse des WebServices.
- Pour résoudre l'exercice avec WebScarab, il est nécessaire que le fichier WSDL soit "lu" par WebScarab. Pour ce faire, il suffit d'ouvrir WebScarab, de paramétrer le proxy (127.0.0.1:8008) dans le navigateur puis d'ouvrir celui-ci à l'adresse du fichier WSDL (http://127.0.0.1/WebGoat/services/WsSqlInjection?WSDL).
Warning
Afin que l'authentification soit demandée dans WebScarab au moment de la consultation du WebService, il est nécessaire d'activer la case à cocher "Ask when required" dans le menu Tools > Credentials.
- Dans WebScarab, se rendre sur l'onglet "WebServices" puis, dans la liste déroulante "WSDL", sélectionner le WebService nommé "WsSqlInjection".
- Dans le champ "Value" du noeud "id" de l'opération "getCreditCard", entrer "101 OR 1=1" (même logique que pour l'injection SQL).
- Cliquer sur "Execute"
- Lorsque l'authentification est demandée, saisir "guest" dans les champs "Username" et "Password" puis cliquer sur "OK".
- La liste des cartes doit alors s'afficher au bout de quelques instants.
Deuxième méthode : utilisation de SOAPUI
Installer SOAPUI (soapUI-2.5.1-installer.exe sous Windows) puis suivre les étapes suivantes :
- Sélectionner File > New soapUI Project
- Renseigner le nom du projet et spécifier le chemin du fichier WSDL (ne pas placer l'authentification dans le chemin sans quoi vous aurez une erreur) puis cliquer sur "OK"
- Renseigner l'authentification WebGoat ("guest" dans les champs "Username" et "Password"
- Cliquer avec le bouton droit de la souris sur "getCreditCard" puis, dans le menu conteextuel, sélectionner "New request".
- Donner un nom à la requête, par exemple "GetAllCreditCards".
- Sélectionner "non" pour la création des éléments optionnels dans le schéma.
- Modifier l'identifiant par défaut (?) dans la requête qui apparaît.
- Renseigner les champs nécessaires à l'authentification
- Exécuter la requête
Tous les numéros de compte appraissent. L'exercice est résolu.