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

Hacker le chat



  • Partie 1
  • Partie 2


  • Variations sur le thème

    Dans le chapitre précédent, nous avons examiné le cas où la couleur a été insérée dans le texte de la page sans restreindre les guillemets. Et s'il y a des citations? Par exemple, le texte dans le chat est le suivant:
    Voyageur - Alpha, bonjour))
    Alpha - Bonjour à tous! !!

    Comme vous pouvez le voir, la couleur est insérée dans les guillemets environnants. Ce problème est facilement résolu si le chat ne filtre pas le symbole ' . Si tel est le cas, nous pouvons simplement fermer le guillemet ouvert, puis écrire notre script. Par exemple, en définissant la valeur de couleur en rouge 'size = 20' <FONT color = # 00ff00>, nous obtenons à nouveau l'effet avec une police plus grande. Faites attention à l'espace et à l'apostrophe à la fin. Ils sont nécessaires, afin que le guillemet fermant, que le chat lui-même insère, ne détruise pas nos attributs. En conséquence, notre message ressemblera à:

    Shram - Salut

    Si le chat ne saute pas le caractère de citation qui entoure la valeur du paramètre, il ne sera pas possible de pirater le chat à travers 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 une adresse e-mail donné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 sur les forums comme suit:

    <b>&lt;a href=mailto:mylo@myla.net&gt; Fedya Pupkin &lt;/a&gt;</b> (le fragment mailto: la passerelle elle-même insère). Puis, en définissant la valeur "style = background-image: url (javascript: alert ('Ну_нету_у_менямимылала!))" Comme un savon, nous envoyons une alerte à tout visiteur du forum :) ) (notez que l'adresse du savon, en règle générale, filtre les caractères d'entrée ne sont pas définies). Certes, certains forums et chats semblent vérifier le savon, mais cette vérification est réduite à l'exigence de la présence du symbole @ . Si c'est le cas, alors nous allons plaire aux créateurs du forum et dessiner le chien comme suit: mylo@myla.net "style = background-image: url (javascript: alert (" Ну_нету_у_меняmlяml! "))" .

    Dans certaines conversations, vous pouvez insérer vos propres images en définissant l'adresse de l'image. Comme nous le savons déjà, là où il y a une URL, vous pouvez y insérer un script. Je ne vais même pas le mâcher. Tout est si clair.

    Le premier chapitre a montré comment changer la forme d'entrée du chat. 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 complexe qu'elle peut prendre beaucoup de ces remplacements. Changer dans tous les cas de l'adresse est gênant (et il est possible de se tromper). Au lieu de cela, vous pouvez recommander la balise <base href = ': http: //typachat.ru/'ggt; , qui est inséré n'importe où dans le document HTML. Dans ce cas, toutes les adresses relatives seront adressées par rapport à l'adresse spécifiée dans la balise de base (dans ce cas, par rapport à typachat.ru ), quel que soit le nom DNS réel de base.

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

    Il arrive souvent que le surnom dans le texte du chat agit comme un lien, lorsque vous cliquez dessus, vous pouvez envoyer un message privé à la salle de discussion. Voici à quoi cela ressemble en HTML:

    Alpha - Bonjour!

    Modérateur - Bonjour!

    En plus de l'effet décrit dans le chapitre "Miracles avec le symbole =", il est possible d'insérer un script qui déclenche un clic sur un lien (si le chat ne filtre pas les guillemets - dans ce cas " - et le symbole + ). la valeur suivante: "+ alert ('Hello!') +" . Vous pouvez insérer quelque chose plus sérieusement (en utilisant seulement la fonction toString () .) Par exemple, un tel surnom "+ toString (open ('// yahoo.com', '_ top ')) + " envoie un utilisateur qui pique sur votre pseudo, faites une pause de chat dans Yahoo :) ).

    Hacking M chat

    Comme mentionné dans le premier chapitre, il existe deux méthodes pour pirater les chats. Tous les exemples ci-dessus se rapportent à la première méthode - la méthode de pénétration dans les paramètres de l'étiquette. Ici, je veux montrer la technologie de la deuxième méthode - la méthode de rupture de la structure de HTML.

    La couleur des messages dans le chat M a été définie sous forme numérique (et avait donc une limite sur la longueur de la couleur - 7 caractères), avait des filtres de fantaisie, mais manqué un seul caractère » . Voici un extrait de messages dans le chat:

    <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 a été spécifiée sans encadrer les guillemets. La technologie du hacking est simple: on se connecte sous un pseudo arbitraire, et la couleur ' . Ensuite, après être entré dans le chat, nous émettons un message du style 'style = background-image: url (javascript: alert (' Bonjour_les gens !! ')) . Faites attention à l'écart à la fin - c'est obligatoire. Notre message ressemble à ceci:

    <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 s'avère qu'une partie du code HTML - class = "ku"> - se trouvait à l'intérieur de guillemets simples, et était considérée par le navigateur comme une valeur de chaîne de couleur. Cette ligne contient également l'angle de fermeture de l'étiquette, donc notre message est à l'intérieur de l'étiquette! Le code qui va directement après notre message n'est pas compris par le navigateur et ignoré (et cette partie doit être séparée par un espace de notre paramètre de style, sinon le paramètre dans son ensemble sera considéré comme erroné), mais le crochet suivant est considéré comme la balise fermante. C'est très simple.

    Un peu sur le caractère barre oblique inverse

    Dans les chaînes de caractères JavaScript, il existe un caractère de contrôle spécial. Ceci est un caractère barre oblique inverse. L'un de ses objectifs est le suivant: la marque de citation derrière elle est considérée comme un symbole et non comme un terminateur de ligne. Par exemple:

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

    Puisque le caractère \ lui - même est un gestionnaire (et n'apparaît donc pas directement sur la ligne), alors une combinaison de \\ existe pour s'afficher. Une telle combinaison est affichée comme juste un \ .

    Qu'est-ce que tout cela a à voir avec les discussions de hacking? Et voici quoi: certaines salles de discussion ne placent pas de filtre sur les guillemets " (ou ' ) dans le champ pseudo, mais les remplacent par des combinaisons de type " (ou \ " ), estimant que dans ce cas les guillemets seront affichés mais ne pourront pas servir de limiteurs, et ne peut donc pas détruire la structure de HTML. Dans ce cas, les développeurs à courte vue négligent le fait que l'utilisateur peut utiliser le symbole \ pour verrouiller leur caractère \ . Par exemple, un fragment de conversation pour un message d'utilisateur avec le surnom 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, le guillemet en nickel ne viole pas la structure de l'étiquette. Mais si nous changeons le surnom en Al \ "gol , l'insertion de la barre oblique avant 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> Ce faisant, notre slash bloque le slash du chat, et le surnom de la citation détruit la structure HTML! Cela peut être vu si vous cliquez sur le lien dans l'exemple.

    Cet effet peut être utilisé pour pirater les discussions en détruisant la structure HTML. Faisons attention que dans certains cas il est possible de bloquer des citations limitantes par la même méthode, en insérant une barre oblique à la fin d'un pseudo.

    Récemment, j'ai remarqué un autre trou associé à la mauvaise utilisation des programmeurs de symbole \ chat. Supposons, par exemple, que le surnom de l'utilisateur soit inséré dans le corps du chat sous la forme

    <code>&lt;a href=javascript:msgto(&amp;quot;Algol&amp;quot;)&gt;Algol&lt;/a&gt;</code> Si nous changeons le profil en Al'gol , le chat acceptera un tel surnom, mais le remplacera par Al \ 'gol , croyant naïvement qu'en insérant une barre oblique inversée, ils protégeront le tag contre la destruction. En fait, ce n'est pas le cas :) . Lorsque vous insérez un tel surnom dans le corps du chat, il ressemblera à ceci:
    &lt;a href=javascript:msgto(&amp;quot;Al\ gol")'&gt; Al'gol &lt;/a&gt; .
    Dans ce cas, l'explorateur affichera un message d'erreur en essayant de piquer sur le surnom. La raison est la suivante: le signe \ n'a de sens que dans la constante chaîne du JavaScript, mais pas HTML! Le caractère HTML lui-même ne comprend pas, et considère donc la première apostrophe trouvée comme la fin de l'attribut href , en dépit du fait qu'il est précédé de \ . Ainsi, par exemple, un tel surnom Algol '= détruira la structure de l'étiquette, en dépit du fait qu'avant l'apostrophe, un antislash sera inséré

    Piratage au niveau de http

    Comme déjà mentionné, le serveur de chat peut suivre le champ référant de la requête HTTP, et ne pas démarrer le chat si ce champ est différent de celui requis. Afin de contourner cet obstacle, vous devez attraper l'en-tête de requête HTTP envoyé par le chat au serveur (en utilisant des programmes spéciaux, par exemple Naviscope) et écrire un programme spécial qui envoie des requêtes au serveur. Dans ce cas, le contenu des demandes (par exemple, la valeur du champ de couleur) peut être défini arbitrairement.

    Je ne m'étendrai pas là-dessus en détail. Cela va au-delà du piratage HTML.

    Je noterai seulement qu'au niveau HTTP, vous pouvez faire des choses plus compliquées qu'avec le HTML ou le JavaScript conventionnel. Dans tous les cas, je recommande d'afficher les en-têtes des requêtes HTTP lors de la discussion. Ils vous aideront à mieux comprendre le travail du chat.

    Miracles avec le symbole =

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

    &lt;font onclick = alert ('=')&gt; Texte &lt;/ font&gt; ? Je parie que vous ne devinerez pas (à moins que vous ne travailliez certainement pas dans Microsoft et n'avez pas développé MSIE). Le résultat est si spécifique que je n'ai pas pu faire un exemple qui le démontrerait . Mais vous pouvez prendre sur un mot que ce qui suit sera affiché dans la fenêtre du navigateur: &lt;fontonclick = alert ('=')&gt; Texte Comme vous pouvez le voir, la balise d'ouverture dans ce cas n'est tout simplement pas perçue par le navigateur comme une balise, bien qu'il n'y ait aucune erreur de syntaxe :) ). Et que se passera-t-il si nous écrivons Texte

    Curieusement, dans ce cas tout sera en ordre, bien qu'il y ait une erreur de syntaxe. Et si nous cliquons sur le texte, une alerte apparaîtra. Essayez de déplacer la troisième apostrophe pour l'angle, ou pour le texte:

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

    Malheureusement je n'ai pas de code source ou de documentation détaillée pour MSIE, mais je pense que dans ce cas il y a une erreur évidente dans MSIE. Probablement le navigateur analyse le code en deux étapes. À la première étape, il met en évidence les balises, leurs attributs et le texte qui les sépare, et le second analyse le contenu JavaScript des balises (il ne s'agit que des attributs qui permettent une valeur de script, par exemple href ou onclick ). A l'analyse primaire le navigateur pour la raison incompréhensible considère une combinaison = 'le début d'une ligne, malgré le fait que le symbole = est déjà à l' intérieur d'une ligne! Puis en prenant = ' pour le début de la ligne, le programme cherche la fin (tout en oubliant complètement qu'une ligne de plus est ouverte et non fermée). Donc, tout ce qui suit = ' (ou = " ) et jusqu'au caractère suivant ' est ignoré et considéré comme une chaîne! Dans le premier exemple, le navigateur n'a pas perçu le tag: il n'a pas trouvé l'angle de fermeture, car il était dans la chaîne. encore plus surprenant est qu'au deuxième stade de l'analyse des paramètres de la balise, le navigateur voit tout correctement (vous pouvez le vérifier en cliquant sur l'étiquette de texte dans le second exemple), et prend la chaîne si nécessaire, et trouve également l'angle de fermeture si nécessaire. à 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 de navigateur, j'ai été en mesure de commenter une partie du code de chat, simplement connecté simplement avec un pseudo = :) ). Voici l'extrait de code qui affiche la 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>

    Cependant, mon surnom dans la liste n'était tout simplement pas affiché, parce que le fragment entre les citations

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

    C'est génial (ou triste - à la recherche de quelqu'un) que ce pépin passe presque partout où vous pouvez même entrer dans le fil (au moins pour MSIE 5.50.4134.0600), et pour cela, vous n'avez même pas besoin de changer quelque chose dans le formulaire. La mauvaise chose est qu'il est difficile d'en tirer des avantages significatifs (par exemple, lancer un script).

    En conclusion, nous notons que le même symbole a un effet similaire, qui est perçu comme la fin de l'étiquette, malgré le fait qu'il se trouve à l'intérieur de la ligne. Fragment

    &lt;font onclick = alert ('&gt;')&gt; Texte &lt;/ font&gt; est interprété par le navigateur comme erroné, et cela rend insultant le fait que la chaîne de caractères n'est pas fermée.

    Deux hacking T chat

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

    ' " = ;

    Lorsque vous insérez une couleur dans le chat, les guillemets environnants ne l'étaient pas. Fragment de messages dans le chat (par la façon dont l'auteur du chat ne considère apparemment pas nécessaire de fermer les tags), mais nous espérons que cela sera 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>

    C'était embarrassant que l'écart ne soit pas manqué par le filtre. Cependant, après réflexion, j'ai trouvé la solution suivante - j'ai pris la couleur en guillemets simples, et après la couleur sans espace j'ai inséré le paramètre style: 'red'style = background-image: url (javascript: while (1 == 1) ouvert ( )) . Comme indiqué dans le deuxième chapitre, l'espace de séparation dans ce cas n'est pas nécessaire :) ).

    En passant, il y avait beaucoup de cadres dans ce chat, y compris ceux cachés et vides - ils ont probablement pensé à de futures extensions. Mais tandis que les admins pensaient aux extensions, je les ai trouvées une application plus utile. J'ai pendu assez longtemps dans ce chat - quelques mois. Et je ne me suis pas contenté de ça: dans l'un des cadres cachés, j'ai poussé mon site. Et il y avait des bannières du réseau de bannières sur le site. Alors je me suis foutu de centaines de milliers de bannières publicitaires, et mon site a sauté à 5-6 places dans la note des hits Rambler Top 100 (dans mon groupe). Malheureusement, le réseau de bannières a comparé l'attitude des hits / hosts et s'est rendu compte qu'il est entraîné par le nez. Il s'est avéré que le même visiteur vient à mon site tous les 50 fois par jour. Mon compte a été bloqué. Alors probablement encore là et se bloque, l'agité :) ).

    Mais revenons à nos moutons. Après un certain temps, l'administration du chat a remplacé le cgi-shka. Je ne sais pas quelles améliorations ont été faites dans la deuxième édition, mais j'ai seulement remarqué un changement: maintenant la longueur des valeurs de couleur de corde était limitée, et environ 10 caractères (en passant, cette restriction est dans beaucoup de salles de chat). N'est-il pas plus facile de mettre des filtres sur les caractères d'entrée? Bien qu'il soit possible de les protéger du buffer overflow?). Dans cette situation, bien sûr, l'ancienne méthode ne fonctionnait plus. Pour serrer 10 caractères d'un script décent, c'est impossible (ici même le style lui-même ne correspondait pas). Je me suis rendu compte que vous ne pouvez franchir le surnom ou la deuxième méthode - détruisant la structure HTML. J'ai essayé cela pendant plusieurs heures de cette façon. En plus de l'effet bon marché de la disparition du surnom (chapitre "Miracles avec le symbole =") rien ne s'est passé. La rupture de la structure n'a rien donné pour la raison suivante: insérer le symbole au lieu d'une couleur, j'ai ouvert la ligne, mais elle a été fermée par une apostrophe en référence à l'heure (ici le chat était juste chanceux). tags de type <! '"'> ):

    <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, seulement le fragment <a href = javascript: parent.window.Mtm ( .. Et tout ce que j'ai réalisé est la suppression de la balise de référence temporelle.S'il était possible d'insérer des guillemets au lieu de guillemets doubles, il n'y aurait pas de problème. les guillemets ne sont pas utilisés, mais le symbole "n'a pas été filtré par le filtre " . L' entrée sous le pseudo Algol = n'a rien donné, car les caractères après 'Algol =')> ont été ignorés et ne sont pas considérés comme paramètres de l'étiquette. thème ", mais ces scripts ne fonctionnaient qu'en cliquant sur mon lien et :( (J'étais déjà prêt à admettre que toute la discussion ne peut être piratée.) Et puis à la dernière minute, en creusant et en expérimentant dans les profondeurs du HTML, j'ai découvert que le caractère de l'apostrophe inverse est aussi le délimiteur des chaînes! Je me suis connecté avec le pseudo Algol et avec la couleur ` .Et puis, comme message au chat, j'ai envoyé cette ligne: ` style = background-image: url (javascript: alert ('Winning_beats_name_!') . ) Mon message dans le corps du chat 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 ce cas, le fragment <a href=javascript:parent.window.Mtm('22:18:18')> 22:18:18 </a> - <a href = javascript: parent.window.mfor ('Algol') > Algol </a> complètement commenté et a été considéré comme une couleur, et le paramètre de style était à l'intérieur de l' étiquette! Le script a fonctionné :) ).

    Les programmeurs du chat T devront donc développer une nouvelle version de leur cerveau. Il reste seulement étonné combien de meurtrières ils laissent, et avec quelle lenteur ils sont corrigés. Ils disent tout en psychologie: les développeurs de systèmes de défense 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.

    Considérez les méthodes de capture des messages d'autres personnes (messages privés) et l'envoi de messages au nom d'autres Chatovites. Il existe différentes méthodes d'interception conçues pour différents types de conversations. Si le chat est complètement piraté, l'opération de "contrefaçon" (insérer des répliques pour le compte d'autres chatoviens) n'est pas difficile: il suffit d'envoyer un script à privat, qui écrira du texte dans la réplique, puis cliquera sur le bouton "envoyer". Anologiquement, il est possible de sortir et l'utilisateur. Cependant, ces méthodes sont trop rudimentaires, primitives et difficiles à appliquer. Méthodes d'interception plus avancées, dans lesquelles le chat lui-même vous prend pour un autre utilisateur.

    Lors de la création de chats HTML, le principal problème est que le protocole HTTP, en principe, ne prend pas en charge les connexions permanentes . Cela signifie que chaque fois que vous souhaitez recevoir des messages ou envoyer une réplique, le programme de discussion doit vous "connaître", comprendre que vous êtes vous. Si elle ne reconnaissait pas les utilisateurs, elle ne serait pas en mesure de vous envoyer vos fichiers privés et ne pourrait pas écrire vos messages en votre nom. Pour identifier les participants, les chats utilisent différentes méthodes. La méthode la plus couramment utilisée est les adresses IP et la méthode des noms dynamiques. 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'étendrai pas sur cette méthode en détail, je dirai seulement que cette méthode a 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 fréquemment utilisée: la méthode des noms dynamiques. L'essence de la méthode est que chaque fois que l'utilisateur se connecte au chat, il se voit automatiquement attribuer une connexion unique temporaire. Cette connexion s'inscrit automatiquement 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 d'un chat, sa page envoie une connexion temporaire au serveur, à travers laquelle le serveur identifie réellement l'utilisateur. Le système de connexion temporaire génère de manière aléatoire et deux utilisateurs différents ne peuvent pas avoir le même login. Le login peut être composé de plusieurs parties. Il s'agit le plus souvent du numéro de série de l'utilisateur dans la session et de la génération aléatoire d'un mot de passe. Comme l'identifiant de connexion est "cousu" sur la page de chat 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 de discussion ouvertes, etc.

    Il est clair que si nous connaissions le login de l'utilisateur, il ne nous serait pas difficile de "démolir" sous l'utilisateur, simplement en fixant simplement notre page de connexion sur sa page, lors de sa connexion. Ensuite, le système nous prendrait pour ça ... Il s'avère que cela peut être fait facilement si le chat est piraté, et nous avons la possibilité d'insérer votre image dans le chat. Ensuite, si vous utilisez le sniffer comme image (voir le chapitre "Variations sur le sujet"), alors nous pouvons obtenir les connexions temporaires de tous les participants au chat! Et si nous nous intéressons au login spécifique de quelqu'un, nous devons lui envoyer un renifleur en privé. Je note ce qui suit: le login intercepté n'est valide que tant que l'utilisateur est dans le chat, s'il est re-connecté (il sortira et reviendra), alors il aura déjà un nouveau login temporaire.

    Il est clair que si nous interceptons le login temporaire de l'administrateur, ses droits nous transmettent automatiquement la possibilité d'insérer directement des tags dans les messages (absence de filtre pour les symboles < et > ) ou de supprimer le chat ou d'obtenir des informations sur l'utilisateur. et ainsi de suite.

    Le troisième tchat de T hacking

    Donc, revenons à la salle de chat T, qui souffre depuis longtemps. Il n'y a pas longtemps, la salle de discussion T a complètement déménagé vers un nouveau noyau. Maintenant, les règles du jeu ont changé. D'abord, le champ de couleur laisse entrer presque tout (jusqu'aux signes < et > ), et cela ne me rend pas difficile de le pirater. Mais bientôt ce trou a été fermé (non sans ma participation). Dans la nouvelle version du chat, la couleur ne transmettait que des chiffres et des lettres. Pirater la couleur est devenu impossible. Cela m'a fait chercher des méthodes plus sophistiquées. En fait, la seule chose qui restait était un surnom. De ma propre expérience, je savais qu'il était difficile de briser une conversation à travers un surnom, car les développeurs choisissent soigneusement les filtres pour un surnom. Cependant, dans le chat la "puce" était exagérée sur le fait que "le jeu de caractères pour le surnom a été considérablement étendu." C'était comme une sorte de publicité. Un peu de bricolage avec les filtres sur le surnom, j'ai découvert que les caractères suivants sont ignorés:

    ' " = ; \

    Le symbole "a été ignoré, mais avant que le chat insère automatiquement le symbole." Les mécanismes associés à une telle combinaison sont décrits dans "Un peu sur le caractère barre oblique inverse". Cependant, les effets décrits dans ce chapitre n'ont pas donné le résultat désiré. Je l'ai trouvé!

    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 voir, le surnom a été donné comme un lien, lorsque vous avez cliqué sur ce qui s'appelait une certaine fonction. Le gestionnaire de références href était entouré de guillemets simples et le surnom lui-même était entouré de guillemets. Puisque la double citation n'était pas réellement ignorée par le chat dans le surnom, il était impossible d'aller au-delà de l'argument de la fonction. Nick type = ` ne fonctionnait pas, parce que le gestionnaire était entouré d'apostrophes simples, et comme il a été montré dans le chapitre" Miracles avec le symbole = "l'effet avec le signe = n'a pas fonctionné. И тут я перечитал собственную статью, и обнаружил следующее: если обработчик заключен в кавычки, то первая же закрывающая кавычка считается концом обработчика, даже несмотря на то, что сама она находится внутри других кавычек (и идет как строковая константа). Ie. например при компиляции следующего тега:

    &lt;a href='javascript:msgto("Mc'Donald")'&gt; браузер игнорирует двойные кавычки (поскольку они относятся не к HTML а к JavaScript), и воспринимает апостроф после Mc как закрывающую кавычку обработчика. Ainsi. обработчиком является только 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())
    Табличка часто применяемых кодов:
    Symbole Encodage décimal 16ème encodage de caractères * Codage de caractères Unicode
    " " " " "
    ' ' '   '
    " " "   "
    <пробел>   +
    = = =   %3D
    < < < < %3C
    > > > > %3E
    \ \ \   %5C
    % % %   %
    + + +   %2B
    <короткий дефис> ­ ­ ­ %AD
    & & & & &

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

    Il ne sera pas superflu pour vos amis de connaître cette information, de partager leur article avec eux!

    Développer / Réduire Développer / Réduire la boîte avec des commentaires

    Commentaires

    En commentant, rappelez-vous que le contenu et le ton de votre message peuvent blesser les sentiments des personnes réelles, montrer du respect et de la tolérance à vos interlocuteurs même si vous ne partagez pas leur opinion, votre comportement dans les conditions de la liberté d'expression. 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!
    Ecrire un article
    J'ai aimé ça? Abonnez-vous aux nouvelles 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: