OWASP WebGoat:Hijack a Session

From aldeid
Jump to navigation Jump to search

Hijack a Session

Description

Certaines applications utilisant des cookies de session sont vulnérables dans la mesure où la génération des identifiants de session n'est pas aléatoire et donc prévisible. Ces applications sont vulnérables à des attaques de type brute-force.

Cet exercice vous présente une telle faille.

Exercice

1. Lancer WebScarab et passer en mode avancé (Tools > Use full-featured interface)


2. Dans WebScarab, cocher la case "Intercept requests", saisir le couple "test"/"test" respectivement dans les champs "Username" et "Password" du formulaire de l'exercice puis cliquer sur "Login". Copier le contenu de la requête en mode "Raw" afin de pouvoir l'utiliser plus tard.


3. Se rendre à l'onglet "SessionID Analysis" dans WebScarab puis, dans la liste déroulante "Previous Requests", sélectionner le dernier enregistrement de type "POST". Vérifiez que vous retrouvez bien le cookie WEAKID.


4. Cliquez sur le bouton "Test" afin de vous assurer que le cookie est exploitable. Si vous obtenez un message du style "No session identifiers found!", supprimer le cookie (sélection du cookie puis "Suppr")

Recliquez alors sur "Test". Vous devez finalement obtenir un message du style

127.0.0.1/WebGoat WEAKID = 11997-1245154497414

5. Remplissez le champ "Samples" avec la valeur "50" puis cliquez sur Fetch. Cela génère une séquence de 50 enregistrements.


6. Rendez-vous sur l'onglet "Analysis" puis, dans la liste déroulante "Session Identifier", sélectionnez le cookie analysé ("127.0.0.1/WebGoat WEAKID"). Apparaît alors la liste générée.


7. Dans la liste, repérez un "trou de séquence". Dans la capture qui suit, "20155" correspond à notre identifiant recherché.


8. Nous pouvons maintenant tenter de déterminer la séquence manquante :

Identifiant précédent 20154-1245170045328
Identifiant recherché 20155-1245170045...
Identifiant suivant 20156-1245170045437
Note
Les chiffres qui diffèrent des identifiants vont nous permettre de déterminer les bornes de l'intervalle dans lequel chercher la valeur.

Pour ce faire, nous allons utiliser la force brute avec Crowbar. Pour ce faire, nous avons besoin de la requête "Raw" (copiée à l'étape 2) pour la coller dans Crowbar.

POST http://127.0.0.1:80/WebGoat/attack?Screen=56&menu=1700 HTTP/1.1
Host: 127.0.0.1
Cookie: WEAKID=20155-1245170045##1##; JSESSIONID=D4D8E06E7B3DBEFCECB2F6DD4AA47141
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Content-Type: application/x-www-form-urlencoded
Content-length: 59

Username=&Password=&WEAKID=11940-1245151043931&SUBMIT=Login

Finalement, nous obtenons un écran similaire à celui-ci :

Dans les indexes qui apparaissent en bas à gauche, une ligne semble modifier la logique de numérotation. Il s'agit de notre séquence.


9. Cliquez avec le bouton droit de la souris sur l'index sélectionné puis cliquez sur "Show reply". L'écran suivant nous indique que nous avons trouvé la bonne séquence :


10. Enfin, il ne reste plus qu'à rafraîchir l'écran, intercepter la requête puis modifier le cookie WEAKID avec la séquence complète :