El post que buscas se encuentra eliminado, pero este también te puede interesar

funciones poco conocidas o usadas en netcat

Quiero compartir con ustedes un pequeño documento que encontré en la red investigando algunas cosas me pareció bastante interesante así que lo traducí para compartirlo con ustedes (espero sepan comprender si existen errores y horrores en la traducción, desde ya las disculpas del caso)
Aca les dejo el link del proyecto --- AQUI ---
Introducción

Aunque hay muchos artículos sobre este tema, tal vez muchas personas utilizan Netcat solamente para conseguir una shell inversa o descubrir el sistema operativo de un objetivo y barrer su puertas.

Además de las operaciones citadas, hay muchas otras funcionalidades que nos ofrece y que en algún momento puede ser de gran ayuda.

Este articulo no pretende ser una guiá completa, simplemente un punto de partida para explorar un poco mas los posibles usos de Netcat.

Transferencias de archivos
Hay momentos en que precisamos transferir archivos de un host a otro y no sabemos como, pues Netcat nos ofrece un camino fácil de conseguirlo, sin necesidad de montar un servidor FTP o cualquier otra cosa de esos tipos.

Es tan fácil como se describe mas abajo.

En el servidor:


# netcat -l -p 5050 > archivo.txt

En el cliente:

# cat archivo.txt | netcat ip_server 5050

Con esto conseguimos enviar sin problemas un simple archivo de texto, el único problema es que si queremos ir mas allá y enviar un binario (un executable, un archivo de OpenOffice.org)

Vamos a intentar lo siguiente.

En el servidor:

# netcat -l -p 5050 > ejemplo.odt

En el cliente:

# cat salida.odt | netcat ip_server 5050

Ahora vamos a comprobar (suponiendo que el ejemplo haya sido realizado en la misma maquina):

# diff ejemplo.odt salida.odt

Como vemos, no hay NINGUNA diferencia, asi podemos transferir binários sin problemas...


Relays utilizando Netcat
Para esta parte necesitamos 3 máquinas diferentes. Crearemos un relay en la máquina Linux utilizando el Netcat ejecutandolo en modo de escucha y como cliente. Este dirigira los datos de una primera maquina (A) para otra (B).

Esta máquina de enrutador conectará la primera máquina, ejecutando el Netcan en modo cliente, con una tercera maquina (C) ejecutando el Netcat en modo servidor, o de escucha.

Una vez establecida la conexión, el enrutamiento permitirá el acceso a esta última maquina a partir de la máquina original.

El host intermediario sirve de proxy, de forma que nos conectamos a ella y ella nos conecta al servidor final, de este modo consiguiendo que sea mas difícil que nos rastreen, ya que en los logs del servidor aparecerá el IPC del host relay. Obviamente que cuanto mas hosts intermediarios utilizamos, mas difícil sera la tarea de rastrear.

Una manera de crearnos relays, es unir la entrada y la salida de un cliente y servidor Netcat utilizando un archivo especial denominado FIFO (Firts In, First Out). Podemos crear un archivo FIFO y utilizarlo para unir un Netcat en modo servidor con un cliente a través de los siguientes comandos:

# mknod backpipe p
# nc -l -p [puertoA] 0<backpipe | nc [IP_Destino] [Puerto_Destino] 1>backpipe

