GrapHack Index du Forum
AccueilLes règlesS’enregistrerRechercherFAQMembresGroupesConnexion
Les failles XSS

 
Répondre au sujet    GrapHack Index du Forum » Les membres » Section WEB Sujet précédent
Sujet suivant
Les failles XSS
Auteur Message
Anon
Administrateur
Administrateur

Hors ligne

Inscrit le: 17 Aoû 2011
Messages: 165
Point(s) recus: 171
Moyenne de points: 1,04

Message Les failles XSS Répondre en citant
Les failles XSS
     

Définition :
   Le Cross Site Scripting, ou XSS, est la faille la plus présente sur le web, et d'assez loin. Elle est désignée par quantité de noms, parmi lesquels "faille des livres d'or", tout simplement car ceux-ci ont permi une généralisation de ces vulnérabilités faille. La faille de type XSS se caractérise par une injection possible de code arbitraire dans une application web côté client. Autrement dit, une possibilité d'éxécution d'une variable mal contrôlée par le site. Il existe plusieurs types de failes XSS :
  • Le type connu en tant que type 1, ou vulnérabilité réfléchie résulte de l'utilisation de données fournies par l'utilisateur dans un script quelconque, sans les modifier. Typiquement, une simulation en ligne ou une page de statistiques. Ainsi, si ces données ne sont pas modifiées, on peut ajouter du "script dans le script" qui sera lui-même éxécuté.
    Ceci dit, en modifiant les données qui doivent être traitées, le résultat du XSS ne va modifier que la page que peut afficher l'utilisateur. Cela peut paraître bénin, mais ça l'est beaucoup moins quand l'attaquant utilise le Social Engineering et diffuse des pages piégées de cette façon. Ce genre de vulnérabilités est souvent utilisé pour lancer des campagnes de spam afin de ternir l'image d'un site (redirections, modifications d'apprence) ou de voler des informations (phishing).
  • Le type 2, ou vulnérabilité persistente ou du second ordre, permet des exploitations plus en profondeur. C'est la faille des livres d'or, présente dans les forums, les formulaires d'inscription. La différence essentielle est que les données entrées sont stockées dans des bases de données et sont traitées quand un utilisateur les demande. Par conséquent, on peut affecter n'importe qui sollicitera un certain sujet dans un forum ou la liste des pseudos enregistrés, etc.. Cette faille peut permettre des éxécutions côté client ou côté serveur selon les cas et peut permettre tout type d'exploitation, de la récupération de cookies à l'éxécution de scripts malveillants. On a vu des XSS intégrés à des bases de données institutionnels rendant inaccessibles des dizaines de sites dépendants de ces contenus.
  • Enfin, le type 0, connu comme le DOM-based ou local cross scripting site est un problème directement sur le script côté client (en général, le javscript) de la page (variables passées en URL qui sont réutilisées dans le javascript, etc..). Cette vulnérabilité est soit exploitée à nouveau par Social Engineering, soit par liens interposés dans lesquels on injecte du code qui sera ensuite éxécuté côté client. Celui-ci est finalement très sensible au type I et est très répandu et facilement repérable, notamment par des scanners automatisés.

Un petit exemple
   Nous allons illuster ceci avec un XSS de type 2. Voici un exemple de site contenant trois pages : index.php est la page d'inscription à une mailing list, list.php est la page qui contient la liste des membres de la liste. Enfin, inscription.php est une page fantôme à laquelle est envoyé le mail du nouvel inscrit qui vérifie brièvement si il s'agit d'un email valide et qui l'enregistre dans la base de données.

index.php
Code:


  <!-- index.php - Bases Hacking Mailing List -->
 
 <html>
 
 <head>
  
<h>Bases Hacking Mailing List !</h1>

 <title>Faille de type Cross Site Scripting</title>
  </head>
 
 <body>
 

 <ul>
 <li>Inscrivez-vous en un clic :

  

  <form method="POST" action="./inscription.php">
  <font size="-1">E-mail : </font><input type="text" name="adresse" value="Votre mail ici">

 <font size="-1">Apparition sur la liste des inscrits ?</font><input type="radio" name="anonyme">


 <input type="submit" name="envoi" value="Inscrivez-vous !">
  </form>
  

  </li>
 


 <li>
  Vous pouvez consulter la liste des personnes déjà inscrites ici
  </li>
 </ul>
  </body>
 
 </html>



