nc netcat

NC – NetCat

En el capítulo de hoy vamos a ver un poco NC, NetCat o como queráis llamarlo, y vamos a ponerlo en contraposición a ssh en algunas cosas y siempre vamos a poder utilizar ssh con nc para ejecutar comandos remotos.

Netcat es un software de 1995 que tiene muchas utilidades, así que voy a pasar a enumeraros unas cuentas. Es importante escuchar el audio si estáis leyendo esto pues cada comando va en una máquina diferente.

Ejemplo 1 – Crear un chat:

  • -l: listening
  • -p: port
nc -lp 1234
nc x.x.x.x 1234

Ejemplo 2 – Transferir un fichero

  • -v: verbose
  • -w: wait en segundos de tiempo para expirar conexión
  • <: el fichero especificado entra en la conexión (indica la dirección)
  • >: el fichero especificado es la salida de la conexión (indica la dirección)
nc -v -w 30 -p 1234 -l < fichero
nc -v x.x.x.x 1234 > fichero
NC - NetCat
Imagen de la película «Tú a Bostón y yo a California» tuneada por Top

Ejemplo 3 – Levantar una shell inversa

Lo primero si usáis linux es instalar el paquete netcat-traditional porque por defecto viene el paquete netcat-openbsd. La diferencia es que el tradicional permite ejecución y el openbsd no. Esto nos dejará dos versiones de nc: nc.traditional y nc.openbsd donde nc será nc.openbsd.

  • -e: Ejecutar un comando.
nc.traditional -vlp 5555 -e /bin/bash
nc x.x.x.x 5555

Ejemplo 4 – Escanear puertos

  • -u: UDP
  • -z: Modo zero-I/O
nc.traditional -vu -w 1 x.x.x.x -z 1-100
nc.traditional -v -w 1 x.x.x.x -z 1-100
Puerto Cerrado
Puerto abierto

También podemos mezclarlo con un poco de bash y scripting:

  • -n: No consultes el DNS
for i in {10..12}; do nc –vv –n –w 1 192.168.0.$i 21-25 –z; done

Ejemplo 5 – Montar un syslog

Para montar un syslog lo primero que necesitamos es una implementación de netcat que nos permita tener más de una conexión concurrente con el servidor y nc.traditional y nc.openbsd tienen la limitación de sólo una conexión concurrente.

La implementación que permite tener conexiones concurrentes es ncat, la de https://nmap.org/ncat/, y esta es la que utilizaremos.

  • -m: Conexiones máximas concurrentes
  • -k: Mantener la conexión abierta (keep open)
ncat -m 100 -k -l -p 5000
nc.traditional x.x.x.x 5000 -c "tail -f /var/log/loquesea"
ncat x.x.x.x 5000 -c "tail -f /var/log/loquesea"

Ejemplo 6: Montar un servidor web

Aquí montado el servidor web con ncat (permite varias conexiones) y con nc.traditional (sólo permite 1)

ncat -lk -p 8080 --sh-exec "echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html"
nc.traditional -l -p 8080 -c "echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html"

Ejemplo 7: Modificar routers intermedios

La cabecera de IP tiene un campo que se llama opciones y dentro de las opciones tenemos una llamada Loose Source Route (opción 131) que es muy probable que no hayáis visto todavía. En este caso lo que hacemos es especificar una lista de direcciones IP por las que el datagrama tiene que pasar, aunque esto no implique no pueda pasar por otro puntos no especificados. En el caso de Strict Source Routing por ejemplo sí tendríamos que pasar por sólo y exclusivamente esos puntos.

  • -g: Puntos de salto de Loose source routing
nc.traditional -ulp 1234
nc.traditional -u -g 1.1.1.1 -g 2.2.2.2 193.168.89.102 1234
Modificación de los saltos intermedios visto en wireshark