Ncat

De Jose Castillo Aliaga
Revisión del 18:14 5 nov 2012 de Admin (discusión | contribs.) (Página creada con «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/SS...»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

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>

Hello, world!

  </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 leer 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.

Manual oficial