elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Tutorial]Creación de un sniffer (Pasos avanzados) #2
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial]Creación de un sniffer (Pasos avanzados) #2  (Leído 9,967 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
[Tutorial]Creación de un sniffer (Pasos avanzados) #2
« en: 9 Enero 2010, 19:06 pm »

PROGRAMACIÓN DE RED EN JAVA #2
Lectura y envio de paquetes, filtros, manipulación de paquetes....


Hola a tod@s y bienvenid@s una vez mas a esta entrega, sobre el desarrollo de nuestro propio sniffer.

Como prometí en mi anterior host, en esta ocasión vamos a tratar los siguientes temas:

  • Envio y lectura de paquetes completo (en este casi solo he puesto code).
  • Escritura de los paquetes leidos en un fichero, asi como lectura de los paquetes:
              Ejemplo práctico de leer paquetes, guardarlos en un archivo y re-enviarlos.
  • Filtros de lectura de paquetes, para nuestro programa y tambien para wireshark y otros.

Bueno, para refrescar un poco la memoria...
En la parte anterior a esta, comentabamos y aprendimos a saber que interfaces de red teniamos conectadas,estructurar y visualizar su información, como la direción mac, la ip, nombre de la interfaz de red...

Esta vez vamos a ir un poco mas lejos, vamos a recibir y escribir paquetes.

Bien empezamos, por algo que ya enseñé en el post anterior, leer paquetes de red, aqui el codigo:
Código
  1. JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
  2.  
  3. for(int i=0;i<10;i++){
  4.  //Capturar un paquete simple y muestrearlo
  5.  System.out.println(captor.getPacket());
  6. }
  7.  
  8. captor.close();
Esta vez si que voy a explicar mas a fondo la clase JpcapCaptor, primero de todo decir, que es la clase que se encarga tramitar entre los paquetes de red y las interfaces, etsamos con esta clase, configurando la interface, el puerto, el modo, y el timeout de lectura:
Código
  1. Jpcap.openDevice(indice interfaz, puerto, modo promiscuo, timeout de lectura);
Ahora que esta explicada, vamos a a profundizar el codigo completo:

  • Primero de todo tenemos la declaración/encapsulación del objeto PcapCaptor, con el que ponemos a la escucha de paquetes a una interface. Para ello hemos indicado al programa con argumentos que, lo haga con la interfaz que esta en el indice index(int), sobre el puerto 65535, modo promiscuo desactivado y con un timeout de lectura de 20 ms.
  • En segundo lugar hemos creado un bucle lógico-condicional con el que leemos durante 10 loops con un timeout de 20 ms, por tanto leemos un maximo de 10 paquetes, si alguno se retrasa mas de 20 ms no lo leerá.
  • Y por ultimo cerramos la interfaz y la quitamos de la escucha de paquetes.

Bien ahora sabemos leer paquetes, ahora vamos a ser mas especificos, con la el tipo de captura, vamos a filtrar los paquetes, para ello vamos a usar el metodo setFilter() de PcapCaptor, veamos como:

Código
  1. JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
  2. //Exclusivizamos la captura de paquetes para IPv4/TCP
  3. captor.setFilter("ip and tcp", true);
  4.  

Bien veamos, hemos dicho al captor de paquetes que solo coja los de tcp y ip (IPv4).
Esto es sencillo, pero saber todo esto de poco nos vale si tan solo capturamos paquetes, vamos a capturarlos y a guardarlos en un archivo de texto plano, para ello haremos uso de JpcapWriter:

Código
  1. JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
  2. //OPertura de archivo
  3. JpcapWriter writer=JpcapWriter.openDumpFile(captor,"yourfilename");
  4.  

JpcapWriter nos proporciona un metodo para escribir archivos con el contenido del capturador, este metodo es openDumpFile, en el primer argumento le indicamos que obejto JpacpCaptor recive para escribir y en el segundo, indicamos con una string que archivo vamos a escribir.
No creo que haya complicaciones, quizas alguna FileNotFoundException, pero no mas.

Ahora toca escribirlos con un bucle lógico, combinando lo anterior con la escritura:

Código
  1. JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
  2. //Opertura de archivo
  3. JpcapWriter writer=JpcapWriter.openDumpFile(captor,"yourfilename");
  4.  
  5. for(int i=0;i<10;i++){
  6.  //Captura un paquete sencillo
  7.  Packet packet=captor.getPacket();
  8.  //Guardar en el archivo abierto
  9.  writer.writePacket(packet);
  10. }
  11. writer.close();
  12.  
Con esto abriremos, leeremos y escribiremos paquetes en un archivo en concreto.
Bien ahora que hemos leido paquetes, los hemos dumpeado a un fichero, vamos a leerlos y a maquinar con ellos:

Código
  1. //Abre el archivo donde teniamos los apquetes leidos
  2. JpcapCaptor captor=JpcapCaptor.openFile("yourfilename");
  3.  
  4. while(true){
  5.  //Lee el archivo abierto
  6.  Packet packet=captor.getPacket();
  7.  //Si ocurre algo malo, algun erro u algo , rompemos el bucle
  8.  if(packet==null || packet==Packet.EOF) break;
  9.  //Printeamos el paquete leido
  10.  System.out.println(packet);
  11. }
  12.  
  13. captor.close();
  14.  

