Descubriendo Shares de Red con Linux

Situación (a.k.a.: problema): estás conectado a una red, por ejemplo, la de la Universidad del Mar, con una máquina con Linux, y quieres obtener funcionalidad como la que ofrece la utilidad de Mis Sitios de Red en Windows, por ejemplo:

  • buscar una impresora en la red.
  • saber qué otros hosts están conectados, aparte del tuyo propio.
  • encontrar shares (carpetas compartidas) en la red.
  • copiar los 80 GiB de pr0n que uno de tus compañeros de curso tiene en un share desprotegido (iré yo a saber, pero diría que es Pancho).
  • (sólo si eres muy malo) remotamente reiniciar la desprotegida PC de un compañero que usa Windows.

Solución: usar algunas aplicaciones que ya vienen con la mayoría de las distribuciones de Linux o que son en su defecto fácilmente obtenibles.

Paso 1: Encontrar Máquinas en la Red

A lo largo de estos ejercicios suponemos que eres el usuario usuario de tu máquina llamada maquina, y que al menos formas parte del grupo de usuarios adm (si no lo eres, considera usar sudo).

Para determinar qué otras máquinas están en la red, es necesario saber en qué red estamos nosotros. Fire up una terminal (si eres un informático decente estarás usando rxvt o xterm en vez de Konsole), y escribe lo siguiente (suponiendo que tienes los privilegios adecuados):

| Propiedades de Red
[usuario@maquina ~] ifconfig
eth0      Link encap:Ethernet  HWaddr 00:11:2F:91:24:37  
          inet addr:192.168.20.133  Bcast:192.168.20.255  Mask:255.255.255.0
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1492  Metric:1
          ...

Desde aquí obtenemos tu dirección IP (192.168.20.133) y lo más importante, la dirección red de broadcast (192.168.20.255). Con esta información es posible enviar una petición de reconocimiento (ACK) a toda la red de modo que nos respondan las máquinas que estén encendidas.

Se hace lo siguiente, esta vez con privilegios de administrador:

| Ping en Modo Broadcast
[usuario@maquina ~] ping -b direccion.de.broadcast
56 bytes from 192.168.20.141 icmp_seq=1 ttl=57 time=38.2 ms
56 bytes from 192.168.20.231 icmp_seq=1 ttl=57 time=32.7 ms
56 bytes from 192.168.20.156 icmp_seq=1 ttl=57 time=31.2 ms
56 bytes from 192.168.20.141 icmp_seq=2 ttl=57 time=31.3 ms
56 bytes from 192.168.20.200 icmp_seq=1 ttl=57 time=30.8 ms
...

Podemos presionar CTRL+C cuando nos hartemos de ve direcciones IP. Hemos de anotar las direcciones diferentes que nos responden pues son éstas las direcciones IP de las máquinas que están conectadas a la red. Si no tienes idea de lo que estoy hablando debieras tomar un curso de Redes I o mirar este documento: cidr-segmentacion-redes.

No todas las máquinas presentes responderán a una petición ICMP broadcast. En particular máquinas con firewall restrictivos optarán por quedar en silencio previniendo que se trate de un ataque maligno.

Con esto, ya tenemos las direcciones de algunas máquinas conectadas a nuestra misma red. ¿Qué podemos hacer con esto?

Paso 2: Averiguar Quiénes corren las Máquinas

Paquetes necesarios: xprobe, nbtscan.

Ya sabemos qué IPS están disponibles, pero, ¿quiénes son?

Por medio de sencillas herramientas disponibles en casi toda distribución Linux es posible averiguar mucho de las máquinas presentes en la red. Lo primero que haremos será escoger una dirección IP del listado obtenido anteriormente, digamos 192.168.20.141, y le pediremos a algunas herramientas de Linux que analicen esta máquina:

Lo primero es instalar xprobe, una aplicación de red que realiza un escaneo de puertos y respuestas TCP/UDP con el fin de determinar el sistema operativo y servicios que corre una máquina. Si tienes un gestor de paquetes como apt o smart, simplemente le pides que instale el programa con un comando como el siguiente:

sudo apt-get install xprobe

Algunas dependencias a considerar: libpcap, libpcap-devel, gtk2-devel.

Una vez instalado el programa, es tan sencillo como ejecutar y pedir que analice una IP en particular:

TODO: por completar

A continuación podemos preguntar directamente a la IP para que se identifique, si esta IP tiene habilitado NetBIOS, podemos utilizar la utilidad nbtscan para obtener su “nombre de red”. Pidamos esta utilidad a nuestro Gestor de Paquetes:

sudo atp-get install nbtscan

Y utilizamos la utilidad del siguiente modo:

Nota de interés, NetBIOS no funciona sobre todos los protocolos de TCP—over—Transport, como por ejemplo conexiones Wireless. Por tanto a veces no es posible utilizar este método.

Paso 3: Descubriendo Shares e Impresoras de Red

Si la máquina en cuestión es un Microsoft™ Windows ™ compartiendo carpetas, es posible determinar rápida y fácilmente cuáles son las carpetas compartidas y cuáles sus privilegios de acceso provisto que tengamos las utilidades adecuadas de Samba. Lo que buscamos es smbclient, el paquete de conexión y búsqueda de Samba.

Vamos a nuestra terminal y en caso de no tener instalado smbclient, ejecutamos el gestor de paquetes para obtenerlo:

sudo apt-get install smbclient

Ya con el programa es tan fácil como pedirle al programa que nos liste (opción -L) los identificadores, shares y servicios disponibles:

[usuario@maquina ~] smbclient -L 192.168.20.141

Desde aquí obtenemos algo de información:

TODO: por completar

Paso 4: Tratando de Abrir un Share

Paquetes necesarios: smbclient.

Paso 5: Enviando Mensajes a «winpopup»

Paquetes necesarios: kpopup, smbclient, tcp-utils entre otros.

Paso 6: Más cosas que se pueden hacer