Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 21

Discussion: farce, ha, ha !

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut farce, ha, ha !

    Bonjour, je veux faire une farce à ma nana et à son fils qui habite avec nous. On a une livebox à la maison et eux deux sont en wifi alors que je suis raccordé en filaire à deux pas de la box. En utilisant tcpdump je sais à peu près voir sur quel site ils se balladent en faisant :
    Code :
    sudo tcpdump -vvi eth0 -s 0 host new-host-3|grep www
    (sa machine toute neuve que je lui ai offerte pour Noël est la "new-host-3" et son fils navigue avec un ipod dont je connais les IP)

    Maintenant, ce que je voudrais faire est de forger des paquets contenant une page html toute simple (ce que je sais faire quand c'est vraiment basique) et qui dirait par exemple "www.truc-truc.com c'est pas bien; sauve toi vite de là" où n'importe quel truc débile qui reprendrait le nom du site ou de la page où ils seraient.

    Donc ce que j'envisage est un petit truc en C qui utiliserait la fonction
    Code :
    sendMessage(VICTIM_SERVER_PORT, INADDR_VICTIM, buffer)
    ou peut-être simplement un
    Code :
    write(sock, (char *)&buf, msglen)
    et ça devrait passer; il est bien évident qu'il me faudrait envoyer ça sur le port qui serait utilisé par leur navigateur, ce qui m'est donné par tcpdump.

    Pour ceux qui connaissent, est-ce que hping (2 ou 3) pourrait m'être d'une aide quelconque ? À ce moment là peut-être qu'un script suffirait, sans que j'aie besoin de me replonger dans les socket en C. Ou alors est-ce que justement il faudrait que je refasse du C pour avoir quelque chose d'assez rapide pour m'insérer dans la conversation entre deux paquets dont je me débrouillerai pour piquer les provenances et les numéros d'ordre ?
    Merci de me donner vos impressions sur ce projet et des pistes que vous me conseilleriez d'explorer,

    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 470
    Points : 13 986
    Points
    13 986

    Par défaut

    Hello,

    C'est tout-à-fait faisable mais pas avec un simple write ni en évoluant à si bas niveau. De plus, tu ne peux pas forcer l'affichage d'une page sur un client web qui ne l'a pas explicitement interrogé s'il n'est pas explicitement prévu pour cela à la base.

    Par contre, il est tout-à-fait envisageable, et à vrai dire très courant, d'installer un petit serveur Apache sur ta machine, d'y héberger les pages en question, et d'agir au niveau du D.N.S. pour y rediriger les requêtes à destination des sites incriminés. Tu peux également installer un proxy HTTP comme Squid qui serve aussi de filtre transparent et qui serve les fakes sur demande.

    Si tu as accès aux machines de tes « victimes », le mieux est d'aller modifier directement le fichier /etc/hosts pour aller attribuer statiquement des adresses fixes à certains noms de machine, en l'occurrence celle de ton serveur. Ce fichier est originaire d'Unix mais existe sur la plupart des systèmes.

    Sinon, il faudra installer un petit serveur DNS sur ta machine en plus du serveur Web pour distribuer les fausses adresses le cas échéant et renvoyer sinon la requête sur le vrai serveur. Il faudra également modifier la config' de la Livebox pour ajouter ton serveur en tête de liste. Je ne sais pas si c'est possible.

    Installer les serveurs Web et DNS ne posent pas de problème particulier : ils sont packagés par ta distribution et il suffit de les installer. Par contre, sois conscient que ce genre de « blague » commence généralement de cette façon avant de devenir nettement moins drôle pour les utilisateurs : l'admin système auto-proclamé a vite tendance à se prendre au jeu et à décider ce que ses proches devraient voir ou non. Gare au retour de bâton si ta famille a également quelques notions techniques. :-)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    YOUPI que ce soit faisable, et à vrai dire je m'en doutais un peu, puisque je n'aurais tout de même pas envisagé un truc que j'aurais su infaisable.
    Par contre l'information comme quoi c'est du trop bas niveau m'embête un peu; j'aurais bien aimé avoir à refaire des socket en C. Mais si il faut en arriver à truander la communication pour faire croire que la page, ou les paquets bien numérotés, vient ou viennent du serveur, et sur un port que je ne connais pas à l'avance, ça va être trop dur pour moi.
    Ensuite, installer Apache (je l'ai déjà fait) et un serveur D.N.S. et éventuellement Squid, ça ne me plaît pas trop pour l'instant, pas plus que d'aller bidouiller dans les machines de la maisonnée.
    Ton avertissement ne tombe pas dans l'oreille d'un sourd, et je ne veux rien "décider" pour eux, ni n'ai peur d'aucun coup de bâton :
    Citation Envoyé par Obsidian Voir le message
    Par contre, sois conscient que ce genre de « blague » commence généralement de cette façon avant de devenir nettement moins drôle pour les utilisateurs : l'admin système auto-proclamé a vite tendance à se prendre au jeu et à décider ce que ses proches devraient voir ou non. Gare au retour de bâton si ta famille a également quelques notions techniques. :-)
    Par contre je veux leur faire le coup une fois, je ne sais pas comment encore.
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 470
    Points : 13 986
    Points
    13 986

    Par défaut

    Citation Envoyé par dva2tlse Voir le message
    Par contre l'information comme quoi c'est du trop bas niveau m'embête un peu; j'aurais bien aimé avoir à refaire des socket en C.
    Si ton objectif est un prétexte pour refaire un peu de programmation réseau, tu peux effectivement écrire un nano-serveur web en C qui reconnaisse quelques commandes fondamentales.

    Mais si il faut en arriver à truander la communication pour faire croire que la page, ou les paquets bien numérotés, vient ou viennent du serveur, et sur un port que je ne connais pas à l'avance, ça va être trop dur pour moi.
    Effectivement, il va falloir taper dans les raw sockets et renvoyer une fausse page. Ça peut être intéressant en soi si tu veux faire de la programmation socket. Les principales difficultés vont provenir du fait que les données que tu vas envoyer vont entrer en conflit avec les vraies données qui vont revenir au même moment, qu'il va falloir les envoyer au moment exact où ta victime veut les consulter (donc de manière automatique) et surtout de celui que tu ne peux pas « pusher » une page vers un client web (le navigateur de tes victimes). S'il ne fait pas fonctionner à l'avance un script sur une de ses pages, il faut que ce navigateur ouvre une connexion lui-même et envoie une requête pour pouvoir lui transmettre une page quelconque.

    Ensuite, installer Apache (je l'ai déjà fait) et un serveur D.N.S. et éventuellement Squid, ça ne me plaît pas trop pour l'instant, pas plus que d'aller bidouiller dans les machines de la maisonnée.
    Ce n'est pas difficile mais tu ne peux pas t'en sortir uniquement avec un soft, fonctionnant sans privilège et sur ta machine uniquement. Heureusement d'ailleurs, sinon n'importe qui pourrait prendre le contrôle de n'importe quel réseau et ce pour des raisons nettement moins bon enfant.

    Le plus simple pour faire ce que tu veux faire sans avoir à tripatouiller les machines-cibles est de devenir toi-même le point d'accès : si tu as une carte Wifi sur ton ordinateur, désactive le WiFi sur ta Livebox et monte un réseau portant le même nom sur ton ordinateur, avec le même système de chiffrement et la même passphrase. De ton côté, tu te relies à la Livebox soit avec un câble Ethernet, soit en Wifi mais avec un autre nom réseau.

    De là, tu re-routes par défaut tout le trafic vers la box, en activant le forwarding et avec une règle de routage simple, éventuellement un peu de NAT avec iptables. Tu pourras ensuite facilement intercepter le trafic qui transite par ta machine.

    À ce moment-là, tu peux également mettre en place ton propre serveur Apache, ton propre serveur DNS, et également un serveur DHCP histoire d'avoir le contrôle sur la chaîne entière. Mais le plus simple dans un premier temps, si les sites à intercepter ont une adresse IP fixe (ce qui est pour ainsi dire toujours le cas) consiste à faire simplement du NAT statique avec une règle iptable pour transformer une adresse IP donnée en une autre. Ça s'insère et se retire en une seule ligne de commande et se fait à la volée. Tu pourras alors facilement rediriger une requête ponctuellement pour faire ta « blague ».

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    \ Salut Obsidian,
    oui en effet, j'aurais bien aimé avoir à refaire un peu de programmation réseau, mais le nano-serveur web en C que tu évoques me paraît un peu trop ardu pour moi avec la motivation que j'ai; par contre je suis très motivé par ma fameuse farce, et si j'y arrive un jour, je serai très fier de moi.
    \ Mais il reste quelques "petits" obstacles à franchir en l'état actuel de mes connaissances.
    -En premier lieu, je saurais faire un "bind" sur un port pour attendre un paquet, mais je ne sais pas à l'avance sur lequel le faire. Sais tu s'il existe une possibilité d'attendre tout paquet, quelle que soit sa destination ? Un logiciel commme tcpdump le fait bien, et c'est du C; peut-être me faudrait il rechercher les "bind" dans les sources pour voir s'il fait une boucle permanente sur 65 mille ports, ce qui me paraît peu probable. Ou alors faut il voir avec du python qui doit être plus facile à utiliser pour bidouiller avec des paquets, à mon déjà lointain souvenir de quand j'avais envoyé des requêtes pour initialiser un routeur ?
    \ "taper dans les raw sockets et renvoyer une fausse page", c'est effectivement ce que je veux faire, et j'espère bien que "Ça peut[puisse] être intéressant en soi si tu[je] veux faire de la programmation socket".
    \ Donc ce que j'envisage est de trouver le port de ma "victime" vers lequel le serveur web envoi les paquets que son navigateur attend.
    -soit avec tcpdump, mais alors j'aurais un script (en bash puisque je suis sur un petit linux-ubuntu) qui mêlerait un appel à tcpdump "pipé" sur un awk ou je-ne-sais quoi pour ressortir le N° de port qui m'intéresse, puis du C qui utiliserait ce N° pour fabriquer un paquet comme je veux.
    -soit encore du C me permet de lire tout paquet qui passerait sur le réseau et je pourrai en forger un nouveau qui ferait l'affichage que je veux.
    Bon, ça me fait du pain sur la planche, mais qu'en penses tu, et comment faire le "bind" sur tous les ports ?
    \ David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    \ Bonjour, je me réponds à moi même pour que les quelques uns qui soivent ceci, ou qui tombent dessus par hasard, puissent voir où j'en suis et répondre à mes nouvelles questions, puisque le post va remonter.
    \ Donc j'ai trouvé une suite de tutos assez fabuleuse pour moi, sur hxxp://yuba.stanford.edu/~casado/pcap/section1.html et section2 et section3 et section4 où j'en suis sans avoir tout à fait terminé.
    \ Mais me vient à l'esprit la question du pas suivant : je peux maintenant capturer et lire les paquets qui transitent en provenance de ma victime adorée ou de son fils, ou qui leur sont envoyés; mais comment s'insérer dans une conversation avec un site web et en pervertir un paquet qu'il retournerait ?
    \ Un précédent posteur, sur ce site ou ailleurs, m'a indiqué qu'il fallait qu'une page soit sollicitée pour être affichée. Donc peut être qu'il suffit que j'attende une requête GET, qui me donnera entre autres le N° de port auquel répondre, et je forgerai un paquet qui prendra de vitesse le serveur web pour faire afficher mon message bidon.
    \ Bon, merci de m'avoir lu; ce monologue a été très constructif et j'ai du boulot pour une bonne journée ou deux, et si quelqu'un a la moindre remarque à faire, je l'étudierai volontiers pour faire avancer le schmilblick.

    \ David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  7. #7
    Membre éprouvé
    Inscrit en
    septembre 2009
    Messages
    1 169
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 1 169
    Points : 484
    Points
    484

    Par défaut

    Salut,

    Tu ne parts pas sur la bonne solution car avec ton PC, tu ne peux que sniffer car si tu réponds aux requêtes, il y aura conflit avec le serveur d'origine (deux machines qui répondent à la même requête... bouh c'est pas bien ).
    => De plus, si ton PC n'est pas placé entre le serveur et le PC de la victime, il est fort probable que tu ne reçoives pas toutes les requêtes si tu as des switchs dans ton réseau local.

    Tu as deux méthodes possibles :
    - la solution du fichier hosts citée précédemment (celle que je te conseille d'utiliser)
    - mettre un PC avec deux interfaces réseau entre le PC ciblé et le serveur pour pouvoir modifier les paquets à sa guise.

    La solution 1 est simple :
    1- Tu installes un serveur Web sur ton PC : il y a plein de tutos sur le net (google => tuto WAMP) pour installer un serveur web (c'est facile)
    2- Tu crées les pages web et tu les mets sur ton serveur : tu n'as forcement besoin de connaitre le langage HTML pour créer tes pages web => tu crée un fichier .txt avec ton message puis tu le renommes en .htm (ce ne sera pas une vrai page web conforme au langage HTML mais ton message devrait quand même s'afficher)
    3- Tu édites le fichier hosts du PC de ta victime de façon que à ce que le PC cible utilise l'adresse IP de ton serveur au lieu de celui du serveur Web d'origine pour charger les pages.
    => c'est pas compliqué à faire

    La solution 2 demande de multiples connaissances en réseau ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Salut boboss123,
    j'ai bien l'intention de répondre aux requêtes qu'enverrait ma nana ou son fils à un serveur, et c'est à ce monment-là que j'enverrai mon paquet frelaté; je pourrais profiter de l'occasion pour envoyer proprement au serveur une fin de connexion.
    Mon embryon de réseau local est une vulgaire Livebox à laquelle ils sont connectés en wifi et moi en filaire. (Y a-t'il du hub ou du switch là dedans ? Je crois que ce n'est pas du switch puisque j'arrive à lire leur requêtes complètes)
    J'espère, en sniffant le réseau, pouvoir savoir à qui ils envoient un GET, et prendre le serveur de vitesse, et renvoyer ma daube.
    Pour cela il me faut plonger dans le C; pour l'instant je n'en suis qu'à lire les paquets qui circulent sur le réseau; pour cela j'ai besoin d'une fonction que je ne trouve pas : "hex_and_ascii_print"; tu avais été balèze pour me trouver définition de la structure du paquet dans l'autre thread, est-ce que tu pourrais me trouver ça aussi ? J'ai évidemment déjà cherché, mais infructueusement; pourtant tcpdump utilise ça, mais je ne trouve pas le source, et il ne semble pas que ce soit dans la bibliothèque libpcap.
    Voici ce que je cherche :
    /*
    * Print the raw packet data in hex and ASCII.
    */
    if (Xflag > 1) {
    /*
    * Include the link-layer header.
    */
    hex_and_ascii_print("\n\t", sp, h->caplen);

    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    je me réponds à moi-même, pour faire savoir à boboss123 que j'ai trouvé une fonction du même genre que celle que je cherchais, et qui s'appelle print_hex_ascii_line et provient du code de sniffex.c qui comme son nom le laisse supposer est un sniffeur de réseau. (de chez tcpdump.org, merci à eux)
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 470
    Points : 13 986
    Points
    13 986

    Par défaut

    Citation Envoyé par dva2tlse Voir le message
    Salut boboss123, j'ai bien l'intention de répondre aux requêtes qu'enverrait ma nana ou son fils à un serveur, et c'est à ce monment-là que j'enverrai mon paquet frelaté; je pourrais profiter de l'occasion pour envoyer proprement au serveur une fin de connexion. Mon embryon de réseau local est une vulgaire Livebox à laquelle ils sont connectés en wifi et moi en filaire. (Y a-t'il du hub ou du switch là dedans ? Je crois que ce n'est pas du switch puisque j'arrive à lire leur requêtes complètes) J'espère, en sniffant le réseau, pouvoir savoir à qui ils envoient un GET, et prendre le serveur de vitesse, et renvoyer ma daube.
    J'avoue que ton approche me laisse un peu perplexe. Tu ne te sens pas à la hauteur pour écrire un nano-serveur web capable de répondre à deux ou trois commandes, ni à modifier légèrement le D.N.S. pour renvoyer les requêtes vers ta machine, mais tu te sens capable d'écrire depuis zéro un programme en C passant en mode promiscuous pour intercepter les paquets au vol, pour en faire l'analyse en profondeur (en analysant l'entête IP, puis l'entête TCP et, enfin, le contenu), pour reconstituer un début de pile TCP pour remettre le tout dans l'ordre et, enfin, détecter une requête « GET » en faisant, pour cela, exactement le travail que le nano-serveur t'aurait demandé ?

    Pour cela il me faut plonger dans le C; pour l'instant je n'en suis qu'à lire les paquets qui circulent sur le réseau; pour cela j'ai besoin d'une fonction que je ne trouve pas : "hex_and_ascii_print"; tu avais été balèze pour me trouver définition de la structure du paquet dans l'autre thread, est-ce que tu pourrais me trouver ça aussi ? J'ai évidemment déjà cherché, mais infructueusement; pourtant tcpdump utilise ça, mais je ne trouve pas le source, et il ne semble pas que ce soit dans la bibliothèque libpcap
    À vue de nez, il ne s'agit que d'une fonction qui affiche une chaîne « en ASCII et en hexadécimal ». Il doit s'agit simplement de la fonction servant à faire un dump à l'écran :

    Code Shell :
    00000000 41 42 43 44 45 46 47 48 49 4a 4b 4c ABCDEFGHIJKL

    Si tu en as vraiment besoin, tu peux la réécrire toi-même. Mais ce n'est pas cela, en soi, qui va faire avancer ton projet.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Salut Obsidian,
    tu as raison, une fonction hex_and_ASCII_print qui me fait un dump à l'écran, ce n'est pas ça qui va faire avancer mon schmilblick; d'ailleurs celle que j'ai trouvée ne me sert déjà presque plus.
    Pour ta perplexité, tu m'a demandé il y a quelques jours si je ne cherchais pas un prétexte pour faire des socket en C; hébin oui, des socket ou n'importe quoi de compliqué et qui m'apprenne des choses, comme la structure d'un paquet et des plaisanteries comme ça.
    Le nano-serveur web et le D.N.S., ça m'obligerait à modifier des choses ailleurs que dans mon propre PC, donc ça ne me plait pas, et je devrais pouvoir faire autrement pour arriver à mes fins. Donc je continue dans cette voie qui ne me semble pas bouchée.
    Par contre en ce moment, ce qui me bloque, c'est que je n'arrive pas à lire la fameuse requête GET qui me dirait tout. J'arrive à la voir en sortie de tcpdump quand je le "pipe" avec un "grep GET", mais pas dans le paquet qui m'arrive sur le réseau.
    Sais tu comment faire ? Dans quel membre de quelle structure ça pourrait être ?
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 470
    Points : 13 986
    Points
    13 986

    Par défaut

    Citation Envoyé par dva2tlse Voir le message
    Par contre en ce moment, ce qui me bloque, c'est que je n'arrive pas à lire la fameuse requête GET qui me dirait tout. J'arrive à la voir en sortie de tcpdump quand je le "pipe" avec un "grep GET", mais pas dans le paquet qui m'arrive sur le réseau.
    Sais tu comment faire ? Dans quel membre de quelle structure ça pourrait être ?
    David
    Ce n'est pas dans une structure quelconque. TCP est un protocole servant à « émuler » un flux bidirectionnel comme si tu lisais un tube, un fichier ou une liaison point-à-point, par exemple en écoutant directement un modem analogique. Tu peux ouvrir n'importe quelle connexion vers n'importe quel serveur sur Internet avec telnet ou netcat, par exemple.

    Une fois la communication établie, le type d'informations échangées ainsi que la manière de le faire forment le « protocole de communication » avec ton serveur. Bon nombre d'entre eux sont des protocoles basés sur le texte. C'est notamment le cas de HTTP (au moins pour les premiers échanges) et SMTP pour le mail.

    Par contre, c'est la pile TCP/IP de ton système qui encapsule ce flux continu de données dans des paquets dont elle choisit elle-même la taille optimale. En outre, l'équipement par lequel transite ton paquet peut lui-même fragmenter ce paquet. Ces morceaux peuvent alors voyager en suivant des chemins différents et arriver dans le désordre jusqu'à ta machine. Et c'est toujours ta pile TCP/IP qui va attendre l'arrivée de chaque morceau si nécessaire, va reconstituer le puzzle et va mettre bouts à bouts les charges utiles de chacun des paquets.

    Ça veut dire que ce que tu cherches est un morceau de chaîne de caractère écrite en clair, mais qui peut se retrouver à cheval sur plusieurs paquets qui, eux-mêmes, peuvent être mélangés et/ou découpés en morceaux, même si c'est peu probable, spécialement sur un réseau local.

  13. #13
    Membre éprouvé
    Inscrit en
    septembre 2009
    Messages
    1 169
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 1 169
    Points : 484
    Points
    484

    Par défaut

    Je persiste et signe que tu vas te casser les dents sur cette methode...

    Si vraiment tu veux faire de la programmation de socket, commence par faire un serveur Telnet avec un interpréteur de ligne de commande : là, il y a déjà de quoi s'occuper pour un bon petit moment.

    Ensuite, tu pourras passer au développement d'un serveur Web (pas bien plus compliqué => faut juste connaitre en plus le langage HTTP)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Bonsoir boboss123,
    oui, pour se casser les dents je ne sais pas encore; quand j'en serai arrivé là, je serai bien obligé de changer mon fusil d'épaule, et de m'acheter un dentier, mais pour l'instant j'ai un problème de réseau avec une machine virtualisée par QEMU.
    En effet, je voudrais commencer par sniffer des paquets qui vont ou viennent d'une machine virtuelle pour ne pas embêter ma nana ni son fils. Et je me ferai les dents (décidément fortement mises à contribution ces temps-ci) sur ma machine virtuelle avant d'"attaquer" les autres habitants de la maison.

    La programmation de socket, j'en ai déjà fait un peu pour m'envoyer des messages d'une fenêtre à l'autre de mon écran; donc ça me suffit bien, et le telnet, j'en ai déjà bavé avec les DO, DON'T, WILL et WON'T donc ça va comme ça, j'aime mieux sniffer du paquet et en envoyer des pourris.

    Donc moi je persiste et signe comme un têtu.
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  15. #15
    Membre éprouvé
    Inscrit en
    septembre 2009
    Messages
    1 169
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 1 169
    Points : 484
    Points
    484

    Par défaut

    Donc si tu t'obstines à partir dans cette direction, tu vas devoir forcement créer un mini-serveur Web à cause des contraintes du protocole TCP (voir les messages d'Obsidian).

    Commence par faire un sniffer HTTP qui affiche dans une console le nom des pages Web et leur contenu (tu dois donc détecter dans le flux TCP le début et la fin d'une page Web).

    Ensuite tu pourras modifier le contenu du fichier puis le renvoyer.

    Je te laisse cogiter sur ces quelques points :
    1- une chaine de caractère peut être a cheval sur deux paquets TCP
    2- des paquets peuvent être perdus (perte de paquets du à des perturbations électriques, ou perte de paquets du au traitement des buffers de réception trop long)
    3- lorsqu'on charge une page web, plusieurs sockets sont ouverts (car une page web est constituée de plusieurs fichiers : .htm, .css, .jpeg, ...)
    4- un navigateur web peut charger plusieurs pages web en même temps
    => regardes bien comment fonctionne le protocole TCP (si tu ne le connais pas déja)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    bonjour, en effet ce que tu me proposes me plaît, un sniffer HTTP qui affiche dans une console le nom des pages Web et leur contenu. C'est évidemment le premier pas vers ce que je veux faire.
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Bonjour È ceux qui reprennent ce fil s'il y en a qui y sont attachÅs, et aux autres qui arrivent comme µa,
    alors maintenant je sais sniffer ce qui va et vient de ou vers une machine virtuelle que j'ai crÅÅe avec qemu dans mon linux. Ca a ÅtÅ un peu difficile parce qu'il m'a fallu un dispositif tuntap pour que la machine virtuelle puisse s'accrocher È un semblant de rÅseau, puis il faut un pont public entre ce brin de rÅseau et celui de la maisonnÅe qui est accrochÅ È la Livebox.
    Maintenant je peux voir quel site visite le FireFox de la machine virtuelle, par un strstr((needle='http'), (haystack=payload)) dans le paquet qui a ÅtÅ captÅ.

    Puis il faudrait que j'inspecte le paquet pour savoir È qui renvoyer une fin de session (par tcp[13]=1-FIN ou tcp[13]=4-RST) (ou peut Átre qu'il faut inspecter un paquet prÅcÅdent, ou mÁme µui du dÅbut de la communication tcp, ce qui veut dire qu'il faut rechercher le handshake (SYN-4, ACK+SYN-36, ACK-32))

    Puis cette adresse È qui j'ai envoyÅ la fin, ou le host Åquivalent, il faudrait que semble en provenir le paquet farceur.

    Quelqu'un peut il me dire oË et comment trouver l'adresse d'oË doit sembler provenir le paquet farceur.
    merci,
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 470
    Points : 13 986
    Points
    13 986

    Par défaut

    Si tu parviens à reconnaître les flags TCP, alors tu as forcément les entêtes de tes paquets. Tes données sont précédées par l'en-tête TCP, lui-même précédé par l'en-tête IP. C'est ce dernier qui contient les adresses IP source et destination de ton paquet, sachant que lors d'une communication TCP, chaque paquet est « une réponse au précédent » et se réfère à celui-ci via un numéro de séquence.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Salut Obsidian,
    oui en effet, j'ai accès aux flags de l'en-tête TCP; j'ai vu qu'il y avait dedans les Numéros des ports, et les adresses IP elles-mêmes doivent être dans le header du paquet IP. Donc je peux reconstituer d'où vient le paquet.
    Ce qui m'êmbête cependant, c'est que quand je regarde les communications avec tcpdump, je m'aperçois que les paquets qui vont de ma machine vers le serveur, proviennent de ports différents d'un paquet sur l'autre; donc je suppose que ceux qui viennent du serveur vers le FireFox de la machine virtuelle qui simule mes futures victimes le font aussi; ils ne doivent pas tous venir du même port; mais d'après ce que tu me dis et que je viens de relire, il serait plus important de s'occuper du numéro de séquence pour simuler le prochain paquet, celui que je veux forger à ma guise, et j'espère que tu t'aperçois que, petit à petit, mon entêtement semble me faire avancer dans la bonne direction.
    Bon, YOUPI, il ne me reste qu'à coder une petite incrémentation du N° de séquence héhop... RDV au prochain problème; merci et à bientôt,
    David


    re-Bonsoir,
    je te disais tout à l'heure RDV au prochain problème; hébé il n'a par tardé à arriver en ce sens que j'ai cherché où pouvaient bien se trouver les flags et le numéro de séquence, puisque les flags, j'en parlais précédemment, mais je n'y ai jamais eu accès que par le filtre de pcap_setfilter. Je sais donc qu'ils sont dans l'octet 13 du header tcp, mais je n'arrive pas à trouver la struct qui définit comment s'en servir. Dans pcap.h il y a plein de pcap_toto_t qui sont des typedef de diverses structures, mais celui que je cherche est pcap_t, qui est un typedef de struct pcap, mais je n'arrive pas à le trouver.
    Autre chose, à propos des numéros de séquence; suffit il simplement qu'un paquet arrive soi disant du même endroit avec le bon n°, pour qu'il soit considéré comme le paquet suivant ?
    David qui patine un peu

    [.../...]

    mais ça y est j'ai trouvé des choses qui m'intéressent dans pcap-int.h, YOUPI
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 62
    Points
    62

    Par défaut

    Bonjour,

    bon, alors dans le boulot pour finir par réussir à réaliser ma farce, j'en suis désormais à un nouveau blocage que je vais tenter d'expliquer après avoir présenté où j'en suis (ou l'avoir rappelé pour certains qui m'ont déjà lu).

    Au tout début, j'avais envisagé de m'imiscer dans la conversation TCP entre le PC de ma nana ou de son fils et le serveur avec qui il causerait présentement, mais (comme me l'avait tout de suite signalé Obsidian sur ce forum) j'en ai abandonné l'idée parce que cela me semble trop difficile de négocier avec les marqueurs "seq" et "ack" qui régulent la conversation TCP.

    Donc je vais faire ce que les hackeurs appelent une "attaque MITM" (Man In The Middle) et qui consiste à envoyer de faux paquets ARP qui font croire au routeur que je suis le PC de ma nana, et au PC de ma nana que je suis le routeur; ainsi tous les paquets qu'elle échangerait avec un serveur passeraient par moi, et je pourrai modifier à ma guise ceux qui en reviendront pour faire ma farce.

    Pour éviter d'agacer ma nana et son fils avec des essais répétitifs et infructueux, j'utilise une machine virtuelle à leur place.

    Et là se pose le problème suivant :

    La machine virtuelle est connectée par un pont réseau (bridge) à notre petit réseau domestique constitué de la box, les PC's de ma nana et de son fils, de mon propre PC, du téléphone et des télés, qui passent par l'ADSL.

    Seulement il semblerait que dans le script que j'ai fait pour que ma machine virtuelle se lance (avec kvm) toujours de la même façon et sans la moindre clic, [... donc il semblerait] que la machine virtuelle ou le pont récupère l'adresse IP de ma machine, ce qui fait que je ne peux plus aller sur le net' sauf à travers elle, et que libnet (l'application qui envoie les paquets ARP) ne peut plus envoyer de paquet ARP en utillisant cette adresse comme source.

    (le script en question est au post N°7 d'un autre fil de discussion où je cherchais déjà comment faire pour que la machine virtuelle et son petit bout de réseau n'interfère pas avec le réseau domestique auquel est acrochée ma machine : http://www.developpez.net/forums/d13...e/#post7098971

    Donc j'essaye de fabriquer gentiment des paquets ARP pour faire ma farce, et ça ne veut pas.
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •