OWASP WebGoat:Bypass Client Side JavaScript Validation

From aldeid
Jump to navigation Jump to search

Bypass Client Side JavaScript Validation

L'objectif de cet exercice est de vous présenter :

  • les validateurs clients avec des expressions régulières en JavaScript
  • l'intérêt de doubler les tests clients sur le serveur, dans la mesure où les premiers peuvent être forcés.

Pour résoudre cet exercice, il est nécessaire de saisir dans chacun des 7 champs des valeurs non initialement autorisés. Le tableau suivant explique les contraintes des validateurs :

Expression régulière Explication Chaîne valide Chaîne invalide
^[a-z]{3}$ Limitation à 3 lettres de "a" à "z" en minuscules abc abcd, 123
^[0-9]{3}$ Limitation à 3 chiffres de "0" à "9" 012 1a2, 3451
^[a-zA-Z0-9 ]*$ Chaîne non limitée en longueur, pouvant uniquement contenir des lettres en minuscules et majuscules ainsi que des chiffres et des espaces dghjsgv53HJgvv jG?#!~élkjjhbs
two|three|four|five|six|seven|eight|nine)$ Limitation aux chaînes "one", "two", "three", ..., "nine" four ten, abcd
^\d{5}$ Limitation à une chaîne de 5 chiffres obligatoires (code postal) 78125 123, 781254
^\d{5}(-\d{4})?$ Idem que précédemment, avec extension "-" et 4 chiffres facultatifs 78125, 78125-1234 781254, 78125-12345
^[2-9]\d{2}-?\d{3}-?\d{4}$ Num. de tél. US avec séparateur "-" optionnel. Format NNN-NNN-NNNN ou NNNNNNNNNN 301-496-0323 1234567890

Comme le montre l'écran suivant, les validateurs JavaScript contrôlent que les valeurs saisies sont cohérentes avec les masques attendus :

Deux méthodes permettent de résoudre cet exercice :

  • Envoyer un contenu valide dans chaque champ afin de passer les contrôles JavaScript, intercepter la requête avec WebScarab puis modifier le contenu des champs dans WebScarab directement.
  • Demander le rechargement de la page, intercepter la réponse avec WebScarab puis supprimer les contrôles JavaScript afin d'envoyer les données sans validation "client"

Première méthode

Laisser les valeurs du formulaire par défaut, cliquer sur "Submit" puis intercepter la requête dans WebScarab. Modifier alors le contenu des champs comme suit :

Cliquer sur "Accept Changes" pour terminer l'exercice.

Deuxième méthode

Laisser le contenu par défaut des champs, cocher la case "Intercept requests" dans WebScarab puis soumettre le formulaire. Modifier les champs dans WebScarab directement comme suit :

^ Fonction initiale ^ Fonction modifiée

Vous pouvez maintenant saisir n'importe quelles valeurs dans les champs du formulaire.

Contrôles serveur

Comme le montre la figure suivante, nous pouvons voir que si les contrôles "client" ont été forcés, ce n'est pas le cas des contrôles "serveur" :