OWASP WebGoat:Bypass Client Side JavaScript Validation
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" :