TP - Sécurité des applications WEB
Préparation
- Connectez via firafox à l'application:
http://IP:PORT/WebGoat
. Créez un compte. - Nous allons maintennant utiliser un proxy pour accéder à l'application. Lancez zap.sh (par défaut ce proxy écoute sur le port
8080
) - Configuez firefox pour qu'il utilise ZAP comme proxy (par défaut le port d'écoute du proxy est
8080
) - Re-connectez vous, via firafox, à l'application:
http://IP:PORT/WebGoat
. - Exclure ces deux URL du contexte du proxy (clic droit sur une requête dans
historique --> exlure de --> proxy
), puis modifiez la ou ajoutez en une nouvelle:http://IP:PORT/WebGoat/service/.*lesson*.*
http://detectportal.firefox.com/success.txt
Bases du HTTP
- Suivez le cours
General --> HTTP Basics
et réalisez les activités demandées.
Donnez la différence entre une requêtte
GET
etPOST
.
A1 - Injection
SQL Injection (intro)
Suivez les cours de
1 - 8
en réalisant les exercices inclus.Réalisez les activités de
9-13
Donnez pour chaque activité réalisée l'injection SQL utilisée. Expliquez
SQL Injection (advanced)
- Suivez les cours
1-2
, puis réalisez l'activité3
.
Trouvez le nombre de colonnes de la requête associée à la forme
Get Account Info
:toto' or '1'='1
.
Cancatenez maintennant une requête
UNION
àtoto'
pour retrouver le mot de passe deDave
.
Lisez d'abord le cours
4
, puis réalisez l'activité5
.
- Dans l'onglet "REGISTER", essayez les motifs suivants:
- tom' and '1'='1
- tom' and '1'='2
- tom' and '1'='1'--
- tom' and '1'='2'--
Y a-t-il des massages d'erreurs SQL ou c'est des messages personnalisés ?
Quel message correspond à vrai et a faux ?
Sachant que la colonne du mot de passe s'appelle
password
, utilisez la fonctionSUBSTRING
pour récupérer le premier caractère du mot de passe detom
.
Automarisez la recherche des autres caractères du mot de passe en utilisant l'outil
Générer du Bruit
du proxy ZAP.
A7 - Cross Site Scripting (XSS)
Réalisez l'activité
2
.Réalisez l'activité de
7
. Mais, Lisez d'abord les cours précédents.
Quels sont les types des requêtes http de la forme ?
Déterminez les inputs vulnérables.
Testez la faille avec
<script>alert('my javascript here')</script>
.
Comment s'appelle cette vulnérabliité ?
Donnez un scénation possible d'attaque avec cette faille.
A l'aide de cette attaque, récupérez le cookie en cours.
Réalisez l'activité de
10
. Mais, Lisez d'abord le cours précédent.Cliquez sur
submit
. Il vous propose de consulter le scriptGoatRouter.js
(cf. 0x04) vulnérable, qui est responsable de la gestion des URLs au niveau du client (Navigateur). Webgoat utilise le frameworkbackbone.js
(cf. 0x05).Pour récupérer le fichier
GoatRouter.js
:Web Developer --> Debugger --> WebGoat/js --> goatApp --> view
.Faites un tour sur 0x04 pour comprendre le mécanisme de routage des URLs et réalisez l'activité.
Est-ce-que quelque chose (votre input) est envoyé au serveur, lorsqu'on utilise la route test avec un paramètre ?
Quelle est la différence entre
DOM-based XSS
et celle vue précédement (cf. 0x02 et 0x03) ?
Réalisez l'activité
11
- En utilisant le debugger, retrouvez l'action réalisée lorsqu'on utilise l'URL vulnérable du cours
10
- En utilisant le debugger, retrouvez l'action réalisée lorsqu'on utilise l'URL vulnérable du cours
Exploitez l'URL vulnéarable avec l'XSS suivante:
<script>webgoat.customjs.phoneHome();</script>
. Le code HTML du caractère"/"
est%2F
.
Retrouvez la chaîne aléatoire nécessaire à la validation de l'activité.
A2 - Broken Authentication
Authentication Bypasses
- Lisez le cours
1
et réalisez l'activité2
:
En utilisant votre proxy zap, insipirez-vous de cette attaque:
https://henryhoggard.co.uk/blog/Paypal-2FA-Bypass
pour résoudre ce challange.
JWT tokens
Lisez les lessons
1 - 3
pour comrendre le fonctionnement du mécanisme d'authentificationJWT
(cf. 0x06)Réalisez l'activité
4
:- JWT admet la non utilisation d'un algorithme de signature. Pour cela, le champ
alg
de l'entête du token est positionné àNone
.
- JWT admet la non utilisation d'un algorithme de signature. Pour cela, le champ
Modifiez par exemple le token de
Tom
, que vous allez intercepter via votre proxy, pour que celui-ci devienneadmin
puis réinitisalisz les votes.Pour décoder un texte codé en Base64Url:
echo -n 'texte en base64' | base64 -d
Pour coder un texte en Base64Url:
echo -en 'texte à coder' | openssl base64 -e -A | tr -d "=" | sed s'/\+/-/g' | sed s'/\//_/g'
Bonus
Réalisez l'activité
5
En ecrivant un script bash (ou en utilisant un autre langage de script), trouvez le mot de passe utilisé dans la signature du token JWT du challenge 5:
- Utilisez le dictionnaire google-10000-english.txt fourni.
Pour créer une signature avec la méthode
HMAC
:openssl dgst -hmac_version -hmac secret -binary
- hmac_version : sha256, sha512, ...
- secret : le mot de passe
- Utilisez le dictionnaire google-10000-english.txt fourni.
Mitigation
SQL Injection (mitigation)
Suivez les cours et faites un rapport sur les différentes solutions de défense possibles contre les attaques de type SQL Injection
Liens utiles:
- [0x01] https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OTG-INPVAL-005)
- [0x02] https://www.owasp.org/index.php/DOM_Based_XSS
- [0x03] https://www.acunetix.com/blog/articles/dom-xss-explained/
- [0x04] https://www.synbioz.com/blog/les_routeurs_dans_backbonejs
- [0x05] http://backbonejs.org/
- [0x06] https://jwt.io/introduction/