LE CSS - Cross site scriptingLe cross site scripting on en entend beaucoup parler mais on en percoit pas toujours tous le principe... Le cross site scripting est avant tout utilisé par de pseudo hacker (en fait des cracker) qui veulent se faire un nom en défacant un site. Malheureusement le cross site scripting concerne un grand nombre de site ! Nous allons étudier ici son principe, son fonctionnement, et comment corriger chaque faille soulever. I-Principe du cross site scripting Le cross site scripting permet en faite l\'exécution de code malveillant par un navigateur ou un serveur cela est important, parfois seul l\'interpreteur ( le navigateur web ) est en cause.... Par exemple l\'execution d\'un javascript implanté par Cross site scripting et dans ce cas peut vous nuire directement ! Mais revenons en à la base qu\'est-ce que le cross site scripting ? Le cross site scripting c\'est l\'implantation d\'un code malveillant ou pas dans un page d\'un site par un procédé X (que nous déterminerons tout à l\'heure). L\'affichage de cette page par un navigateur et donc l\'interprétation du code de la page exploitant alors le code implanté donnant ainsi un résultat Y. Le cross site scripting trouve la majeure partie de ses implémentation en PHP ou CGI et autre languages dynamiques, vu les ressemblances existant entre ces différents languages nous n\'en etudierons qu\'un seul (mais c\'est le plus utilisié sur internet ) le PHP. II-De la théorie à la pratique 1°/ Exemple concret Pour notre premier exemple de CSS nous allons étudier un formulaire et la page traitant ses données... Code du formulaire : <html> Accès sécurisé <br> <form action=\"verifie.php\"> Votre login : <input type=\"text\" name=\"login\"> //Ceci est le premier champs ou l\'utilisateur devra //taper son login Votre password : <input type=\"password\" name=\"password\"> // Ceci définit le champs ou l\'utilisateur // devra entrer son password, l\'attribut //password de type permet de remplacer les //lettres par des *. <input type=\"submit\" value=\"submit\"> // permet d\'envoyer le formulaire (bouton) </html> Fin de code Le formulaire en soit ne nous apporte rien mais étudions maintenant la page qui verifie les données envoyées (en rouge dans le code) : Code de verifie.php <?php // ouverture du code php $logincorrect=\"cmoi\"; // définition de la variable logincorrect $password_ok=\"accept\"; // définition de la variable password_ok if ( $logincorrect == \"$login\" ) { if ( $password_ok == \"$password\" ) { echo \"login & password acceptés\"; } } ?> Fin du code On peut remarquer ici que nos login et password sont inclus entre \" ce qui permet de filtrer les \', mais aucunement les \" nous pouvons donc introduire une autre possibilités à notre condition et ainsi gagner l\'accès.... si dans notre formulaire on saisit : login : login\" OR 1= =\"1 password : pass\" OR 1= =\"1 Voici alors le code qui sera interprété en php : if ( $logincorrect == \"login\" OR 1==\"1\" ) { if ( $password_ok == \"$pass\" OR 1==\"1\" ) { echo \"login & password acceptés\"; } } Ici le login et le password reste faux mais 1= =\"1\" est vrai donc l\'une des conditions est remplie on aura donc s\'affichant sur la page : login & password acceptés Vous venez d\'étudier votre premiere faille CSS ! Bon maintenant comment eviter cette faille ? L\'attribut addslash() semble en etre le meilleur moyen, il transforme le code ainsi : if ( $logincorrect == \\\"$login\\\" ) { if ( $password_ok == \\\"$password\\\" ) { echo \"login & password acceptés\"; } } Et permet ainsi d\'éviter l\'inclusion de caractères de types \' et \" . 2°/ L\'include, la faille qui a fait trembler phpBB. A°/Définition : Nous allons maintenant étudier une faille qui rentre dans les attributions du CSS : la faille d\'include. Pour la comprendre nous devons tout d\'abord savoir ce qu\'est un include.... la fonction include() de php permet d\'inclure le code source d\'un document dans un autre.par exmple si on a la page HELLO.html telle que : code de HELLO.html <html> HELLO WORLD ! </html> Fin du code Et la page parle.php telle que : code de parle.php <?php include(\'HELLO.html\') ?> Fin du code Si l\'utilisateur se rend sur la page parle.php il pourra voir ecrit HELLO WORLD ! Notons que include ajoute aussi les balises <html> et </html> du document. B°/Exploitation Maintenant comment exploiter un include ? de deux manieres : Certains site passent des incldue en variable de formulaire ou meme de navigation, par exemple la page 1.html contient un lien vers la page 2.php ainsi qualifié : 2.php?inc=3.html on suppose que la page 2.php contient le code : <? include(\'$inc.php\'); ?> il suffit donc à l\'nternaute de modifier la variable inc en remplacant 3.html par une autre page.... Quel interet ? c\'est simple grace à cela nous pouvons exécuter du code sur le serveur et ainsi récupérer le password et le login de connection à la base de donnée SQL ou le pass FTP on peut afficher les valeurs contenues dans la bdd etc... .Comment empecher l\'exploitation de cette faille ? supprimer le \"http\" qui pourrait etre présent dans la variable ? Non cela ne suffirait absolument pas on aurait encore la possibilité d\'afficher n\'importe quel fichier local (sur le meme serveur) ou distant par ftp. La meilleure solution consiste à passer par une base de données, ou certaine variables correspondent à une page en particulier la code serait ainsi : Code de la page \"securisée\" <? include(\'connection.php\'); // fichier ou sont contenus les parametres de connection à la // bdd $result=mysql_query(\"SELECT * FROM page WHERE inc=\'$inc\'\"); //recherche d\'une //valeur egale à la variable $inc if ($row=mysql_fetch_array($result)) { // si trouvée : $page=$row[\'page\']; include(\'$page\'); } // fin de condition mysql_close ?> Fin du code Cependant il existe une autre faille dans notre premier include et vous l\'aurez vu si vous avez retenu la premiere faille de ce document ... include(\'$inc\'); nous pouvons aussi mettre comme variable inc : inc=ma_page.html\'); include(\'ma_page2.html Ou tout autre ajout au code initial.... il convient donc de sécuriser aussi cela par des str_replace dont voila la syntaxe : str_replace(\'text_à_remplacer\',\'text_remplacé\',$variable_contenant_le_text) Cette faille permettant l\'inclusion d\'un code étranger au site fit \"trembler\" le forum phpBB dont une version y était sensible. 3°/ L\'inclusion de javascript... Hotmail, service de messagerie était sensible à l\'inclusion de javascript ce qui permettait à une personne mal intentionnée de récupérer le cookie d\'un utilisateur. Comment cette faille se produit-elle ? et comment la corriger ? C\'est ce que nous allons voir maintenant... Sur de nombreux site vous pouvez trouver dans le code (invisible puisque php mais bon ...) : echo \"$ma_variable\"; Ceci permet \"l\'apparition\" du texte de ma_variable sur la page web, ma_variable provenant bien souvent d\'un page auparavant visitée...Supposons que ma_variable a été auparavant filtrée de tout symbole \" et \' rendant ainsi \"impossible\" la modification du code php de la page. Que pouvons nous donc faire ? Notons avant de continuer que cette faille peut etre utilisée sur certains forum et créer ainsi des ravages chez les utilisateurs....Nous vous rappelons donc ici la politique White Hat de Guardenet et vous engageons donc à ne pas utiliser les informations ici présentent à de mauvais fins.... Nous pouvons encore inclure du text et du javascript ou encore une frame pointant vers un autre site, ainsi : ma_variable=<frame name=haut src=mon_site/page.html> Nous n\'étudierons pas les codes qu\'il est possible d\'inclure ceci n\'étant pas le but de cet article... Comment échapper à cette faille ? il faut encore un fois recourir au str_replace() (pour php) III-Conclusion Les failles CSS sont les plus nombreuses sur le net, tous les languages dynamiques étant des cibles potentielles, en tant que webmaster il faut donc bien sécuriser le passage de chaque variable afin de limiter tout risque. j\'espere que cet article vous aura aider à comprendre et corriger les failles CSS Article de : http://gzine.guardenet.com/zine/CSS.htm écrit par Sky Poster un commentaire sur cette article |
Nous - Plan du site - Informations légale - Contact - © Graphiks.net