liste.php
Code:


 <!-- liste.php - Liste des inscrits -->
 
 <html>
 
 <head>
  
<h>Bases Hacking Mailing List !</h1>

 <title>Faille de type Cross Site Scripting</title>
  </head>
 
 <body>
  

 <ul>
 Voici la liste des inscrits non-anonymes : 
<ul>
 
 <?
  
 @mysql_connect("localhost", "serioushack", "motdepassemysql") or die("Impossible de se connecter à la base de données");
 @mysql_select_db("mailing_list") or die("Table inexistante");
 
 $nombre = mysql_query("SELECT * FROM list Where anonyme=0;");
 
 if (mysql_numrows($nombre) > 0) 
  for ($Compteur=0 ; $Compteur<mysql_numrows($nombre) ; $Compteur++)
 {
  $mail = mysql_result($nombre , $Compteur , "AdrMail");
 echo "- ".$mail."
";
  }
  
 else echo "Aucun inscrit non-anonyme pour le moment
";
 
 mysql_close();
  ?>
 
 </ul>
 

 
 Pour retourner au formulaire d'inscription, c'est ici</ul>
  </body>
 
 </html>



inscription.php
Code:


 <!-- inscription.php - Inscription d'une adresse mail -->
 
 <?
  
 $email = $_POST["adresse"];
 $anonyme = $_POST["anonyme"];
 
 if ($anonyme == "on") $anonyme = 0;
 else $anonyme = 1; 
 
 for($i=0; $i < strlen($email) ; $i++)
  if ($email[$i] == '@' && $i < strlen($email) - 4)
  for($j = $i + 1 ;$j < strlen($email) - 2 ; $j++)
  if ($email[$j] == '.' && ($j >= strlen($email) - 5 || $j <= strlen($email) - 3)) { $validite=true; $i=$j=strlen($email); } 
  
 if (isset($validite)) {
  
 @mysql_connect("localhost", "serioushack", "motdepassemysql") or die("Impossible de se connecter à la base de données");
 @mysql_select_db("mailing_list") or die("Table inexistante");
 
 $nombre = mysql_query("INSERT INTO list values('$email',$anonyme);");
 
 mysql_close();
 
 header("Location: ./liste.php");
  }
 else header("Location: ./");
  
 
 ?>



Nous n'allons pas expliquer le code en détail, car il n'y a aucun intérêt à celà : il demande la saisie d'une adresse mail, il l'enregistre si elle possède bien un '@', un . et une extension entre 2 et 4 caractères. Ensuite, la page liste.php ressort les adresses de la base de données.
Nous préférons vous montrer le but de ces pages avec quelques screenshots. Tout d'abord, voici ce qui se passe quand tout se passe bien :


http://www.bases-hacking.org/images/faille-xss-1.html

Nous allons maintenant profiter de la faille qu'offre ce site et nous allons injecter le script @h4ck3d.com et voir ce qui se passe :


http://www.bases-hacking.org/images/faille-xss-2.html


Comme l'on pouvait s'y attendre, le script est éxécuté tel quel et tout utilisateur voulant voir la liste des utilisateurs de la mailing liste verra le petit code que nous avons injecté. 
Nous ne donnerons pas d'exemple de scripts XSS malveillants ici, le net en est rempli. Ils demandent juste la connaissance des langages de scripting du web. 

Souvent délaissée par les programmeurs, cette faille est à prendre au sérieux d'autant qu'elle est facile à corriger. Un court article de recommandations de programmation web sécurisée (http://www.bases-hacking.org/web-best-practices.html) vous donnera plus d'informations sur les bonnes pratiques permettant d'éviter ce genre de failles.  




Source : http://www.bases-hacking.org/faille-xss.html
Soyez intelligent, sachez rester White-hat.

_______________________
( ゚∀゚)o彡゜えーりん!えーりん!
<?php $nbrPosts ++;




Dim 27 Nov - 03:04 (2011)
Publicité






Message Publicité
PublicitéSupprimer les publicités ?

Dim 27 Nov - 03:04 (2011)
Montrer les messages depuis:    
Répondre au sujet    GrapHack Index du Forum » Les membres » Section WEB Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers: 

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Design by Freestyle XL / Music Lyrics.Traduction par : phpBB-fr.com