🟠SunsetMidnight

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

Enumeración

Servicios abiertos

Como siempre, comenzamos enumerando los servicios abiertos que tiene la máquina objetivo.

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

Tres servicios abiertos, puertos 22,80,3306. El siguiente paso será el escaneo profundo de estos servicios.

nmap -p22,80,3306 -Pn -n -sVC -vvv 192.168.176.88

Servicios abiertos:

  • Puerto 22 -> SSH -> OpenSSH 7.9

  • Puerto 80 -> HTTP -> Apache httpd 2.4.38

  • Puerto 3306 -> MySQL -> MySQL 5.5.5-10.3.22-MariaDB

Enumeración Web

La máquina objetivo está ejecutando un servicio Web en el puerto 80. Vamos a ver su contenido en el navegador Web. Pero antes, como vimos en el escaneo de servicios inicial, la IP redirecciona a la URL http://sunset-midnight/.

Ahora vamos al navegador.

Se está ejecutando un WordPress así que vamos a utilizar la herramienta wp-scan para enumerar más información interesante.

wpscan --url http://sunset-midnight -e

Después de un momento, encuentra un nombre de usuario, "admin".

Enumeración MySQL

Ya que no pudimos encontrar mucha información interesante en el sitio web, empezamos a enumerar el servicio MySQL. Leímos el resultado de NMAP relacionado con MySQL y notamos que utilizaban el complemento mysql_native_password para la autenticación. Entonces, pensamos ¿por qué no intentar el usuario "root" con contraseñas comunes? Para esto, utilizamos la herramienta Hydra y rockyou.txt.

hydra -l root -P '/home/elhackeretico/rockyou.txt'  192.168.176.88 mysql -vv

Las credenciales para la base de datos MySQL son root:robert. Ahora es el momento de iniciar sesión en MySQL. Para hacerlo, nosotros utilizamos el siguiente comando:

mysql -h 192.168.176.88 -u root -p

Vamos a enumerar las bases de datos, para ello introducimos:

show databases;

Hemos seleccionado la base de datos de WordPress (wordpress_db) con el siguiente comando.

use wordpress_db;

Hemos enumerado todas las tablas con el siguiente comando:

show tables;

La tabla wp_users es la tabla más interesante aquí. Ya que WordPress guarda todos sus usuarios en esta tabla. Así que, utilizamos la consulta de selección para ver todos los datos de esta tabla.

Explotación

Modificando la contraseña de "admin"

Después de ejecutar la consulta, vemos nuevamente que el único usuario es "admin". Ahora es el momento de cambiar la contraseña de "admin". Primero ciframos nuestra contraseña con MD5 y luego actualizamos la contraseña de "admin". Utilizamos el siguiente comando para cifrar nuestra contraseña. La nueva contraseña es "securiters".

echo -n "securiters" | md5sum
update wp_users set user_pass = '939aa0a83acd95d311d2da1fe7ec8d4a' where ID = 1;

Ahora es el momento de iniciar sesión en el panel de administración de WordPress. Así que vamos a http://sunset-midnight/wp-admin/ e iniciamos sesión con el nombre de usuario "admin" y la contraseña "securiters".

Accediendo al sistema

Ahora necesitamos un shell inverso para ejecutar los comandos del sistema. Así que utilizamos el editor de temas para modificar el archivo PHP del tema. Añadimos el código de la reverse shell de Pentest Monkey.

Nota: La plantilla de WP que se encuentra activa, no permite cargar archivos modificados. Así que, vamos a seleccionar la plantilla "Twenty Nineteen".

Ahora vamos al archivo header.php con este enlace: http://sunset-midnight/wp-content/themes/twentynineteen/header.php

En nuestra máquina de ataque habilitamos un servidor nc en el puerto 1234.

  • Cambio de IP para la máquina objetivo (192.168.243.88)

Iniciamos el oyente y ejecutamos el archivo header.php modificado y ya tendremos conexión reversa con la máquina objetivo.

El siguiente paso es enumerar posibles vectores de elevación de privilegios y pivoting entre usuarios del sistema.

Vamos a comenzar enumerando el directorio /home. En su interior encontramos el directorio de un usuario "jose". Si enumeramos su contenido, encontramos la flag local.txt.

Pivotando a usuario "jose"

Pero no hay más interesante. Vamos a confirmar que "jose" es usuario del sistema.

Ya sabemos que "jose" es un usuario del sistema. Ahora necesitamos una contraseña.

Recordamos que la máquina objetivo está ejecutando un WordPress. Vamos a ver el contenido del directorio /var/www/html/wordpress.

wp-config.php ¿Interesante? Vamos a ver su contenido.

  • Cambio de IP para la máquina objetivo (192.168.163.88)

Tenemos las credenciales del usuario "jose" en el archivo de configuración de WordPress. ¿Reciclará las credenciales para conectarse a través de SSH? Vamos a comprobarlo.

Accedemos al sistema como usuario "jose".

Elevación de privilegios

Ejecutamos sudo -l, pero el usuario "jose" no tiene permisos dentro del sistema para hacerlo.

Vamos a enumerar binarios con el bit SUID activo.

find / -perm -u=s 2>/dev/null

Verificamos a qué archivos podemos acceder y nos llama la atención el binario "/usr/bin/status".

Utilizamos "strings" sobre él y observamos que internamente llama al binario "service" pero sin especificar la ruta de origen.

Esto nos permitiría crear un archivo "service" malicioso y modificar nuestro PATH para ejecutarlo.

export PATH=/tmp/:$PATH

El siguiente paso será crear un archivo en la carpeta "tmp" con el nombre "service", donde introduciremos la secuencia "/bin/sh", ejecutamos el binario "/usr/bin/status" y logramos obtener un shell como root.

echo "/bin/sh" > service
chmod +x service
/usr/bin/status

Solo queda buscar la flag proof.txt para terminar de resolver este CTF.

Last updated