Aller au contenu
  • Veuillez ne pas poster de message pour but d'insulter, incitation à la haine, propos sexuels et tout autre qui ne respecte pas nos conditions générales !

Les Failles XSS, leur résolution et explication !


Ubrain

Messages recommandés

Bonjour chère communauté inshare,

 

Un tutoriel que j'ai voulu faire depuis des mois mais qui n'a jamais abouti (la raison en est elle même inconnue !), mais nous y voici, je vais vous apprendre comment régler les failles XSS de manière sécurisée sur n'importe quel site, que ce soit rétro habbo ou sur vos sites personnels !

 

Voici ci-dessous quatre catégories traitant les sujets sur les failles XSS.

 

  1. Les failles XSS, kezako ?
    Révélation

    Premièrement, que signifie XSS ? Cela veut dire tout bêtement le Cross Site Scripting 

     

    Citation

    Moi je lis CSS pas XSS :/ 

     

    Je ne vous apprends rien si je vous dit que le CSS existe dèjà (et pour ceux qui ne suivent pas le CSS est un langage informatique permettant d'attribuer des éléments graphiques à un code, les couleurs, les polices, les tailles sont principalement attribués avec le CSS) et bien comme on ne pouvait pas appeler cela encore "CSS" le créateur à simplement remplacé le C du début par un X
    Le principe d'une faille XSS est simple, il s'agit d'injecter du code non autorisé la ou le site n'est pas sensé en recevoir. Par exemple, si lors de mon inscription je m'appelle 

    
    <bold>UBrain</bold> 

    Sur le site, mon pseudonyme ne sera pas "UBrain" mais "UBrain", j'usqu'à maintenant, rien de bien méchant, j'ai aussi d'autres exemples sur les noms,

    Voici une liste :

    Révélation

    Si je m'appelle :

    
    
    <h1>UBrain</h1>

    Mon nom sera affiché UBrain au lieu de UBrain

    Voyons avec un autre, changeons la couleur cette fois-ci :

    
    
    <p style="color:orange">UBrain</p>

    Je vous laisse deviner le résultat UBrain (cela n'est pas la couleur exacte)

    Ceci marche aussi avec toutes les couleurs par exemple :

    
    
    <p style="color:orange">U</p><p style="color:tomato">B</p><p style="color:blue">r</p><p style="color:pink">a</p><p style="color:green">i</p><p style="color:yellow">n</p>

    Le résultat ressemblera à ceci UBrain

    En soi c'est plutot joli, mais on peut aussi modifier la syntaxe :
     

    
    
    U<br>B<br>r<br>a<br>i<br>n

    Cela fera :

    Révélation

    U

    B

    r

    a

    i

    n

    Aller, encore un dernier exemple,

    
    
    <ul>
      <li>UBrain</li>
      <li>Burain</li>
      <li>niarBU</li>
      <li>iBnAUr</li>
    </ul>

    Voici le résultat :

    Révélation
    • UBrain
    • Burain
    • niarBU
    • iBnAUr

     

    Révélation

    iBnAUr, cela pourrait presque faire office de pseudonyme

     

     

     

    Et il faut savoir que de nombreux sites sont touchés par ces failles, 
    Pour faire simple, cette faille nous permet de modifier le code sans y avoir accès !

     

    Mais, modifier son nom, c'est embêtant, en effet... mais quel est le danger ?

  2. Le danger pour les sites
    Révélation

    Nous avons vu la modification des noms, mais si l'on peut insérer du code... l'on peut forcément aller plus loin ?
    Effectivement, ces failles sont destructrices, elles peuvent pratiquement tout faire sur le site, cela va des redirection au vol de données
    Ces failles permettes non seulement d'injecter du HTML mais par extension, elles permettent aussi d'injecter du PHP, du CSS, du JS et encore d'autres. Imaginez les possibilités destructrices !

     

    Essayons de parcourir le chemin du code que nous entrons, et voyons comment cela abouti :


    Premièrement, je vais me nommer à l'inscription ces trois lignes de code qui sont du JavaScript. Si j'exécute ce code par exemple sur mon site (je sors du contexte de l'inscription pour vous montrer ce que cela fait de façon "normale") il va y avoir un popup avec écrit dedans "Ton site s'est fait hacké"

    
    <script>
      alert('Ton site s\'est fait hacké'); 
      // le "\" permet de dire au script que le ' qui suit ne sert pas à fermer la zone de texte, lors de l'exécution du script l'antislash ne sera pas pris en compte
    </script>

    Une fois l'enregistrement validé, le pseudonyme sera envoyé vers la base de données du site, dans la colonne "pseudonyme". Le danger est à partir du moment ou le site affiche ce nom, pour mettre dans le contexte, voici par exemple le code pour afficher un message dans une southbox (c'est un exemple, n'utilisez pas ce code pour vos southbox ;))

    
    	<?php
    //récupération des données
    $sql = "SELECT * FROM southbox ORDER BY date DESC LIMIT 0,60";
    foreach ($bd->query($sql) as $message) {
    $auteur = $message['auteur'];
    //récupère tous les données sur l'auteur du message (grade, nombre de messages...)
    $sql = "SELECT * FROM membres WHERE pseudo=\"$auteur\"";
    foreach ($bd->query($sql) as $a) {
    }
    
    //code CSS pour que le message ressemble à un message
    echo '<div style="background-image:linear-gradient(to right,#FF7200,#FFAE00);margin:2px;padding:1px;border-radius:20px;color:#901000;font-family:arial;">';
    //permet d'afficher l'auteur et le contenu du message
    echo '<b class="srf"> <i class="fas fa-user-cog"></i> '.$auteur.' : </b> '.$message['contenu'].'';
    
    ?>

    (Ce code est un extrait d'un vrai code d'une de mes southbox j'ai pas mis le code complet pour que vous compreniez et que vous ne vous perdiez pas parmis les lignes de code ;)

    Voici par exemple si j'envoie un message avec un pseudo sans originalité mais normal (sans utiliser de failles XSS)

    Pour avoir accès à cette image, merci de vous connecter.

     

    Si par exemple je modifie "admintest1" par 

    
    <script>
      alert('Ton site s\'est fait hacké'); 
    </script>

    Et bien chaque utilisateur qui serait amené a aller voir la southbox obtiendra un popup avec écrit dedans : Ton site s'est fait hacké


    Pourquoi ?

    Car le navigateur va simplement exécuter le code qu'il va lire et pas simplement le donner.

  3. La résolution de cette faille avec XSS
    Révélation

    Venons-en au concret, maintenant que l'on sait ce qu'est une faille XSS et quel est le danger de la présence de ses dèrnière, voyons donc maintenant comment les résoudre,

    Cela n'est pas très compliqué en soi, il existe de nombreuses manières de supprimer les commandes d'une entrée.

    Mais je vais vous présenter celle qui pour moi reste la plus sécurisée et la plus "utile" : le strip_tags();

     

    C'est une commande PHP qui va supprimer toutes les commandes HTML, XML ET PHP.
    Par exemple si le nom entré est le suivant :

    
    <bold>UBrain</bold>

    Au lieu d'afficher UBrain le résultat sera UBrain
    Et cela marche avec JS, PHP, XML, CSS....
     

    Et sa syntaxe ?

    Il n'y a rien de plus simple à retenir, 

    Voici un exemple :

    
    <?php
    // Récupération du contenu du message (ici j'utilise post)
    $message = filter_input(INPUT_POST, "message");
    // Une fois les données récupérés, je vais utiliser le srip_tags()
    $message = strip_tags($message)
    ?>

    Voici son fonctionnement avec une variable

    Si vous souhaitez savoir comment faire pour filtrer sans variable (juste une chaîne de caractères, c'est expliqué dans le dépliant)

    Révélation

    Le fonctionnement n'est pas si différent, il faut juste transformer la variable en une chaîne de caractères avec des " ou ', comme par exemple :

    
    
    <?php
    // Utilisation du strip_tags sans $variables
    $message = strip_tags("<bold>Chaine à transformer</bold>")
    // Marche aussi comme cela :
    $message = strip_tags('<bold>Chaine à transformer</bold>')
    ?>

     

     

    Attention : le strip tag ne permet pas d'enlever les " ou les ', pour ce faire, je vous recommande d'utiliser htmlspecialchars et ses paramètres.

  4. Savoir si son site à des failles
    Révélation

    Pour savoir si son site comporte ses failles, il n'y a rien de plus simple que d'essayer ces failles, en essayant d'insérer du code dans les champs qui s'enregistrent dans une DB par exemple,

    • Le champ de pseudonyme
    • Les champs personnels (website, discord, mail...)
    • Les images si vous utilisez des url pour l'affichage d'images
    • Le champ d'envoi de message (privé, forum, southbox)
    • Et tous les autres champs qui passent par la base de données !

     

    Et vérifiez votre code, le XSS reste l'une des raison général des hacks. Autant sur Habbo qu'autre part !

 

N'oubliez pas, vérifiez vos sites ceci est toujours très important ;) 
Ce petit tutoriel a mis du temps à etre fait donc n'oublies pas pour me supporter de faire un simple clic sur j'aime ! :p 

 

Très bonne journée à vous tous !

Et très bonne continuation !

 

 

  • J'aime 4
Lien à poster
Partager sur d’autres sites

il y a 5 minutes, Pancani a dit :

Salut, merci à toi d'avoir pris le temps de rédiger ce tutoriel détaillé 

Il servira à beaucoup de gens même hors catégorie Habbo ;) 

à l’instant, Rick a dit :

Salut,

 

Un très bon tutoriel qui va en aider plus d'un !

 

- Rick

Merci ;) 

 

 

 

 

Lien à poster
Partager sur d’autres sites

Quand je vois faille XSS (dans le domaine habbo) ça me fait penser directement à SystemCMS

 

Mais comme tu le précise, il suffit de mettre un htmlspecialchars ();

 

Merci pour ce bon tuto qui mérite un bon ?

 

 

Souvent la moitié de la réponse se trouve dans une question bien posée.

Lien à poster
Partager sur d’autres sites

il y a une heure, MonsieurBanane a dit :

Salut,

Le tutoriel est top! Merci :) 

 

il y a 11 minutes, Scorpio a dit :

Quand je vois faille XSS (dans le domaine habbo) ça me fait penser directement à SystemCMS

 

Mais comme tu le précise, il suffit de mettre un htmlspecialchars ();

 

Merci pour ce bon tuto qui mérite un bon ?

 

il y a une heure, DEvPuxZz a dit :

Bon tuto merci ?

Encore merci ;) 

 

 

Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...