Muy buenas a todos!
En este post nos vamos a centrar en cómo desplegar y ejecutar el módulo de Bluekeep desarrollado por zerosum0x0 que ha sido añadido recientemente en Metasploit. Aunque todavía no está desarrollado en su totalidad (se encuentra en pull request en GitHub aún), está en disposición de ser utilizado con unos ligeros retoques. En este caso, nuestros objetivo será una máquina Windows 2008 R2, obviamente, vulnerable a BlueKeep (CVE-2019-0708).
El
14 de Mayo de 2019, Microsoft lanzó varios KBs para solucionar esta
vulnerabilidad en equipos Windows 7 SP1, Windows 2008 R2 SP1 y SP2 y
Windows Vista respectivamente (KB4499175 y KB4499180).
Montando el laboratorio
Un poco de historia
Pero antes de empezar lo divertido... ¿Qúe es Bluekeep? Según lo define
el equipo de Microsoft, es una vulnerabilidad de ejecución de código
remoto existente en el servicio de Escritorio Remoto. Esta funcionalidad
puede ser explotada por un atacante sin autenticar mediante el envío de
peticiones especialmente construidas. Si un atacante consiguiera
explotar satisfactoriamente esta vulnerabilidad, tendría acceso a la
máquina de la víctima como usuario NT Authority/System.
Montando el laboratorio
Para realizar lo descrito en este post se ha utilizado:
- Virtualbox 6.0.1 para crear la máquina virtual objetivo.
- Una VMWare de Kali Linux Rolling 2019.3 8 amd64 (descárgala aquí) con Metasploit en la versión 5.0.53-dev. IP: 192.168.1.4.
- Una VM con una imagen .iso de Windows Server 2008 R2 64 bit vulnerable (descárgala aquí). IP: 192.168.1.37
systeminfo
en una cmd/powershell. Como se observa en la
siguiente imagen, la máquina W2008 tiene un único parche instalado
(KB976902) por lo que, a priori, es vulnerable a BlueKeep.Fig 1: Salida del comando systeminfo |
El siguiente paso será habilitar el Escritorio Remoto ya que, por defecto, no viene activado.
Fig 2: Habilitar RDP |
Fig 3: Permitiendo cualquier tipo de conexión |
Nota 1: En
el despliegue de la máquina Windows, se ha realizado la instalación por
defecto y no se han aplicado actualizaciones del sistema.
Nota 2: Docker en una Kali con arquitectura x86 me dio problemas para montar el contenedor, tuve que usar una com arquitectura x86_64.
Seleccionando el módulo de BlueKeep
Como hemos comentado antes, se ha usado una Kali Rolling 2019.3 con la última versión disponible de Metasploit (5.0.53-dev), la cual incluye el exploit de BlueKeep por defecto. Para actualizar a la última versión de Metasploit disponible, basta con usar el comando
apt-get install metasploit-framework
en la consola. Una vez terminado el proceso, bastará con lanzar el comando version
dentro de Metasploit para confirmar cual se está ejecutando.Fig 4: Versión de Metasploit |
A continuación, mediante el comando
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
podemos seleccionarlo. Con show info
podemos confirmar con exactitud que es el exploit deseado. Fig 5: Información sobre el exploit |
Probando el exploit
De todas las opciones que se nos ofrece por pantalla para rellenar, sólo es necesario incluir el parámetro RHOSTS con la IP de la máquina destino (en nuestro caso 192.168.1.37) y seleccionar el TARGET correctamente. Como bien se indica en la página de Rapid 7, el módulo aún es manual, por lo que si no se modifica este valor, el exploit no funcionará. Al ser nuestro objetivo un Windows 2008 R2 corriendoVirtualbox 6, tendremos que seleccionar el TARGET 2. Como payload, usaremos una reverse tcp de meterpreter.
Fig 6: Opciones selecionadas |
Si echamos un ojo a los comentarios del exploit (localizado en /usr/share/metasploit-framework/modules/exploits/windows/rdp/cve_2019_0708_bluekeep_rce.rb), para las versiones superiores a Windows 7, el registro HKLM\SYSTEM\CurrentControlSet\Control\TerminalServer\Winstations\RDP-Tcp\fDisableCam tiene que valer 0. Además, en los Windows Server 2008 R2 debe ser asignado manualmente.
Fig 7: Cambiando el registro |
Si lanzamos el exploit tras cambiar el registro, observaremos que todo se ejecuta correctamente, sin embargo, la máquina Windows 2008 habrá sufrido un pantallazo azul.
Fig 8: Fallo de paginación |
Nota: Puede ocurrir que el exploit se ejecute correctamente. Sin embargo, es recomendable seguir leyendo para garantizar una tasa de éxito más elevada.
Ajustando Bluekeep
Ajustando Bluekeep
El pantallazo azul indica un fallo de paginación del sistema, es decir, una pagína de memoria no ha sido asignada correctamente y el sistema no ha podido recuperarse. Para poder arreglar esta situación, es necesario modificar el valor GROOMBASE del script para que apunte al valor NPP (Non Paged Pool Area) de nuestra máquina virtual. Esto se debe a un comentario incluido en el interior de script:
Fig 9: Explicación NPP obtenida del script |
O lo que es lo mismo, según que máquina virtual se esté usando, el inicio de la NPP puede encontrarse en un rango cercano al puntero incluido por defecto en GROOMBASE o, encontrarse a "kilómetros" de el, impidiendo que el exploit funcione correctamente (es por eso que ha veces funciona sin modificar y, otras veces, nunca genera una shell). La solución (a día de hoy) es bastante "sencilla"; basta con obtener el puntero NPP de nuestra máquina virtual y sustituirlo en el script. Para obtenerlo, es necesario realizar un volcado de memoria y emplear el plugin pools de Rekall.
Realizando el volcado de memoria
Para realizar el volcado de memoria, aprovecharemos el ejecutable VBoxmanage.exe incluido en los archivos de programa Virtualbox por defecto.
- cmd> C:\Program Files\Oracle\VirtualBox>VBoxManage.exe debugvm "W2008 R2" dumpvmcore --filename="C:\Users\%USERNAME%\Desktop\files"
Fig 10: Nombre de la VM |
Obteniendo la dirección de NPP
Primero, actualizamos docker (o instalaremos) en nuestra Kali mediante el comando apt-get install docker.io. A continuación, creamos un contenedor de Docker con Rekall, docker pull remnux/rekall
lo levantamos con:
- docker run --rm -it -v files:/home/nonroot/files remnux/rekall bash
Por último, mediante el comando rekall -f files poolsobtenemos el valor de NPP.
![]() |
Fig 11: Valor de NPP |
Editando el script
Una vez tenemos el valor de NPP de la máquina Windows 2008, sólo nos falta por editar el contenido del script y cambiar el valor de GROOMBASE por el nuevo. En nuestro caso, al ser una máquina virtual corriendo en VBox, cambiaremos el GROOMBASE del Target 2 (línea 128 del script).
Nota: Rekall nos muestra la posición en memoria con una sola "f", debemos añadir el valor al script con todas las "f", si no, volverá a generarse un error al lanzar el exploit.
- 0xfa8001802000 => 0xfffffa8001802000
Fig 12: Cambiando GROOMBASE |
Lanzando el exploit definitivo
Antes de lanzar el exploit, debemos volver a cargar el módulo en exploit. Existen varias maneras diferentes, ya sea usando el comando reload, el comando
reload_all
o, ante la duda, la vieja confiable, reiniciar Metasploit (esta es la mejor opción, así no hay dudas de que se cargan correctamente los cambios). Una vez dicho esto, si ejecutamos el exploit (con la misma configuración que antes)... la preciada shell aperece.Fig 13: System! |
Happy Juancking!
Referencias
- https://pentest-tools.com/blog/bluekeep-exploit-metasploit/
- https://klaus.hohenpoelz.de/playing-with-the-bluekeep-metasploit-module.html