En este post vamos a ver paso a paso cómo resolver el reto DC-1: 1 del tipo captura la bandera (CTF) de Vulnhub.
DC-1:1 es un servicio web Drupal vulnerable construido a propósito con el objetivo de ganar experiencia en el mundo de las pruebas de penetración (pentesting).
Este reto fue diseñado para ser un desafío de nivel principiante, pero su facilidad dependerá de tus habilidades y conocimientos.
Para completar con éxito este desafío, necesitarás conocimientos de Linux, familiaridad con la línea de comandos de Linux y experiencia con herramientas básicas de prueba de penetración, como las herramientas que se pueden encontrar en Kali Linux o el sistema operativo Parrot Security.
Hay varias formas de obtener root, sin embargo, se han incluido algunas banderas (flags) que contienen pistas para principiantes.
Hay cinco banderas en total, pero el objetivo final es encontrar y leer la bandera en el directorio /root
. Ni siquiera necesitas ser root para hacer esto, sin embargo, necesitarás privilegios de root.
Como se puede observar en la captura anterior, se trata de un gestor de contenidos Drupal, así que con la herramienta WhatWeb incorporada en Kali Linux, podemos averiguar la versión del CMS.
Parece que se trata de un Drupal 7, así que con la herramienta SearchSploit vamos a buscar exploits disponibles que puedan vulnerar esta versión del CMS.
Elegimos un exploit de Drupalgeddon que permite realizar una inyección SQL a Drupal 7.
Este exploit permite crear una cuenta de administrador en Drupal 7 mediante un ataque de inyección SQL. Una vez lanzado el exploit nos confirma los credenciales creados.
Ahora podemos entrar al panel de administrador de Drupal, y comprobar que los credenciales que se han creado nos permiten el acceso como admin.
Ahora vamos a utilizar la herramienta msfconsole (Metasploit Framework Console) para intentar atacar la vulnerabilidad de drupalgeddon y acceder al servidor con una sesión meterpreter
Finalmente, hemos podido vulnerar nuestro objetivo.
Si ejecutamos el comando ls
podemos ver que en la carpeta /var/www/
(carpeta del servidor donde se encuentra ubicado Drupal), encontramos la primera bandera en el fichero flag1.txt
Si vemos el contenido del fichero flag1.txt
, vemos una pista sobre cómo conseguir la siguiente bandera.
El texto (en español) «Todo buen CMS necesita un archivo de configuración, y tú también.» hace referencia a que necesitamos buscar algún fichero de configuración. Normalmente estos ficheros se llaman settings, así que podemos hacer una búsqueda con el comando find para ver si encontramos algo.
Para poder ejecutar un bash del sistema, primero ejecutamos el comando shell
de meterpreter, y cuando se ha abierto un channel (canal) ejecutamos el comando python -c 'import pty; pty.spawn("/bin/bash")'
para obtener un prompt del sistema.
Si vemos el contenido del fichero settings.php que hemos encontrado, podemos observar que se encuentra la segunda bandera (flag2).
Esta bandera nos dice que no necesitamos hacer un ataque de fuerza bruta para poder acceder, así que si vemos el mismo fichero un poco más abajo, vemos los credenciales de la base de datos de Drupal.
Con estos credenciales podremos acceder a la base de datos del sistema.
Haciendo una consulta SQL a la tabla users
, podremos obtener los credenciales del usuario admin de Drupal. En nuestro caso también se muestran otros usuarios creados por el equipo red team de Init0 (initcero) durante la resolución de este reto .
Si accedemos al panel de administrador con el usuario creado mediante el exploit de drupalgeddon de inyección SQL o descifrando el hash de la contraseña del usuario admin con herramientas como hashcat, podemos ir al menú Content de Drupal y podemos encontrar la tercera bandera (flag3).
Esta bandera nos hace referencia a que puedes obtener permisos especiales con el comando find
, aunque también hace referencia a la opción -exec
y al directorio /etc/shadow
.
Si vemos los permisos del comando find
, podemos observar que este comando tiene el setuid activado (bit con «s») que indica que este comando se ejecutará como root.
Si buscamos el contenido de /etc/shadow
con el comando getent passwd
, vemos que existe la ruta /home/flag4
donde podremos encontrar la cuarta bandera (flag4).
Con el comando find
y la opción -exec
podemos ejecutar una bash (sh) como root aprovechando la opción setuid mencionada anteriormente.
Si mostramos el contenido del fichero /home/flag4/flag4.txt
veremos la siguiente pista para encontrar la última bandera.
La cuarta bandera (flag4) nos indica de forma sutil que podemos utilizar el comando find
para encontrar la última bandera.
Ahora que somos root, podemos listar el contenido de la carpeta /root
y ver que contiene la bandera final del reto.
¡Y esto es todo!
Este reto ha sido resuelto por Init0 (initcero) una empresa de ciberseguridad en Canarias (España)