El ejemplo es claro, pero quiero que ahora penseis, si recivimos paquetes, por ejemplo estando en un mitm, los leemos, y modificamos de manera automatizada con algun bucle, y desciframos información de estos, estamos ante una herramienta muy potente, y creada por nosotros, totalmente personalizable.

Bien ya dominamos la lectura y modificación de paquetes (si hombre, aunque no lo haya explicado sabeis que se puede modificar, por bytes, por String, por chars...), ahora toca el envio de paquetes, jeje....

Código
  1. //Abre la interface para envio
  2. JpcapSender sender=JpcapSender.openDevice(devices[index]);
  3.  
  4. //Crea un paquete TCP personalizado con puertos y mierdas de esas xD como veis hay muchas opciones
  5. TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10);
  6.  
  7. //Parametros de IPv4
  8. p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP,
  9.  InetAddress.getByName("www.elhacker.net"),InetAddress.getByName("www.google.com"));
  10.  
  11. //El campo data del paquete
  12. p.data=("data").getBytes();
  13.  
  14. //Crea un paquete tipo Ethernet para el envio
  15. EthernetPacket ether=new EthernetPacket();
  16. //Pone la frame como tipo IP
  17. ether.frametype=EthernetPacket.ETHERTYPE_IP;
  18. //Pone las mac de envio y recpcion
  19. ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5};
  20. ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10};
  21.  
  22. //Envia el datalink al paquete para enviarlo
  23. p.datalink=ether;
  24.  
  25. //Envia el paquete
  26. sender.sendPacket(p);
  27.  
  28. sender.close();
  29.  

Bien, para esto tendriais que ler algo sobre paquetes de red, wifi netowrks y esas cosas, en la secion de seguridad wireless hay mucho relacionado, pero comentar algo, para que veais que esto tiene un uso.
Bien si empezamos a leer paquetes, y reenviamos esos paquetes, podemos provocar reaciones extrañas, si hacemos esto de manera masvia cosas malevolas(que no debeis hacer sin permiso del que se compromete, porque ni yo ni elhacker.net se hacen responsables). Investigad, probad y no murais en el intento.

En el proximo tutorial hablaremos sobre el diseño final de un sniffer, y probablemente ya tenga el source para postearlo.

Un saludo a tod@s y espeor que os guste.



En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #1 en: 9 Enero 2010, 22:16 pm »

ME GUSTO aaaaa me volvi loca XDD(un decir)
quiero agregarlo de inmediato en el troyano  >:D
 :rolleyes: :rolleyes: :rolleyes: :rolleyes:
AAAA  :rolleyes: :rolleyes: :rolleyes:
Gracias men por el tuto


En línea

Blitzkrieg'


Desconectado Desconectado

Mensajes: 546


print('Hi there')


Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #2 en: 9 Enero 2010, 22:45 pm »

Esta muy bueno

[offtopic]

I love bunnies

[/offtopic]
« Última modificación: 9 Enero 2010, 23:13 pm por ddk » En línea



protos

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #3 en: 10 Enero 2010, 15:48 pm »

Muchas Gracias. Muy útil

Porqué me devuelve un array vacío el getDeviceList() ?

NetworkInterface[] devices = JpcapCaptor.getDeviceList();
devices.length => 0

salu2!
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #4 en: 10 Enero 2010, 20:02 pm »

Muchas Gracias. Muy útil

Porqué me devuelve un array vacío el getDeviceList() ?

NetworkInterface[] devices = JpcapCaptor.getDeviceList();
devices.length => 0

salu2!
Si hubieses leido el primer tuto sabrias que hay que ejecutar el programa con permisos root... entonces tendrás todas las interfaces, esto ocurre porque java requiere de mucha seguridad de ejecución para ejecutarse completamente con cosas como dispositivos de red (nuestro caso).

Saludos
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #5 en: 10 Enero 2010, 22:11 pm »

Eso implica en Win7 ejecutar como administrador mmm... no me gusto esa idea bueno será.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #6 en: 11 Enero 2010, 18:12 pm »

Eso implica en Win7 ejecutar como administrador mmm... no me gusto esa idea bueno será.
Pretendias usar interfaces de red, modificar paquetes de red, leerlos con una cuenta guest por ejemplo?

Saludos
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #7 en: 12 Enero 2010, 00:15 am »

No, solo analizaba la posibilidad de conseguir poder de admin en win7 nada mas un pensamiento
En línea

yasznc

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [Tutorial]Creación de un sniffer (Pasos avanzados) #2
« Respuesta #8 en: 22 Mayo 2013, 18:18 pm »

Hola!!
muy buena tu aportación.

Me gustaría preguntarte una duda. ¿Qué valores de max_bytes y tiempo de espera son los óptimos en la instrucción:

JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);

?

Quiero poderlos ver tan pronto como lleguen, pero en ocasiones tarda más y existen pérdida de paquetes.

Gracias de antemano.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines