Diferencia entre revisiones de «Ncat»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Línea 163: Línea 163:
Esto se puede solucionar poniendo --broker y todos pueden escuchar lo de todos. Para facilitar aun más, ncat tiene la opción --chat en la que se puede ver el usuario que hace cada comentario.
Esto se puede solucionar poniendo --broker y todos pueden escuchar lo de todos. Para facilitar aun más, ncat tiene la opción --chat en la que se puede ver el usuario que hace cada comentario.


== Emular servicios ==


'''Servicio de eco'''
$ ncat -l 7 --keep-open --exec "/bin/cat"
''Servicio de fecha'''
$ ncat -l 13 --keep-open --send-only --exec "/bin/date"


[http://nmap.org/ncat/guide/index.html Manual oficial]
[http://nmap.org/ncat/guide/index.html Manual oficial]

Revisión del 19:56 5 nov 2012

Se trata de una herramienta de propósito general para leer, escribir, redirigir o cifrar datos a través de una red. Puede:

  • Actuar como un simple cliente TCP/UPD/SCTP/SSL para interactuar con servidores de todo tipo a través de una red. Sirve para detectar problemas o analizar profundamente su funcionamiento. Permite ver el resultado sin filtros y tal cual es enviado.
  • Actuar como un simple servidor en la red TCP/IP. Sirve para entender las peticiones que pueden hacer los clientes.
  • Redirigir o hacer de proxy entre puertos. Puede ser una simple redirección a algún destino prefijado o actuar como un proxy SOCKS o HTTP donde el cliente especifica su destino.
  • Encriptar mediante SSL.
  • Actuar como puerta de enlace de comandos del sistema. Algo similar al cat, pero para la red.
  • Actuar como "connection broker" y actuar como un simple chat.

Uso básico

Ncat puede operar en modo connect o listen.

  • En modo connect, ncat inicia una conexión o envia datos UTP a un servicio que está escuchando.
  • En modo listen, espera a una conexión.

Para usarlo en modo connect se hace:

$ ncat <host> [<puerto>]

El modo listen es igual, pero con -l

$ ncat -l [<host>] [<puerto>]

En modo listen, <host> indica la IP de la que escucha, es opcional. Su puerto por defecto, si no se especifica es el 31337. Normalmente, los usuarios no pueden abrir un puerto por debajo del 1024. Un puerto TCP normalmente acepta sólo una conexión y termina cuando el cliente desconecta. Si se da la opción --keep-open (-k), ncat acepta múltiples conexiones. Cuando envía algo, lo envía por igual a todos los clientes. Por defecto, ncat actúa con IPv4 y TCP a menos que se especifique -u para udp o -6 para IPv6.

Ejemplo de modo Connect

$ ncat -C scanme.nmap.org 80
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 05 Feb 2009 15:31:40 GMT
Server: Apache/2.2.2 (Fedora)
Last-Modified: Mon, 19 May 2008 04:49:49 GMT
ETag: "fc8c91-2e3-44d8e17edd540"
....

Hemos hecho la conexión y luego el GET / HTTP/1.0 para que nos devuelva algo. El -C es para que interprete el fin de línea como CRLF

La respuesta comienza con HTTP/1.1 200 OK, el protocolo, versión, código 200 y OK que significa que todo ha ido bien. A continuación, la cabecera HTTP y el HTML de la web.

Ejemplo de modo Listen

Vamos a simular un servidor HTTP. Creamos un fichero hello.httpd con este contenido:

HTTP/1.0 200 OK <html> <body> <h1>Hello, world!</h1> </body> </html> Ahora ejecutamos el comando:

$ ncat -l localhost 8080 < hello.http

Tan pronto como reciba una petición, ncat volcará el contenido del fichero hello.http. Se puede probar con un navegador web. El navegador puede que espere a que se cierre la conexión.


ncat y SSL

Se pueden enviar los datos encriptados mediante la opción --ssl. Por ejemplo, para conectarse a un servidor HTTPS:

ncat -C --ssl <servidor> 443

También puede ser servidor con ssl

$ ncat -v -l --ssl

El -v sirve para ver más detalles de la conexión, como la clave que se va a usar. Com --ssl-cert y --ssl-key se puede usar una clave existente o verificada.

Ejecución de comandos

Ncat puede ejecutar comandos después de establecer la conexión. La entrada y salida estándar se redirigen a la conexión. Cualquier cosa recibida por la conexión se considerará como el stdin y cualquier cosa que salga por stdout se irá a parar a la conexión. Para ello se puede usar la opción -e o --exec.

$ ncat -l --exec "/bin/echo Hello"

Es necesario poner la ruta absoluta del comando, ya que --exec no lo busca en el PATH. Con --sh-exec sí busca en el PATH. Por ejemplo, para que muestre el directorio donde se ha ejecutado:

$ ncat -l --sh-exec 'pwd'

La opción -e se puede usar en modo connect y en modo listen.

Ejemplo. Crear el siguiente script:

#!/bin/bash
echo "Hola, dime tu nombre"
read nombre
echo "Hola: $nombre"

Ejecutar:

$ ncat -l --sh-exec './hola.sh'

En otra terminal:

$ ncat localhost 31337

Opciones de salida

Ncat lee de la entrada estándar y escribe en la estándar, menos cuando tiene la opción --exec que lo hace del comando o script que se ejecuta. Con -v se pueden ver detalles de la conexión, porque por defecto, ncat no muestra nada por la salida excepto errores.

Podemos volcar toda la comunicación con la opción -o a un fichero. La opción --hex-dump o -x lo guarda en hexadecimal, por si resulta más útil.


Control de acceso

Se puede establecer unas reglas de control de acceso para permitir o denegar el acceso a unas determinadas direcciones. Con --allow se permite a unas en concreto y se deniega a todas las demás. Con --deny se deniega a una y se permite a todas las demás. Se pueden poner direcciones de red o, incluso u fichero con una lista de hosts permitidos o denegados con --allowfile o --denyfile.

ncat -l --allow 192.168.0.125
ncat -l --allow 2001:db8::7d
ncat -l --allow trusted.example.com
ncat -l --allow 192.168.0.0/24
ncat -l --allow 192.168.0.0-255
ncat -l --allow 2001:db8::/32
ncat -l --allowfile trusted-hosts.txt
ncat -l --denyfile external-hosts.txt

Se puede establecer un límite de conexiones. El límite por defecto son 100, pero con --max-conns se puede modificar.


Haciendo de proxy

Ncat puede redireccionar sus conexiones como un proxy con --proxy

Transferencia de archivos

Aunque existen otros protocolos más adecuados como FTP, SSH, HTTP... para la transferencia de archivos, es posible que se pueda necesitar transmitir un archivo en "crudo" (raw) por una tubería de la red. Ncat puede proporcionar mucha flexibilidad.

   host2$ ncat -l > outputfile
   host1$ ncat --send-only host2 < inputfile
   host1$ ncat -l --send-only < inputfile
   host2$ ncat host1 > outputfile

El --send-only se pone para que cierre la conexión una vez ha terminado de transmitir.

Una elegante manera de transmitir varios ficheros comprimidos:

host2$ ncat -l | tar xzv
host1$ tar czv <ficheros> | ncat --send-only host2

Se puede crear un intermediario con --broker para, por ejemplo, evitar problemas con el NAT .

   host3$ ncat -l --broker
   host2$ ncat host3 > outputfile
   host1$ ncat --send-only host3 < inputfile

Un Chat básico

La manera más simple de crear un chat con ncat:

host1$ ncat -l
host2$ ncat host1

Si queremos tener más clientes podemos poner --keep-open en el que hace de servidor. El problema es que el host 3 no verá los mensajes del host2

host1$ ncat -l --keep-open
host2$ ncat host1
host3$ ncat host1

Esto se puede solucionar poniendo --broker y todos pueden escuchar lo de todos. Para facilitar aun más, ncat tiene la opción --chat en la que se puede ver el usuario que hace cada comentario.

Emular servicios

Servicio de eco

$ ncat -l 7 --keep-open --exec "/bin/cat"

Servicio de fecha'

$ ncat -l 13 --keep-open --send-only --exec "/bin/date"

Manual oficial