Algunas de las cosas que vamos a poder hacer con Netcat son: escanear puertos, transferir archivos, caputrar banners, redireccionar puertos y abrir puertas traseras.
Como nos permite hacer tantas cosas, esta herramienta debe estar presente en cada equipo destinada a realizar penetration tests, análisis de vulnerabilidades, ethical hacking y cualquier otro tipo de actividad divertida. 😉
Instalación
Este software ya viene pre-empaquetado en TODAS las distribuciones Linux y BSD. Para el caso de Windows, podemos utilizar el siguiente link:
http://www.portantier.com/downloads/netcat_nt_1.10.zip
En el cual vamos a encontrar tanto el ejecutable como los archivos de código fuente.
NOTA: Si tenemos instalada la herramienta nmap en su versión 4.85BETA1 o posterior, ésta ya viene con netcat incluído.
Pueden descargar nmap con netcat incluído desde:
http://nmap.org/download.html
Modos de ejecución
Podemos utilizar dos modalidades diferentes, cliente y servidor. Obviamente, con el modo cliente nos conectamos y con el modo servidor esperamos conexiones.
cliente: nc [-options] hostname port[s] [ports]
servidor: nc –l –p port [options] [hostname] [port]
Es una herramienta de línea de comandos, y no posee interfaz gráfica.
Escaneo de puertos
Si bien existen muchas herramientas especializadas para escanear puertos (y recomiendo su uso, sobre todo de nmap), es bueno saber que con netcat también podemos hacerlo.
Las opciones que nos interesan para el escaneo de puertos son las siguientes:
–i segs Intervalo en segundos entre cada puerto escaneado
–r Aleatorización de los puertos de origen y destino
–u Puertos UDP (por defecto utiliza puertos TCP)
–v Modo explicativo (si utilizamos -vv será aún más explicativo)
–z No realiza una conexión completa (interesante para los escaneos)
Así que, para escanear los puertos TCP 50, 100 y 105 de www.escaneame.com, podemos hacer lo siguiente:
fabian@debian:~$ nc -vv -i1 -r -z www.escaneame.com 25, 53, 80, 110
www.escaneame.com [ip.ip.ip.ip] 80 (www) open
www.escaneame.com [ip.ip.ip.ip] 53 (domain) : Connection refused
www.escaneame.com [ip.ip.ip.ip] 110 (pop3) : Connection refused
www.escaneame.com [ip.ip.ip.ip] 25 (smtp) : Connection refused
Como podemos observar, de los puertos que probamos, sólo el 80 (HTTP) está abierto.
También podemos utilizar rangos de puertos, por ejemplo, para escanear los puertos desde el 1 hasta el 3000:
nc -vv -i1 -r -z www.escaneame.com 1-3000
Banner Grabbing
Esta es una técnica de enumeración, que consiste en capturar los banners que muestran las aplicaciones al conectarnos a ellas. Podremos obtener información como el tipo de software, la versión y el sistema operativo. Esto se torna de vital importancia cuando estamos buscando vulnerabilidades en un sistema.
Por ejemplo, para capturar el banner del puerto 25 de smtp.gmail.com podemos hacer lo siguiente:
Podemos hacer lo mismo con HTTP (puerto 80). Una vez conectados, enviamos un requerimiento, para anlizar la respuesta.
En este caso, el requerimiento a enviar será “HEAD / HTTP/1.0”, que solicita los encabezados del servidor. (NOTA: Tenemos que presionar dos veces la teclar ‘ENTER’ después de haber escrito el requerimiento para que el servidor lo procese).
Borré los datos del servidor para no comprometer a nadie, pero ustedes podrían obtener algo así:
fabian@debian:~$ nc -v servidorweb.com 80
servidorweb.com [ip.ip.ip.ip] 80 (www) open
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 28 Apr 2011 05:33:50 GMT
Server: Apache/2.0.59 (CentOS)
X-Powered-By: PHP/5.1.6
Content-Type: text/html; charset=iso-8859-1
Connection: close
Si analizamos la respuesta, veremos que el servidor utilizado es Apache 2.0.59, corriendo sobre un sistema operativo CentOS.
También podemos hacerlo con los servidores SMTP, con:
fabian@debian:~$ nc -vv smtp.gmail.com 25
Obtendremos una respuesta similar a la siguiente:
220 mx.google.com ESMTP g69sm740211yhc.88
Lo cual significa “Service Ready”, según la RFC-821 (http://www.ietf.org/rfc/rfc0821.txt). Básicamente nos está diciendo que el servicio SMTP está listo para recibir órdenes.
Conociendo un poco más acerca de los servidores SMTP
Cada vez que nos conectamos a un servidor SMTP, podemos solicitarle información acerca de los comandos que soporta, pasando el requerimiento “EHLO”, de la siguiente manera:
fabian@debian:~$ nc -vv smtp.gmail.com 25
gmail-smtp-msa.l.google.com [74.125.45.109] 25 (smtp) open
220 mx.google.com ESMTP s21sm751894yhn.93
EHLO
250-mx.google.com at your service, [ip.ip.ip.ip]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
De esta forma podemos obtener información acerca del servidor SMTP al cuál nos estamos conectando. Este tipo de peticiones se utiliza por varios clientes de correo para saber qué tipo de comandos soporta el servidor, qué métodos de autenticación, etc.
Probando servidores de mail ‘Open Relay’
Los servidores de mail open relay son aquellos que permiten enviar un mail desde cualquier origen a cualquier destino, por lo que son excelentes candidatos a ser utilizados por los Spammers. Es importante aclarar que estos servidores están MAL configurados, y nosotros podemos hacer la prueba que explico más abajo para detectar malas configuraciones y corregirlas.
Por ejemplo, vamos a conectarnos al puerto smtp (TCP 25) de mail.algo.com, así: nc -vv mail.algo.com 25
220 <hostname> ESMTP Sendmail 8.14.2/8.14.2; Sun, 24 Feb 2008 11:16:40 -0500
MAIL FROM:gbush@whitehouse.gov
250 2.1.0gbush@whitehouse.gov… Sender ok
RCPT TO: bill.gates@microsoft.com
250 2.1.5 bill.gates@microsoft.com… Sender ok
Con “MAIL FROM:” estamos definiendo el mail de origen, y con “RCTP TO:” estamos definiendo el destinatario. En este caso, el servidor no tiene relación con los dominios ‘whitehouse.gov’ ni con ‘microsoft.com’. Igualmente, nos ha contestado con “OK” y nos permitiría enviar el correo. Esta es una configuración errónea que suele estar corregida en la gran mayoría de las configuraciones por defecto de los software de correo, pero aún podemos encontrar alguno que otro por la red.
Para conocer mejor cómo interactuar con cada uno de los servicios estándar de internet, les sugiero investigar las RFC correspondientes a cada estándar. No es necesario que lean toooda la RFC, generalmente los comandos aceptados se encuentran en resumenes, por wikipedia u otras fuentes.
Esto es todo por ahora. En la segunda parte del artículo veremos algunas posibilidades extra que nos ofrece esta genial herramienta.
¡Saludos!