Academy
https://www.hackthebox.eu/home/machines/profile/297
Resumen: Maquina Linux con tres puertos abiertos 22:ssh, 80:http y 33060:?mysql, en el servicio http existe un login para administrador y para usuarios, también podemos registrarnos como un usuario, se modificarán los datos que se envían para registrarnos como administrador. Al registrarnos como administrador y acceder al virtual host que aparece en el ítem, podemos ver que se trata de un framework de código abierto llamado Laravel, el cual está mostrando información sensible como el api key, es posible realizar ejecución de código remoto. Posteriormente para escalar privilegios se necesita indagar en los directorios /var/www/html/ para obtener la contraseña de cry0l1t3, el usuario cry0l1t3 pertenece al grupo adm por lo tanto podemos leer logs, ahí se encuentra la contraseña de mrb3n encodeada en hexadecimal. Para finalizar con el usuario mrb3n listamos los privilegios delegados con sudo -l y nos aprovechamos de composer.

Enumeración
Lo primero que hago es realizar un escaneo con nmap para saber los puertos abiertos en el rango del 1-65536.
Bandera
Descripción
-p-
Escaneo a los 65536 puertos
--open
Reporta solo los puertos con estado "open".
-T5
Exploracion a velocidades insanas (lo hago porque es un entorno de pruebas).
-v
Muestra más información sobre el sondeo que se está realizando.
-oG allPorts
Exporta los resultados en un formato Grepable con el nombre de allPorts.
Posteriormente verificamos las versiones de los servicios y haremos uso de scripts por default.
Bandera
Descripción
-p21,22,80
Escaneo a los puertos 21, 22 y 33060.
-sC
Escanea con los scripts por defecto.
-sV
Intenta determinar la versión del servicio que se ejecuta en el puerto.
-oN
Exporta los resultados en un formato nmap.
Añadimos el virtual host a /etc/hosts.
Utilizando dirsearch hicimos fuzzing para determinar archivos y directorios disponibles.

Antes de empezar, lo que recomiendo es actuar como un usuario normal, registrarse y empezar a interactuar en la página, por si vemos algo interesante.
Podemos ver que existe un login para usuarios y administrador, lo primero que hice fue probar algunas sentencias SQL para saber si era vulnerable a ataques SQL injection pero no obtuve resultado.

Después pase a registrarme y a analizar la petición para observar los datos que se envían, podemos iniciar sesión como usuario, pero no hay información relevante. Ahora que sabemos que se envían cuatro datos podemos modificar la petición.

El dato roleid se puede modificar, el roleid 0 es un usuario normal, mientras que el roleid 1 es administrador. Ahora solo enviamos la petición con curl y podemos iniciar sesión como administrador.

El último ítem indica que se debe solucionar un problema en dev-staging-01, para comprobar el contenido debemos de agregar el host virtual al archivo /etc/hosts para tener comunicación.

Punto de acceso
Accedemos a la página web y mirando hacia abajo, hay información interesante como la siguiente:
Ahora haciendo una búsqueda simple en google como “laravel api key exploit”, es posible el exploit y algunas PoC.
Primero clonamos el repositorio.
2. Ejecutamos el exploit, vamos a necesitar la url, api key e indicar el parámetro de shell interactiva.
3. Una vez estando en el modo interactivo no es posible establecer una shell totalmente interactiva. Por ejemplo, no es posible abrir una pseudo consola con python3 -c “import pty;pty.spawn(‘/bin/bash’)” por lo que intente realizar una reverse shell con python3 y ponerme en escuchó con netcat.

4. Primero nos ponemos en escucha desde nuestra máquina.
5. Ejecutamos la reverse shell desde el servidor.
Ahora podemos obtener una shell totalmente interactiva. Aquí un ejemplo (agregar enlace).
Después de un rato enumerando el sistema, recordé que laravel está instalado y tiene dos versiones, empecé filtrando con palabras claves como “PASSWORD”, “PASSWD” o “USERNAME”. En el siguiente directorio:

Movimiento lateral
Usuario cry0l1t3
Normalmente utilizo diff para ver las diferencias de archivos. En este caso a las dos carpetas con versiones diferentes.
Tenemos una contraseña, probé la contraseña con los usuarios con id mayor a 1000.

La contraseña pertenece al usuario cry0l1t3.

Visualizando los grupos del usuario:
Usuario mrb3n
El usuario pertenece al grupo adm, el grupo de monitoreo de tareas del sistema. Permite utilizar xconsole y leer archivos de /var/log sin tener que utilizar los comandos su o sudo. Usualmente para administradores. El nombre del grupo proviene de que /var/log inicialmente fue /usr/adm y posteriormente /var/adm. Nos damos una idea sobre lo que tenemos que hacer, debemos ir a /var/log para encontrar algun password.
Visualizamos los archivos del grupo adm.
En el siguiente enlace podemos ver que en la carpeta /var/log/audit, con cierta configuración se almacena contraseñas https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/, de la siguiente manera podemos filtrar cuales son los comandos que se ejecutan con su y sudo.
Los datos están codificados en hexadecimal.
Escalada de privilegios
La misma contraseña nos dice de que usuarios mrb3n. Al seguir enumerando el sistema, Verificando los permisos con sudo -l podemos ver que podemos hacer uso de composer https://gtfobins.github.io/gtfobins/composer/#sudo.

Last updated