VulNyx - Ober

logo

  • OctoberCMS Authenticated RCE (CVE-2021-32649)
  • Hardcoded Database Credentials in Application Configuration Leading to Root System Access

Escaneo de puertos

❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 172.0.100.39

PORT     STATE SERVICE    REASON
22/tcp   open  ssh        syn-ack ttl 64
80/tcp   open  http       syn-ack ttl 64
8080/tcp open  http-proxy syn-ack ttl 64

Escaneo de servicios

❯ nmap -sVC -p 22,80,8080 172.0.100.39

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 27:21:9e:b5:39:63:e9:1f:2c:b2:6b:d3:3a:5f:31:7b (RSA)
|   256 bf:90:8a:a5:d7:e5:de:89:e6:1a:36:a1:93:40:18:57 (ECDSA)
|_  256 95:1f:32:95:78:08:50:45:cd:8c:7c:71:4a:d4:6c:1c (ED25519)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Homepage | My new websites
|_http-server-header: Apache/2.4.38 (Debian)
8080/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)

HTTP - TCP 80

El puerto 80 expone un servicio web.

http

HTTP - TCP 8080

En el puerto 8080 se encuentra activo un servidor Apache.

http8080

Se realiza fuerza bruta de rutas con ffuf, identificando entradas como /0, /backend e index.php.

❯ ffuf -t 100 -c -r -fc 404 -fs 277 -w /usr/share/seclists/Discovery/Web-Content/common.txt -u "http://172.0.100.39/FUZZ"

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://172.0.100.39/FUZZ
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/Web-Content/common.txt
 :: Follow redirects : true
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 100
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response status: 404
 :: Filter           : Response size: 277
________________________________________________

0                       [Status: 200, Size: 9895, Words: 3125, Lines: 224, Duration: 1438ms]
backend                 [Status: 200, Size: 6274, Words: 1683, Lines: 116, Duration: 2220ms]
index.php               [Status: 200, Size: 9895, Words: 3125, Lines: 224, Duration: 2490ms]

Al acceder a /backend, se presenta un panel de autenticación.

backend

Se obtiene acceso al panel de administración utilizando credenciales por defecto admin:admin. Una vez autenticado con privilegios de administrador, se identifica que el sistema en uso es el OctoberCMS, lo que abre la posibilidad de explotar vulnerabilidades específicas de esta plataforma.

dashboard

Investigando vulnerabilidades asociadas a OctoberCMS, se encuentra la siguiente referencia que documenta un vector de explotación aplicable: OctoberCMS.

  • Durante la investigación se identifica una vulnerabilidad conocida en OctoberCMS relacionada con la clase this.controller.getTwig(). Esta permite registrar un callback malicioso mediante registerUndefinedFilterCallback() y luego invocar funciones arbitrarias como passthru() a través de getFilter().

  • Esto permite ejecutar comandos del sistema directamente desde una plantilla Twig, eludiendo las restricciones impuestas por el sandbox del motor de plantillas. La ejecución de passthru('id') confirma la posibilidad de ejecución de código arbitrario.

Siguiendo los pasos descritos en el documento de explotación, accedo al editor de páginas dentro del CMS. Desde allí, inserto el payload directamente en una plantilla.

cms

Visito la plantilla recién creada y, al previsualizarla, consigo ejecutar el comando id con éxito.

idOK

Sabiendo que puedo ejecutar comandos, envío una reverse shell en Bash para obtener acceso remoto al servidor.

payload

Recibo la reverse shell como el usuario www-data, lo que me otorga acceso al sistema con privilegios limitados.

shellok

Realizo el tratamiento de la tty para mejorar la interacción con la shell y evitar problemas con los controles de terminal. Utilizo los siguientes comandos:

script /dev/null -c bash
CTRL+Z
stty raw -echo; fg
reset
xterm
export term=xterm-256color SHELL=bash
source /etc/skel/.bashrc
stty rows 48 cols 200

La salida del comando ls -la muestra el listado de archivos y directorios en el directorio actual (/var/www/html/octobercms).

www-data@ober:/var/www/html/octobercms$ ls -la
total 64
drwxr-xr-x 10 www-data www-data 4096 May  3 03:29 .
drwxr-xr-x  3 www-data www-data 4096 May  3 03:29 ..
-rw-r--r--  1 www-data www-data 1808 Mar 27  2020 .htaccess
-rw-r--r--  1 www-data www-data 1640 Mar 27  2020 artisan
drwxr-xr-x  2 www-data www-data 4096 Mar 27  2020 bootstrap
drwxr-xr-x  2 www-data www-data 4096 May  4 04:42 config
-rw-r--r--  1 www-data www-data 1173 Mar 27  2020 index.php
-rwxr-xr-x  1 www-data www-data 8077 Jan 25  2020 install.php
drwxr-xr-x  8 www-data www-data 4096 Mar 27  2020 install_files
drwxr-xr-x  5 www-data www-data 4096 Mar 27  2020 modules
drwxr-xr-x  6 www-data www-data 4096 Mar 27  2020 plugins
-rw-r--r--  1 www-data www-data  551 Mar 27  2020 server.php
drwxr-xr-x  7 www-data www-data 4096 Mar 27  2020 storage
drwxr-xr-x  4 www-data www-data 4096 Mar 27  2020 themes
drwxr-xr-x 31 www-data www-data 4096 Mar 27  2020 vendor

Al ingresar al directorio config y ejecutar grep password *, obtengo una credencial de root en el archivo database.php.

database

Intento iniciar sesión como root reutilizando la contraseña obtenida en database.php y consigo acceso completo al sistema como usuario root.

root

Y así concluye el viaje en la máquina Ober.

Que el destino te guíe.

Saludos.