Introduction

Infíltrate en el nuevo portal de reclutamiento. Mapea el sitio, busca debilidades y gana acceso no autorizado.
Recruit acaba de lanzar su nuevo portal de reclutamiento, permitiendo a HR gestionar aplicaciones de candidatos y a los administradores ver las decisiones de contratación. Mientras que la plataforma parece funcional, la dirección sospecha que la seguridad puede haber sido sobreseida durante el desarrollo. Tu tarea consiste en evaluar la aplicación como un atacante real, mapeando su estructura, ganando acceso inicial, escalando tu acceso y finalmente explotando vulnerabilidades.
¿Puedes ganar acceso inicial, escalar tu acceso y finalmente iniciar sesión como administrador?
Getting the Flags
Reconocimiento Inicial
Comenzamos escaneando los puertos abiertos.

Ahora vamos a escanear dichos puertos más en profundidad.

Vamos a ver qué directorios tiene.
recruit.thm ├── assets [200 636B] ├── mail [200 453B] │ └── mail.log [200 2KB] ├── phpmyadmin [200 3KB] │ ├── doc │ │ └── html │ │ ├── config.html [200 44KB] │ │ ├── faq.html [200 48KB] │ │ ├── index.html [200 3KB] │ │ ├── search.html [200 1KB] │ │ ├── settings.html [200 2KB] │ │ └── user.html [200 2KB] │ ├── js │ │ ├── common.js [200 5KB] │ │ ├── config.js [200 7KB] │ │ ├── export.js [200 6KB] │ │ └── sql.js [200 9KB] │ ├── favicon.ico [200 22KB] │ └── index.php [200 3KB] ├── api.php [200 1019B] ├── file.php [200 20B] ├── footer.php [200 210B] ├── header.php [200 256B] └── sitemap.xml [200 471B]
Hay algunos archivos que parecen interesantes, como api.php. Vamos a ver cómo es la página web.
Profundización
Vamos a ver qué hay por la web e investigar sobre los archivos encontrados.

Explotación
LFI
Vamos a intentarlo.

Como dice que sólo se permiten archivos locales vamos a probar a leer config.php, ya que sabemos que es una aplicación PHP.

Se ve que no existe. Vamos a intentar LFI mediante filtros PHP:

Parece que esto sí que ha funcionado. Vamos a intentar iniciar sesión.

Escalada de Privilegios
SQL Injection
En la página de dashboard podemos ver un parámetro de búsqueda de empleados, por lo que vamos a probar lo que probaríamos al ver cualquier caja de búsqueda que aparentemente mira en una base de datos, emplear una SQLi.

La prueba resulta exitosa. Hay indicios de SQLi. Vamos a intentar obtener información. Vamos a intentar usar sqlmap para ello. Para poder usarlo, como la sesión se maneja con una cookie, necesitamos incluirla o no funcionará por fallo al acceder a /dashboard.php.
sqlmap -u "http://recruit.thm/dashboard.php?search=1" --cookie="PHPSESSID=[COOKIE]; security=low" --dbs

Vamos a intentar extraer información de la base recruit_db:
sqlmap -u "http://recruit.thm/dashboard.php?search=1" --cookie="PHPSESSID=[COOKIE]; security=low" -D recruit_db --tables

Ahora vamos a listar los datos de los usuarios.
sqlmap -u "http://recruit.thm/dashboard.php?search=1" --cookie="PHPSESSID=[COOKIE]; security=low" -D recruit_db -T users --dump

Con estas credenciales vamos a intentar acceder.

Y con esto conseguimos la flag de admin.
