Posted by Star | Posted in | Posted on 21:55
1.- La base de los programas que usaremos.
2.- Creación de un esnifer sencillo
3.- Envío de tramas de desautenticación/disociación
4.- Inundación RTS/CTS con duración manipulada
1.- La base de los programas que usaremos.
Vamos a usar “parte” del código fuente de la suite de aircrack-ng para adaptarlos a nuestros ejemplos, así el trabajo “duro” ya está hecho y de paso, vamos comprendiendo cómo esta gente llegó a donde ha llegado…
Estos scripts no son nada modulares ni “exportables”, no contemplan los numerosos errores de programación que seguro que tienen, igualmente seguro que “sobran” porciones de código, pero caray!! Que esto no es un curso de C, así que perdonad por la falta de rigor en la programación y centrémonos en su funcionamiento…
Usaremos airodump-ng para “husmear” el medio y luego iremos afinando los ejemplos que nos ocupan.
También es [b]conveniente [/b]que estés familiarizado con algún esnifer.
Lo primero nos descargaremos la suite de aircrack-ng y la instalamos
- Código:
tar xvfz aircrack-ng-1.0-rc3.tar.gz cd aircrack-ng-1.0-rc3 cd src make unstable=true
En este punto ya podemos usarla… pero veamos nuestro primer programa:
2.- Crear un pequeño esnifer para examinar el tráfico. Programa wifiesnif.c
En este ejemplo haremos lo siguiente:
- • Abrir la tarjeta inalámbrica para poder capturar y enviar paquetes (el envío en este ejemplo no está implementado) • Capturar paquetes en el aire • Mostrar los paquetes capturados • Analizar el campo Frame Control de la cabecera MAC
Este mismo script podríamos usarlo para ir “mas allá”, para analizar todo el paquete, los datos, el tipo de cifrado, etc… pero para que no sea muy largo lo dejé tan sólo en:
- • Obtener los bytes de FC • Mostrar si se trata de un FromDS, toDS, WDS ó ad-hoc • Mostrar el tipo de trama: Administración Datos o Control • Averiguar si se trata de un paquete cifrado o no
Se podrían implementar nuevas consultas, todas la que desees, luego te “pongo deberes”
Te recuerdo que existirán líneas del tipo #include, #define y otras que pueden no ser necesarias, están porque poco a poco irá creciendo el programa y se necesitarán más adelante.
Veamos lo “básico” del código:
Función dump_packet
- Código:
void dump_packet(unsigned char* packet, int len) // volcado de paquetes a pantalla { int i=0; printf("\n"); for(i=0; i
{ if(i>0 && i%4 == 0)printf(" "); if(i>0 && i%16 == 0)printf("\n"); printf("%02X ", packet[i]); } printf("\n"); }
- Código:
int read_packet(void *buf, size_t count, struct rx_info *ri) // leer paquetes Wifi { struct wif *wi = _wi_in; /* XXX */ int rc; rc = wi_read(wi, buf, count, ri); if (rc == -1) { switch (errno) { case EAGAIN: return 0; } perror("wi_read()"); return -1; } return rc; }
Estas dos funciones anteriores son prácticamente las mismas que usan la suite de aircrack.
Función captura_datos_FC
int captura_datos_FC( int caplen) // captura de datos WiFi, comprobaciones y guardar paquete .cap
{
char elegido[1];
int otromas, estado;
caplen=0;
while( 1 )
{
caplen = read_packet( h80211, sizeof( h80211 ), NULL );
if(caplen <= 0) continue; // si la longitud no es válida. no se capturaron paquetes
dump_packet (h80211,caplen);
printf( "\nPulsa Ctrl+C para cancelar el análisis. Analizar este paquete (s/n) ?" );
otromas=0;
while(otromas==0) otromas = scanf( "%s", elegido );
usleep(300);
if( elegido[0] != 's' && elegido[0] != 'S' ) continue;
printf ("\n\tFrame Control: %02X:%02X\n", h80211[0],h80211[1]); //muestra los 2 bytes de FC
estado=h80211[1] & 0x3; // Valores de FromDS y toDS (0,1,2,3)
switch (estado) {
case 0: // comunicacions adhoc y tramas de control/administración
printf ("\t......FromDS : 0\n");
printf ("\t......toDs : 0\n");
break;
case 1: // paquete con dirección HACIA el sistema de districubión
printf ("\t......FromDs : 0\n");
printf ("\t......toDS : 1\n");
break;
case 2: // paquete enviado DESDE el sistema de distribución
printf ("\t......FromDs : 1\n");
printf ("\t......toDS : 0\n");
break;
case 3: // paquete enviado en WDS
printf ("\t......FromDS : 1\n");
printf ("\t......toDs : 1\n");
break;
}
// Comprobamos el tipo de trama (datos, administración o control)
if ((h80211[0] & 0x0C) == 0x08)
printf ("\t......Trama : de DATOS\n");
if ((h80211[0] & 0x0C) == 0x00)
printf ("\t......Trama : de ADMINISTRACION\n");
if ((h80211[0] & 0x0C) == 0x04)
printf ("\t......Trama : de CONTROL\n");
// Averiguamos si se trata de un paquete con el bit de cifrado activado
if ((h80211[1] & 0x40) == 0x40) {
printf ("\t......Cifrado: SI\n");
}
else
{
printf ("\t......Cifrado : NO\n");
}
}
return( caplen );
}
De esta forma, por ejemplo, los valores de Frame Control estarán en h80211[0] y en h80211[1], la duración en h80211[2] y h80211[3], etc…
Creo que con los comentarios incluidos en el propio código fuente es suficiente para que lo comprendamos a estas alturas, no??
Y por último, la función main que es el inicio del programa:
int main( int argc, char *argv[] ) // inicio del programa
{
int caplen;
//Comprueba el paso de parámetros
if( argc != 2 ) {
printf("\nUso: wifiesnif interface\n\nEjemplo: wifiesnif wlan0\n\n");
exit( 0 );
}
/* Abrir Interface wifi para enviar/recibir tráfico */
opt.iface_out = argv[1];
_wi_out = wi_open(opt.iface_out);
if (!_wi_out)
return 1;
dev.fd_out = wi_fd(_wi_out);
_wi_in = _wi_out;
dev.fd_in = dev.fd_out;
dev.arptype_in = dev.arptype_out;
wi_get_mac(_wi_in, dev.mac_in);
wi_get_mac(_wi_out, dev.mac_out);
/* drop privileges */
setuid( getuid() );
/***************************************/
/* Llamada al esnifer */
/***************************************/
caplen=0;
caplen=captura_datos_FC(caplen);
exit(0);
}
No hay que preocuparse de si sabemos lenguaje C o no, vamos no importa tanto cómo abrir la interface wifi, pero sí es importante que comprendas bien la función captura_datos_FC y cómo se averiguan los estados de toDS, FromDS, wep, etc…
El código completo lo tienes aquí: http://www.megaupload.com/?d=0SMDIKFJ
Guárdalo junto con los otras fuentes de aircrack (así será mas fácil compilarlo) por ejemplo con el nombre wifiesnif.c
gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude -c -o wifiesnif.o wifiesnif.c
gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude wifiesnif.o common.o crypto.o -o wifiesnif -Losdep -losdep -lssl -lcrypto
y ya está, lo lanzamos::
bt src # wifiesnif eth1
Pulsa Ctrl+C para cancelar el análisis. Analizar este paquete (s/n) ?n
08 41 1C 00 00 16 B6 41 03 5D 00 17 9A C3 D6 B9
00 16 B6 41 03 5B 80 88 2A 21 00 00 13 F5 7C F2
C5 E5 15 9D CA 7C B1 17 09 25 84 05 1D 55 92 59
F0 95 43 2B 54 1F A2 41 B1 24 E1 F8 A5 47 7D 58
04 6C A4 AF AB BC 27 C2 D9 31 E2 03 6E 7B CC F1
24 AE D0 0B D9 F1 1A 25 E4 2D EE DC 0B C9 45 48
55 6D 58 55
Pulsa Ctrl+C para cancelar el análisis. Analizar este paquete (s/n) ?s
Frame Control: 08:41
......FromDs : 0
......toDS : 1
......Trama : de DATOS
......Cifrado: SI
D4 00 00 00 00 17 9A C3 D6 B9
Pulsa Ctrl+C para cancelar el análisis. Analizar este paquete (s/n) ?s
Frame Control: D4:00
......FromDS : 0
......toDs : 0
......Trama : de CONTROL
......Cifrado: NO
….
….
Comments (0)
Publicar un comentario