viernes, 3 de diciembre de 2010

Hablando por ICMP

Hoy presento un script que usa Scapy para comunicarse a través de paquetes ICMP (ping request concretamente). La idea original, de Mungu, era hacer una shell que se comunicara a través de ICMP, esto es simplemente una prueba de concepto.

Cliente: http://pastebin.com/0vLsiiBQ

Servidor: http://pastebin.com/Y751Ty0x

Lo que hace es dividir el mensaje en partes de 2 bytes, y envía cada par como identificador de cada ping.

Los mensajes siempre se envían del cliente al servidor, y los dos necesitan permisos de root.
Los parámetros del servidor son:

[-f <dump file>] [-d | -s] [-1] | -h
-f : Guarda los datos en un archivo
-d : Muestra información de debugging
-s : No muestra ninguna salida por pantalla
-1 : Solo muestra un mensaje (y después se cierra)
-h : Muestra esto


Los del cliente son:

-s <ip de origen> -d <ip de destino> [-t <nº de hilos>] [-p <paquetes/hilo>] [-b <datos a enviar>] [-r <nº de repeticiones de los datos>] [ -f <archivo a enviar>] [ -u ]
Con -u : los datos enviados (no los identificadores) son aleatorios

o

-h : muestra esto


Si no se especifica al cliente el archivo a enviar, se introducirá por teclado (saldrá '>>>' como prompt).
Con -f y -1 se pueden enviar "facilmente" archivos completos.
Los comandos para hacer la transferencia


Envío en curso

Envío completado

Al menos en local (solo he podido probarlo en localhost), la información llega intacta... aun así, por seguridad añadí un pequeño retardo entre los mensajes ( 0.01s ) para evitar en lo posible que haya problemas.
MD5 Correcto

Hasta otra

4 comentarios:

  1. Lo he estado probando con Mari remotamente pero creo que no funciona por que mi router dropea los pings ahora mismo.
    El caso es que esto podria servir perfectamente para que dependiendo del contenido de un ping tu equipo realice una tarea determinada.

    implementar eso para android o para otros dispositivos podria ser interesante de forma que fuesen un par de comandos personalizados y una ip o dominio al que enviar esos pings-ordenes.

    En fin, la idea es cojonuda aunque por el momento solo la he visto funcionar en local.

    ResponderEliminar
  2. si, la verdad estaría interesante usarlo como control remoto :D.

    El problema es que se necesitan permisos de root para lanzar los ping, habría que ver si android da acceso a esto, sino sería necesario jailbrakearlo

    gracias por confirmar que funciona

    ResponderEliminar