lunes, octubre 24, 2011

GetMSNIPs: Obtener dirección IP de contactos Messenger

El mes pasado, nuestro compañero del SOCtano Thor publicó una herramienta destinada a obtener la dirección IP de los contactos que uno tiene añadidos al Messenger sin necesidad de enviar o recibir un fichero, tal y como se dice en muchos foros. La idea es hacer uso de la negociación de las condiciones de red, tales como direcciones IP, arquitectura de conexión (NAT, UPnP, etc..) que se utilizan en la negociación del protocolo P2P que usa MSN.

Si se analizan todas las conversaciones que se producen, se verá que no es necesario iniciar la transferencia de ficheros, ya que, por ejemplo, el envío de avatares, imágenes e incluso las conversaciones en algunos entornos, funcionan con conexiones directas entre los contactos.

Explicación manual de la idea

Así, manualmente, uno puede monitorizar el proceso de comunicación que utiliza Messenger, que se llama wlcomm.exe y ver con quién establece las comunicaciones. Así, en un rápido ejemplo, primero se localiza el ID del proceso en nuestro sistema (con el administrador de tareas) y luego miramos qué conexiones de red están activas con él. En este caso, se hace nada más inicar una sesión Messenger, con lo que solo estará la conexión con los servidores Microsoft.

Para ello se hace uso del comando tasklist | find "wlcomm.exe", que permite encontrar el PID del proceso y luego se filtra con él la salida de netstat para ver solo las conexiones que realiza dicho proceso (requiere permisos de administrador): netstat -nabo | find "PID_ENCONTRADO".

Figura 1: Análisis de conexiones de wlcomm al inicio

Ahora, si se hace uso del truco de enviar un emoticono personalizado a un contacto, se estará forzando el  envío de un fichero por debajo, lo que lanzará que el sistema negocie la conexión P2P entre ambos clientes, permitiendo descubrir la dirección IP del contacto. Para ser menos sospechoso, un emoticono con un gif transparente y listo. Si repetimos el proceso aparece la IP del contacto.

Figura 2: Análisis de conexiones en una conversación

Análisis con Wireshark

Sí el tráfico generado en la conversación se graba con Wireshark y se analiza con el filtro que ofrece esta herramienta para el protocolo de Messenger, que se llama msnms, se pueden ver los paquetes generados en la transferencia del avatar.

Figura 3: Paquetes filtrados con msnms en Wireshark

Viendo el contenido de ellos, es posible descubrir las direcciones IP de la conexión y el nombre del contacto que se encuentra en el extremo de la conexión, ya que se aparece en el campo FROM.

Figura 4: Direcciones IP de la conversación en el paquete de red

Lo curioso es que en ese paquete también aparece la dirección interna del cliente de Messenger. ¿Por qué? Pues porque si dos contactos comparten la misma dirección externa y están en el mismo segmento de red, la negociación P2P se intenta hacer directamente por la LAN, sin pasar por Internet, lo que alguna vez generaba errores de conexión en situaciones en las que había conversaciones múltiples con contactos locales y remotos.

Con toda esta información es posible hacer un filtro en Wireshark para descubrir los contactos y sus direcciones internas y externas en un momento dado de la conexión, y es esa info la que ha automatizado nuestro amigo Thor en la herramienta GetMSNIPs.

Descubrir las direcciones IP de todos tus contactos conectados con GetMSNIPs

El funcionamiento es sencillo, pero requiere la instalación previa de WinPcap.

Una vez instalado, se arranca GetMSNIPs para luego iniciar una conversación con Messenger.

Entonces se debe poner un nuevo avatar, distinto, que no haya sido utilizado antes.

Después, esperar o forzar el inicio de una conversación con algún contacto que interese. El resto se irá viendo por pantalla.

Figura 5: Salida por pantalla de GetMSNIPs

Puedes descargar la herramienta  y el código fuente directamente desde el siguiente enlace: GetMSNIPs

Saludos Malignos!

