MAR, 17 / MAY / 2011

Escuela de Hacking: El viejo y querido Netcat – Parte II

En la primera parte de este artículo analizamos qué es netcat y cómo podemos utilizarlo para escanear puertos, capturar banners y averiguar otros datos de los servicios que corren en un dispositivo: ahora veremos algunas de las otras excelentes características que netcat tiene para nosotros.

En la escuela de Hacking de Fabián Portantier ya vimos algunos trucos en Covert Channels y una intro a Netcat. Antes de comenzar, les dejamos la parte I para que se actualicen y preparamos el terreno para  la segunda mitad de la nota.

Redireccionando ejecutables

De todas sus opciones, sin dudas la mas poderosa que tiene netcat es “-e”, con la cual especificamos qué programa queremos ejecutar cuando recibamos una conexión (sólo disponible en el modo servidor).

nc –l –p 1234 -v –e /bin/bash

Este ejemplo pone a escuchar en el puerto 1234 y, al recibir una conexión, ejecuta el programa /bin/bash

Para el caso de una plataforma Windows, podríamos usar lo siguiente:

nc –l –p 1234 -v –e cmd.exe

(la opción “-v” es para que nos muestre más detalles)

Una vez que tengamos el puerto en escucha, podemos conectarnos utilizando netcat en modo cliente, así:

nc [ip-de-destino] [puerto]

nc 172.16.66.128 1234

Como lo vemos en la imagen, en la que estoy conectandome desde mi laptop a una máquina virtual VMWare:

Debemos tener en cuenta que esto nos proporciona acceso a una shell, sin pedirnos ninguna autenticación y con los privilegios del usuario que ejecutó netcat. Tampoco estaríamos encriptando la información. Así que no lo utilicen como un reemplazo a SSH, porque es una opción muy insegura. Pero, como vamos a ver más adelante, es una opción de muchísima utilidad para otras cosas.

Como podrán imaginar, gran parte de los backdoors existentes, utilizados por troyanos y rootkits, están basados en el uso de la herramienta netcat.

Algo importante a tener en cuenta es que, cuando finaliza el programa que estamos ejecutando, netcat se va a cerrar. Por lo cual nos sirve solamente para una sesión. Esto podemos evitarlo de las siguientes formas:

En sistemas Windows, podemos utilizar la opción “-L” cuando ejecutamos netcat en modo servidor, para que automáticamente se vuelva a poner en escucha.

En sistemas Unix-like, vamos a tener que escribir un script que automatice el reinicio de netcat. Algo igual o similar a esto:

#!/bin/bash

while 1
do
netcat -v -l -p 1234 -e /bin/bash
done

Esto es algo bastante sencillo, pero podemos extender el script para que, por ejemplo, guarde un archivo de log  con las conexiones que se establecieron, etc, etc.

Pensemos que hasta podríamos implementar un pequeño honeypot (http://es.wikipedia.org/wiki/Honeypot) con la ayuda de netcat y algunos scripts en bash o cualquier otro lenguaje.

Transferencia de archivos

Si, si, también podemos transferir archivos utilizando netcat. Para qué? Puede ser por diversión, pero también porque no siempre contamos con herramientas exclusivas para transferir archivos, o porque no tenemos ganas de levantar un servidor FTP. O, porque netcat deja muchas menos huellas, lo podemos hacer escuchar facilmente en cualquier puerto y es más automatizable 😉

Enviar un archivo desde el cliente al servidor:

Servidor:
nc -l -p [puerto] > [archivo de destino]
nc -l -p 1234 > salida.txt

Cliente:
nc -w3 [ip-del-servidor] [puerto ] < [archivo-que-queremos-enviar]
nc -w3 172.16.66.128 1234 < /etc/passwd

Enviar un archivo desde el servidor al cliente:

Servidor:
nc -l -p [puerto] < [archivo-a-enviar]
nc -l -p 1234 < /etc/passwd

Cliente:
nc -w3 [ip-del-servidor] [puerto] > [archivo-de-salida]
nc -w3 172.16.66.128 1234 > salida.txt

El poderoso “relay”

Mezclando un poco de todo lo que vimos, podemos hacer algo realmente fascinante. Crearemos un archivo especial, y lo conectaremos con nectat, de modo que todo lo que escribamos en el archivo, sea enviado a través de la red hacia otra máquina. (Les dije que era fascinante).

No hace falta explicar para qué podría servirnos tal característica, básicamente porque eso queda librado a su imaginación y a la necesidad que tengamos en el momento. Pero, créanme, es un excelente recurso en situaciones adversas.

ACLARACIÓN: Lo que voy a explicar a continuación aplica sólo para plataformas Unix-like. Debido a que, por cuestiones de diseño, en Windows es muchísimo más complicado contruir lo que se conoce como “named pipes”. Aunque puede hacerse. Para más información: http://en.wikipedia.org/wiki/Named_pipe#Named_pipes_in_Windows

Cliente:

Primero que nada, debemos crear un archivo FIFO:

cd /tmp
mkfifo fifo

Si no tenemos el comando “mkfifo” podemos utilizar el siguiente (que hace exactamente lo mismo)

mknod fifo p

Ahora, creamos el script del cliente:

#!/bin/bash
while [ true ]
do
line=`cat fifo`
echo $line | netcat -q 1 172.16.66.128 1234
done

Este script monitorea constantemente el archivo “fifo” y hace que todo lo escrito en el mismo sea redirijido a netcat, el cual lo envía a través de la red al servidor

Servidor:

Creamos el siguiente script:

#!/bin/bash

echo “” > salida.txt

while [ true ]
do
netcat -l -p 1234 >> salida.txt
done

Lo que hace el script es poner a escuchar netcat, y redireccionar la información entrante al archivo salida.txt

Ahora, simplemente tenemos que escribir en el archivo fifo del cliente, para que la información sea enviada al servidor.

Podemos hacerlo, por ejemplo, utilizando el comando “echo”, así:

echo “Buen día” > fifo

Con eso, vamos a recibirlo del otro lado, como podemos ver en la captura de pantalla.

Como siempre, estos scripts pueden mejorarse y personalizarse en base a nuestras necesidades. Pero con esto es suficiente para darnos una buena idea de las grandes capacidades que tiene netcat y los beneficios que podemos obtener de esta genial herramienta.

 

Herramientas derivadas

En base al éxito que ha tenido netcat durante varios años, y que es una herramienta de código abierto, se han creado varios herramientas que agregan funcionalidades o están enfocadas en ciertas tareas particulares, como por ejemplo:

cryptcat – Permite transferir archivos encriptando las comunicaciones con el algoritmo Twofish
netcat6 – Netcat con soporte para IPv6
netrw – Similar a Netcat, enfocado a transferir archivos

Esto es todo por ahora, espero que les haya sido de utilidad esta información.

Los códigos fuente de los artículos se pueden encontrar también en gitorious. En este repositorio voy a ir guardando tanto los códigos originales como las modificaciones que les vayamos haciendo para mejorarlos.

http://gitorious.org/portantier/escuela-de-hacking/trees/master

También pueden seguir mis proyectos, el lanzamiento de nuevos artículos y otro tipo de contenidos desde:

http://twitter.com/#!/portantier

=======================================

Además, me gustaría aprovechar este artículo para que ustedes (lectores), tengan la libertad de proponer los temas que vamos a tratar en los siguientes artículos. Me gustaría saber qué les interesa aprender acerca de la seguridad, para que podamos encaminar el contenido a lo que ustedes buscan.

Nos vemos en la próxima entrega!!!

 

Fabian Portantier

www.portantier.com

¡Comparte esta noticia!