Donde el puertoA es el puerto donde el relay esta escuchando y Puerto_Destino es el puerto de la máquina destino(IP_Destino) donde configuramos un backdoor con la shell. Es importante no colocar espacios en los direccionamientos (> < Estos re direccionamientos permiten dirigir la entrada y salida estándar para un backpipe y no puede tener espacios en ellos.

Para que esto función, es necesario que en caso de que tengamos un filtro de paquetes ejecutándose, permitamos el envió de paquetes a la maquina C. Es posible que si estuviéramos con la iptables activa (funcionando como firewall), no sera permitido. Podemos desactivar el iptables del siguiente modo:

# /etc/init.d/iptables stop

Bien manos a la obra, como escribí antes, vamos a necesitar tres maquinas (en este caso como lo hago yo el propio host donde trabajo y 2 maquinas virtuales), los IPs son los siguientes:

    Servidor: 192.168.1.111
    Relay: 172.16.72.112
    Cliente: 172.16.72.113 


Seguimos adelante.

En el servidor, dejamos el Netcat escuchando un puerto con un shell presente:

# nc -l -p 5555

En el relay, creamos el FIFO, a através de los direccionamientos hacemos las conexiones:

# mknod buffer p
# netcat -l -p 1111 0<buffer | netcat 192.168.1.111 5555 1>buffer

Como podemos observar, primero creamos un buffer con la ayuda de mknod, y después usamos el mismo para unir la entrada estándar (que en este caso sera aquel que el cliente nos enviará a través del Netcat) con la conexión en el servidor almacenar de nuevo la salida de esta ultima conexión al buffer, que será encaminado para el cliente.

Finalmente, nos conectamos a partir de nuestro cliente y observamos que tenemos la shell con el servidor:

# netcat 172.16.72.112
# pwd
/home/XXXX

Para asegurarnos que la conexión a partir de nuestro cliente hasta el servidor ha sido enmascarada por el relay, verificamos en el servidor las conexiones activas, filtrando, por ejemplo el puerto 5555 que es donde estamos "escuchando", y obteniendo lo siguiente:

# netstat -aveptn | grep 5555
tcp   0   0 192.168.1.112:5555   172.16.72.113:51220  ESTABELECIDO 1000   44068    9038/bash

Vemos que, efectivamente, alguien se conecto en nuestro puerto 5555, que posee un shell (bash) y que la conexión viene del relay (172.16.72.112:51220).


Uso como scanner
Podemos encontrarnos con alguna situación en que no tenemos el Nmap o algún otro programa a mano, sin embargo siempre podemos recurrir al Netcat y utilizarlo como un scanner de puertos (un poco tosco).

Por ejemplo:

# nc -vv 127.0.0.1 22-25
localhost [127.0.0.1] 25 (smtp) : Connection refused
localhost [127.0.0.1] 24 (?) : Connection refused
localhost [127.0.0.1] 23 (telnet) : Connection refused
localhost [127.0.0.1] 22 (ssh) open
SSH-2.0-OpenSSH_4.7p1 Debian


Enviar e-mail
Siempre es divertido interactuar con los protocolos de red basados en texto con nada mas que el Netcat y un teclado.Sigue un pequeño ejemplo mostrando como enviar e-mails comunicándose con un servidor SMTP. El SMTP esta descrito en RFC 5321, mas no es necesario mucho protocolo para enviar un simple mensaje. El servicio esta vinculado al puerto 25, y utilizaremos el parámetro -C por que el mismo es requerido para finalizaciones de linea (CRLF). El ejemplo abajo contiene la transcripción de una sesión:

$ ncat -C mail.ejemplo.com 25
220 mail.ejemplo.com ESMTP
HELO cliente.ejemplo.com
250 mail.ejemplo.com Hola cliente.ejemplo.com
MAIL FROM:a@ejemplo.com
250 OK
RCPT TO:b@ejemplo.com
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: a@ejemplo.com
To: b@ejemplo.com
Subject: Saludos!

Hola. Esta es un pequeño mensaje enviar por netcat.
.
250 OK
QUIT
221 mail.ejemplo.com closing connection

Para hacer funcionar ese ejemplo altere o mail.ejemplo.com para su servidor SMTP y el cliente.ejemplo.com para su dominio. Naturalmente cambiara la dirección de e-mail y el mensaje tambien. Esto funcionará utilizando su servidor de e-mail válido, con su dirección real, o cuando utilizar el servidor de e-mail del remitente (procure por el registro MX para el domino en su dirección de e-mail).

Obviamente que esta técnica puede ser utiliza para mas que enviar e-mails. Netcat es una gran herramienta de debug para cualquier protocolo basado en texto. El debug es echo algunas veces con el comando telnet, pues el provee como una respuesta en texto bruto. Por ejemplo el Netcat posee algunas ventajas sobre el telnet. el Netcat no muestra nada distinto de lo que es enviado por el host remoto. Telnet no es tan bueno para datos binarios arbitrarios, pues reserva algunos bytes como caracteres de control. Ademas el telnet no funciona con el protocolo UDP.

Encadenando Netcats
Netcat fue desenvuelto para trabajar con un pipeline, entonces naturalmente la salida de una instancia del Netcat puede alimentar la entrada de otro. Abajo sigue una manera de enviar un archivo de log de un host para otro a traves de un intermediario:

host3# ncat -l > log.txt
host2# ncat -l | ncat host3
host1# ncat --send-only host2 < log.txt

Un posible problema con esta técnica es que funciona en forma "unidireccional": host1 puede enviar, no es posible para el host3 enviar cualquier cosa para el host1. En este caso no importa, mas eso puede ser realizado con algunas pequeñas modificaciones, veamos:

host3# ncat -l > log.txt
host2# ncat -l --sh-exec "ncat host3"
host1# ncat --send-only host2 < log.txt

El Netcat en modo de escucha en host2, al recibir una conexión crea un "nuevo netcat" para hablar con el host3 y conecta entrada y salida del programa en ejecución en el host1 y host3 encadenandolos. El mismo puede ser utilizado en un host local. El ejemplo a seguir direcciona al puerto 8080 para el servidor web ejemplo.org:

# ncat -l localhost 8080 --sh-exec "ncat ejemplo.org 80"

Simulando SSL
Supongamos que necesitamos de un servidor IMAP, que requiera SSL, y que el lector de e-mail no soporta SSL. El Netcat puede servir como un extremo criptografico para conectar el cliente y el servidor. Conectaremos el cliente de e-mail de un puerto local y el Netcat encaminara el trafico encriptado para el servidor. Abajo esta como conectar el IMAP (puerto 143) en el host local al IMAP con SSL (puerto 993) en imap.ejemplo.org

# ncat -l localhost 143 --sh-exec "ncat --ssl imap.ejemplo.org 993"

Una vez que esto haya sido ejecutado, instruir al cliente de e-mail a conectar con el servidor IMAP en el host local (localhost).

Esto funciona con protocolos que envíen tráficos estrictamente entre dos hosts. No funciona muy bien para HTTP por que envuelve hostnames y frecuentemente envuelve múltiplos de hosts.

SSH a través de un túnel Netcat

Con el Netcat y OpenSSH, es posible ejecutar el SSH para un host atras de un enrutador con NAT sin necesitar direccionar los puertos en el enrutador. El enrutador necesita tener el Netcat instalado. Abajo sigue como conectar via SSH a un hosts a traves de un enrutador.:

# ssh -o ProxyCommand="ssh -q <ruteador> ncat %h %p" <host>


La opción ProxyCommand del ssh dice como abrir la conexión SSH para el host. Esto es realizado abriendo otra sesión SSH para el enrutador y conectándolo al host con el Netcat.

Es mas...

Hay muchas cosas mas que podemos realizar con esta fantastica herramienta, como por ejemplo:

Un programa de fuerza bruta (bruteforce), podríamos crear un diccionario y enviar palabra por palabra a un puerto de forma que cuando encuentre la contraseña correcta, haga el registro.
Enumeración de servicios: basta conectar con el puerto que queremos extraer información de servicio y guardar su respuesta para analizarlo posteriormente.
Mini-Chat: por mas que no lo creas esto puede ser realizado.


Y esto es solo el principio de lo que se puede hacer...

Anuncios

11 comentarios - funciones poco conocidas o usadas en netcat

@Avalon +3
Un re laburazo te mandate traduciendolo. A favoritos y recomedado!
@MadKatz +3
+8 use mucho tiempo netcat en el pasado y no se me ocurrio lo de encadenarlo entre distintas pcs.
@polaco72 +2
Gracias, no sabía que se podía hacer esto con el netcat
@Corrosive +2
Muy buena info, se agradece.
+10
@spongebobp2m +2
interesante..!, se agradece. Van mis puntos..
@due204 +2
Muy bueno che, te dejo 10