16 comentarios:

  1. Enhorabuena a Thor por la herramienta, enorme :)

    ResponderEliminar
  2. Muy interesante el programita pero dices que no hace falta enviar ningún archivo y realmente si que hace falta ya que al cambiar el avatar se esta enviando un archivo.

    En fin, el caso es que es interesante y más aún ver como se hace paso a paso.

    ResponderEliminar
  3. Gracias Guasch!

    @fossie Se refería a que no es necesario utilizar la funcionalidad de MSN de enviar un fichero pero en el fondo, vía p2p, se esta enviando, claro ;)

    ResponderEliminar
  4. Esa es buena Oca!! jeje otra cosa curiosa es saber si los usuarios conectados en modo invisible o no conectados, están realmente conectados, pues hay un momento que msn negocia la conexión y los delata!

    PD: recuperado de las agujetas xD

    ResponderEliminar
  5. Ese German! Si, recuerdo que había programas de MSN, ¿Mercury MSN? que te mostraban cuando un contacto te abría una ventana de conversación lo que dices sera parecido. Igual no es muy dificil meterle esto como un plugin de MSN Plus.

    Saludos!

    ResponderEliminar
  6. Buena observación Germán, es lo que estaba pensando mientras estaba leyendo el post ;)

    Thor lo del plugin para msn es una buena idea pero yo dejaría las cosas como están ahora, imaginaros el típico contacto "chica pesada" que te tenga controlado por tener este plugin en su msn :P

    Pienso que hay cosas que solo son para las personas del mundillo y otras cosas que son para las personas el mundo real.

    Una herramienta preciosa, practica y muy útil ;)

    ResponderEliminar
  7. Una pregunta de pardillo, si el destinatario esta detras de un dispositivo que natea, sin soporte uPNP o desactivado ni puertos redirigidos ni nada por el estilo, como se hace la entrega del "fichero"? Yo pensaba que en esos casos se usaria el server de ms como intermediario con lo que al no ser una conversacion entre pares el metodo que se expone en el articulo no valdria no? o el protocolo p2p de msn usa algun tipo de nat transversal / hole punching??

    ResponderEliminar
  8. @olopeich es exactamente como dices, no estoy del todo seguro pero creo que se utiliza uPNP en los casos en los que se puede y sino se envía a través del servidor de Microsoft como un mensaje mas. De hecho las versiones antiguas y la mayoría de programas alternativos para conectarse al Messenger no implementan el protocolo P2P de MSN Messegner y lo envían a través de MS.

    Para nada pregunta de pardillo, pregunta de curioso ;)
    Un saludo!

    ResponderEliminar
  9. Gracias por la aclaracion Thor, me extrañaba q el protocolo p2p del messenger implementara "guarradas" para llegar al cliente detras de un dispositivo nat.

    Lo que tengo curiosidad es por saber si actualmente hay mucha gente que tenga activado uPnP; yo siempre lo quito, mas por precaucion / ituicion q otra cosa, no estoy al dia sobre fallos de uPnP y hace años que deje de trabajar deambulando por empresas revisando configuraciones.

    ResponderEliminar
  10. yo lo que hacia era ver como saltaban conexiones despues de enviar un archivo con el tcpview, pero buena idea la del gif.

    ResponderEliminar
  11. yo lo que hacia era ver como saltaban conexiones nuevas despues de enviar un archivo con el tcpview, pero buena idea la del gif.

    ResponderEliminar
  12. buenas, quiero ver el codigo fuente pero Multiupload parece que no funciona mas. ¿podrias subirlo a otro servidor?

    ResponderEliminar
  13. Hola, aca encontre otro enlace para descargar GetMSNIPs:
    http://www.informatica64.com/descargas/GetMSNIPs.zip

    nos vemos

    ResponderEliminar
  14. Buenas, tengo un macbook air de 2011 y estoy intentnado usar wireshark. Sin embargo cuando me pongo a analizar los paquetes solo aparecen los de mi portatil, y no aparecen los de los demas dispositivos. ¿Por que sera?

    ResponderEliminar
  15. Link caido, donde encuentro el archivo ahora?

    ResponderEliminar