OWASP WebGoat:The Challenge

From aldeid
Jump to navigation Jump to search

The Challenge

Cet exercice est composé de plusieurs étapes :

  • Casser l'authentification
  • Voler les numéros de cartes de crédit de la base de données
  • Prendre le contrôle du texte affiché sur la page (webgoat_challenge_guest.jsp)

Stage 1 : Casser l'authentification

Description

La première étape consiste à passer l'authentification. Cette dernière est stockée :

  • Soit en base de données
  • Soit dans le code directement

Dans ces deux cas de figure, les possibilités sont les suivants :

Stockage de l'authentification Méthode de pénétration
Dans le code Tentative de récupération du code source de la page
Dans une base de données
  • tentative d'injection SQL afin de récupérer les comptes d'utilisateurs
  • tentative de génération de cookie de session

Résolution

Dans les différents exercices, nous pouvons consulter le code source, en cliquant sur le bouton "Show Java" dans le menu du haut :

Force est de constater que pour accéder à la source, il suffit de se rendre d'abord à la page dont on souhaite obtenir le code, puis de modifier l'URL, de manière à remplacer le nom du fichier par la chaîne "source?source=true".

En cliquant sur la page d'authentification du challenge, le numéro d'écran (ici 217) est stocké en session. En modifiant l'adresse (http://127.0.0.1/WebGoat/source?source=true), la source correspondante est restituée :

Stage 2 : Vol des numéros de cartes de crédit

Description

A ce stade, il est demandé de récupérer les numéros de cartes de crédits. Comme nous pouvons le constater, la liste des cartes de crédit disponibles dans la liste déroulante est limitée à celles dont l'utilisateur connecté est propriétaire.

Résolution

Pour ce faire, nous allons tenter une injection SQL avec WebScarab. Dans ce dernier, cocher la case "Intercept requets" puis raffraîchir la page courante du navigateur.

Remplacer ensuite l'utilisateur "White" du cookie par la chaîne suivante : "White' or '1'='1" (injection SQL permettant d'ajouter un test qui rend la requête toujours vraie).

Cliquer sur le bouton "Accept changes" dans WebScarab. La liste de tous les numéros de carte est maintenant disponible, comme le montre la capture suivante :

Stage 3 : Modifier le code source

Description

  • Cliquer sur le bouton "Proceed to next stage...(3)" disponible en bas de l'écran.
  • Nous pouvons constater qu'en bas du tableau qui s'est chargé, deux sections présentent respectivement le site "original" et le site "modifié".

A ce stade, les deux "pages" sont identiques. Il est demandé de modifier le site Web.

Résolution

L'écran de ce stage présente une liste des connexions, filtrée par le type de connexion (tcp, tcpv6, ip, etc.) :

En sélectionnant une entrée dans la liste déroulante des types de connexion, et en interceptant la requête avec WebScarab, nous pouvons constater que le paramètre est transmis via une variable appelée "File". En modifiant la valeur de ce paramètre, il est possible d'y injecter un code à exécuter sur le serveur. Par exemple, l'ajout de la chaîne " & dir" permettra d'exécuter la commande "dir" et de nous en renvoyer le résultat.

Ce résultat nous permet d'en conclure que le champ "File" est vulnérable à l'injection de code. Nous pouvons donc tenter d'écrire du contenu dans le fichier "webgoat_challenge_guest.jsp" comme demandé. Mais avant tout, il est nécessaire de connaître le chemin d'accès à ce fichier. Pour ce faire, nous allons tenter d'injecter le code suivant :

dir webgoat_challenge_guest.jsp /s

Cela permet d'effectuer une recherche récursive sur tous les dossiers enfants. L'injection produit le résultat suivant :

Connaissant le chemin complet, il ne nous reste plus qu'à tenter d'écraser le contenu du fichier avec la commande qui suit :

echo "You've been hacked" > D:\PERSO\Hacking\WebGoat-5.2\tomcat\webapps\WebGoat\webgoat_challenge_guest.jsp

Le résultat est probant :

En effet, voici les deux sites comparés :

Stage 4

Cliquer sur le bouton "Proceed to next stage (4)". Vous avez terminé le challenge.