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 et POST.

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 de Dave.

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 fonction SUBSTRING pour récupérer le premier caractère du mot de passe de tom.

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 script GoatRouter.js (cf. 0x04) vulnérable, qui est responsable de la gestion des URLs au niveau du client (Navigateur). Webgoat utilise le framework backbone.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

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’authentification JWT (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.
  • Modifiez par exemple le token de Tom, que vous allez intercepter via votre proxy, pour que celui-ci devienne admin 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

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/