Armageddon
Armageddon es una máquina de dificultad fácil. Un sitio web Drupal explotable permite el acceso al host remoto. La enumeración de la estructura de archivos Drupal revela credenciales que nos permiten conectarnos al servidor MySQL y, eventualmente, extraer el hash que es reutilizable para un usuario del sistema. Usando estas credenciales, podemos conectarnos a la máquina remota a través de SSH. Este usuario puede instalar aplicaciones usando el administrador de paquetes snap. La escalada de privilegios es posible cargando e instalando en el host una aplicación maliciosa usando Snapcraft.

Reconnaissance
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Armageddon. Este resultado lo almacenaremos en un archivo llamado allPorts.
A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.
Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Apache.
Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.
Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Web Enumeration
Realizaremos una comprobación de las tecnologías que son utilizadas en el sitio web.
Revisaremos las cabeceras de la página web, en el resultado obtenido comprobamos la cabecera X-Generator la cual nos indica sobre la existencia del CMS Drupal 7.
Accederemos a http://10.10.10.233 y comprobaremos que efectivamente se trata del CMS de Drupal.

Initial Foothold
Drupal < 7.58 Exploitation - Drupalgeddon2 [RCE] (CVE-2018-7600)
En la siguiente respuesta de Stack Overflow nos indica una manera sencilla de verificar la versión exacta que se encuentra instalada de Drupal.

Revisaremos si el archivo CHANGELOG.txt se encuentra público en la página web. Comprobamos que hemos logrado obtener la versión exacta de Drupal, lo cual nos facilita intentar buscar vulnerabilidades para esa versión.

Revisaremos posibles vulnerabilidades de la versión de Drupal 7. En los resultados obtenidos, nos encontramos de una vulnerabilidad llamada Drupalgeddon2 la cual nos permite obtener un Remote Code Execution (RCE).
Esta vulnerabilidad está reportada a través del siguiente CVE-2018-7600.

Drupal anterior a 7.58, 8.x anterior a 8.3.9, 8.4.x anterior a 8.4.6 y 8.5.x anterior a 8.5.1 permite a atacantes remotos ejecutar código arbitrario debido a un problema que afecta a múltiples subsistemas con configuraciones de módulos predeterminadas o comunes.
Buscando por Internet, nos encontramos con el siguiente repositorio de GitHub en el cual nos proporcionan un PoC a través de un script realizado en Ruby.
Realizaremos la explotación de la vulnerabilidad para lograr obtener una shell en el sistema vulnerable. Comprobamos que finalmente obtenemos acceso a la máquina y podemos ejecutar comandos arbitrarios.
Dado que nos encontramos en la shell que nos proporciona el script, trataremos de obtener una consola bash. Para ello, el método que realizaremos es realizar una petición con cURL a nuestro script en Bash para lograr obtener la Reverse Shell.
Verificamos que el binario de cURL se encuentra instalado en el equipo objetivo.
Desde otra terminal nos pondremos en escucha con nc para recibir la Reverse Shell.
En nuestro equipo loca, deberemos de disponer del siguiente script en Bash que es el que utilizaremos para obtener la Reverse Shell. El script lo compartiremos mediante un servidor web.
Realizaremos desde el equipo víctima la petición con cURL al script que estamos compartiendo para que sea ejecutado a través de una bash.
Verificamos que logramos obtener acceso al sistema correctamente. El problema es que el usuario actual que disponemos apache, no tiene una shell como sh o bash, por lo tanto la consola que disponemos es bastante limitada.
Initial Access
Information Leakage
Enumeraremos el directorio /var/www/html/sites/default en el cual nos encontraremos con un archivo de configuración settings.php el cual contiene las credenciales de acceso al MySQL de la base de datos que está utilizando Drupal.
SQL Enumeration
Dado que no disponemos de una bash para poder acceder al MySQL y realizar las consultas, haremos la ejecución del comando en la misma sintaxis del comando.
A continuación, revisaremos nos conectaremos con el usuario drupaluser a la base de datos drupal para enumerar las tablas presentes. En el resultado obtenido, verificamos que entre todas las tablas que se nos muestra, aparece la tabla users que quizás contenga credenciales.
Realizaremos una consulta para obtener todos los valores presentes en la tabla users. Comprobamos que hemos obtenido las credenciales en formato hash del usuario brucetherealadmin.
Intentaremos crackear el hash a través de hashcat. Verificamos que finalmente, logramos obtener las credenciales en texto plano del usuario mencionado.
Revisando los usuarios que disponían de bash en el equipo, nos encontramos al usuario encontrado en la base de datos de drupal. Con lo cual, quizás podamos iniciar sesión con ese usuario.
Verificamos si podemos acceder al SSH del equipo con las credenciales del usuario brucetherealadmin. Comprobamos el acceso y de la flag user.txt.
Privilege Escalation
Abusing sudoers privilege (snap)
Revisando de si el usuario actual disponía de algún permiso de sudoers, nos encontramos que podía ejecutar como sudo el binario de snap para instalar paquetes.
A través de la herramienta de searchbins, realizaremos una consulta para verificar la manera de abusar de este binario que podemos ejecutar como sudo para lograr acceso como root.
Primero, definimos el comando que queremos ejecutar al instalar el paquete Snap. En este caso, usamos COMMAND=id para comprobar si la ejecución se realiza con privilegios elevados. Luego, creamos un directorio temporal con mktemp -d y nos movemos a él para evitar conflictos con otros archivos.
Dentro de este directorio, generamos la estructura necesaria para el paquete Snap con mkdir -p meta/hooks, ya que Snap permite ejecutar scripts en ciertas etapas de la instalación mediante estos hooks. Luego, creamos el script malicioso con printf '#!/bin/sh\n%s; false' "$COMMAND" >meta/hooks/install, donde definimos que el script se ejecutará con sh, insertamos el comando id y agregamos false al final para evitar que Snap elimine el paquete después de ejecutarlo.
Una vez creado el script, le damos permisos de ejecución con chmod +x meta/hooks/install para asegurarnos de que pueda correr sin restricciones. Finalmente, usamos fpm para empaquetar todo en un archivo Snap ejecutable con fpm -n xxxx -s dir -t snap -a all meta. Esto genera el paquete xxxx_1.0_all.snap, que podremos instalar con privilegios de root para comprobar si tenemos acceso al sistema con permisos elevados.
Después de generar el paquete Snap malicioso, lo transferimos a la máquina objetivo utilizando scp. Este comando permite copiar archivos de manera segura entre sistemas a través de SSH.
En el equipo víctima, verificaremos que el archivo se ha transferido correctamente.
Si el comando muestra el uid=0(root) gid=0(root), significa que el hook del paquete Snap se ejecutó como root. Esto confirma que tenemos la capacidad de ejecutar comandos con privilegios elevados.
En este caso, modificamos el comando que se ejecutará en el hook de instalación del paquete Snap para que establezca una reverse shell hacia nuestra máquina atacante en la IP 10.10.16.3 y el puerto 443.
El procedimiento sigue siendo el mismo: creamos la estructura del paquete, insertamos el script en meta/hooks/install, le damos permisos de ejecución y generamos el paquete con fpm.
Transferiremos este nuevo archivo Snap malicioso al equipo víctima.
Desde una terminal nueva, nos pondremos en escucha con nc para recibir la conexión.
Ejecutaremos el Snap malicioso como sudo, si todo funciona bien deberíamos recibir una Reverse Shell.
Verificamos que finalmente hemos logrado obtener acceso como root y podemos comprobar la flag root.txt.
Última actualización
¿Te fue útil?