VulNyx - Ober
- 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 - TCP 8080
En el puerto 8080 se encuentra activo un servidor Apache.
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.
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.
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 medianteregisterUndefinedFilterCallback()
y luego invocar funciones arbitrarias comopassthru()
a través degetFilter()
. -
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.
Visito la plantilla recién creada y, al previsualizarla, consigo ejecutar el comando id
con éxito.
Sabiendo que puedo ejecutar comandos, envío una reverse shell en Bash para obtener acceso remoto al servidor.
Recibo la reverse shell como el usuario www-data
, lo que me otorga acceso al sistema con privilegios limitados.
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
.
Intento iniciar sesión como root reutilizando la contraseña obtenida en database.php
y consigo acceso completo al sistema como usuario root.
Y así concluye el viaje en la máquina Ober.
Que el destino te guíe.
Saludos.