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
Ya los consegui voy a testear mi red
Hola q tal saludos me encanta la pagina,acabo de montar una red en mi casa y me he puesto a testearla realmente es divertido ¿ahh en donde puedo conseguir el resto de los comandos del netcar?
saludos
Ya se que este comentario esta un poco fuera de termino con respecto a la fecha… pero me gusta tanto como explicas el aspecto tecnico de las cosas que me encantaria que explicaras el Spoofing de IP (el famoso ataque Mitnik)
Hola Ezequiel, Gracias por tu comentario, y es una excelente pregunta la de los ejecutables!
Todo depende de la herramienta que utilices para pasarle los datos a netcat (porque netcat solamente reenvía la información). Para no reducir problemas, te recomiendo guardar el o los ejecutables en un .tar y transferir ese archivo con cat y netcat.
Y vamos a tener en cuenta tus sugerencias para los próximos artículos.
saludos!
Muchas gracias Iván! Esperamos seguir así!
saludos
Me gusto el articulo, no sabia que eso se llamaba honeypot…
Tampoco sabia que con el netcat se podian transferir archivos, pero tengo una duda se podran transferir ejecutables sin que se corrompan??
Muy buen trabajo y la proxima entrega podria ser algo de vulnerabilidades en los software o en las web, algo muy importante para tener una buena seguridad y ignorado por la mayoria debido a su complejidad.
Realmente me sorprendieron con esta publicación, ya casi no consultaba red users, están volviendo a ser lo que alguna vez fueron, recuerdo en las power user salían publicaciones muy interesantes como esta de autores muy buenos como Pablo Hauser, gracias che!
emmm me estoy inciando!!! algo entiendo pero me gusta estas clases de info para aprender mas sobre todo para aumentar y entender la seguridad en internet!
algo de Cain and Abel, como utilizar las Rainbow table, que algoritmos son “crackeables” con las rainbow. Demostración de crack a partir de “hashes” de windows, unix, cisco, etc.
Gracias!
Saludos,
Rodrigo
Gracias por tu comentario, lo vamos a tener en cuenta y seguramente en los próximos artículos vamos a tratar alguno de esos temas.
saludos!
Sin entrar en el típico debate Unix-like vs Windows, los sistemas basados en Unix me gustan mucho más, porque veo que están mejor diseñados. Y están basados en buenos fundamentos. Pero claro, son opiniones.
Gracias por tu comentario!
si podrían enseñar mas acerca de las herramientas John the ripper o Crack o Nessus, o algo de airsnort para la seguridad de nuestro sistema en red wifi
Buenísima info Fabi.
Por qué serán tan útiles los SOs GNU/Linux, no? Por qué será que se usan para hackear?
Buen diseño desde su concepción? Plantearon las bases de la verdadera informática?
FIFOs implementados primeramente en Unix?
Que plantearon el concepto correcto de comunicación entre procesos? Que en sus primeras versiones DOS lo simulaba con “|” pero no lo implementaba realmente?
Y bueh… Por eso Windows sirve para lo que sirve… Y está bien. Son dos cosas distintas que nunca podrán compararse.