1. Fase de Enumeración y Reconocimiento
Con la herramienta NetDiscover realizaré un reconocimiento de la red para identificar la máquina objetivo.
La dirección IP de nuestra máquina objetivo es 192.168.50.47. ahora con la herramienta Nmap realizaré un escaneo de puertos.
La máquina objetivo tiene dos puestos abiertos el puerto 22 y 80 ejecutando los servicios SSH y Http respectivamente.
Ahora realizaré un escaneo para averiguar la versión de los servicios que se están ejecutando en esos puertos (22, 80).

Por último, ejecutaré un escaneo con los scripts por defecto de Nmap, para obtener más información.
Obtuvimos información importante al parecer se está ejecutando Wordpress (versión 5.8.1) en el puerto 80 http. Entonces analizaré la página web en busca de alguna información interesante.
Al ingresar a la página web desde el navegador esta carga la siguiente información.
Como se puede observar en la imagen al cargar la página web este hace solicitudes a un dominio redrocks.win. Por lo tanto, agregar este dominio a mi archivo hosts para enrutar la página web.
Al agregar el dominio a mi archivo hosts y visitar nuevamente la página esta cambia de aspecto.
Como se observa en la página web hay un post llamado "Hello Blue!" ingresaré a él y revisaré su contenido y código fuente a ver si encuentro algo interesante.
Hay un comentario que nos da una pista por donde seguir "Still Looking For It? Maybe you should ask Mr. Miessler for help, not that it matters, you won't be able to read anything with it anyway". (En español, ¿Sigues buscándolo? Tal vez deberías pedirle ayuda al Sr. Miessler, no es que importe, de todos modos, no podrás leer nada con él.).
Recuerdo que el apellido Miessler lo asocio al repsositorio SecLists de Daniel Miessler como se observa en la siguiente imagen.
Otra cosa, la fase "Looking For It" si extraemos la primera letra de cada palabra obtenemos la siguiente sigla. LFI que, a su vez, es un directorio dentro del repositorio SecLists.
Un poco de análisis sabes que el servidor está ejecutando WordPress este CMS está codificado en el lenguaje PHP, además, descubrimos una pista sobre SecLists, por lo que se puedo inferir que se debe ocupar alguna de estas listas para hacer descubrimientos de directorios.
Ahora utilizaré la herramienta wpscan que es un escáner para el CMS WordPress.
La herramienta entregó información útil nos entregó algunos módulos de Metasploit para escanear la posibilidad de alguna vulnerabilidades de WordPress y a su vez nos entregó un nombre de usuario.
Ahora utilizaré la herramienta dirsearch del repositorio SecLists la lista CommonBackdoors-PHP.fuzz.txt, para enumerar directorios.
La herramienta descubrió un directorrio /NetworkFileManagerPHP.php, también la herramienta nos indica un código de estado 500. El código de estado 500 significa error interno del servidor indica que el servidor encontró alguna condición inesperada que impidió procesar la solicitud. Por ejemplo, que en la url esperaba un parámetro a procesar y este no fue proporcionado. Tomando el ejemplo anterior, haré una prueba de parámetro a través de la técnica de Fuzzing.
Con la herramienta Wfuzz realizaré fuzzing de la siguiente manera.
La url http://redrocks.win/NetworkFileManagerPHP.php recibe como parámetro la palabra key, es decir, la url quedaría de la siguiente manera http://redrocks.win/NetworkFileManagerPHP.php?key=xxx.
Como se observa en la imagen al probar con la url http://redrocks.win/NetworkFileManagerPHP.php?key=test el servidor responde con un código de estado 200 "OK" y no con un código de estado 500.
Ahora averiguaré si el parámetro /NetworkFileManagerPHP.php?key=test, es vulnerable a inyección de código.
2. Fase de Análisis de Vulnerabilidades.
Como mencioné en el apartado anterior haré una prueba de inyección de código, para saber si es vulnerable el servidor a este tipo de vulnerabilidad.
Al parecer el servidor no es vulnerable a la inyección de código, si bien es cierto que procesa la solicitud y devuelve un código de estado 200, este no muestra información. Por lo tanto, haré otra prueba intentare averiguar si es vulnerable a Path Traversal o recorrido de directorio en español.
El servidor es vulnerable a Path Traversal. Al ingresar como valor al parámetro key la siguiente ruta del servidor /etc/passwd, este procesa la petición y nos devuelve el contenido del directorio /etc/passwd.
Ahora utilizaré la funcionalidad de PHP: php:// según la documentación dice "PHP proporciona una serie de flujos de E/S diversos que permiten el acceso a los propios flujos de entrada y salida de PHP...".
Lo que haré es intentar de codificar en base64 el archivo NetworkFileManagerPHP.php, para luego decodificarlo y ver su código fuente.
Como se observa en la imagen hay un comentario codificado en base64. Lo decodificaré veamos si es algo interesante.
El mensaje dice en español "¡Esa contraseña por sí sola no te ayudará! Hashcat dice que las reglas son reglas".
Me tomo un poco de tiempo entender esta pista, así que considerando que se trata de un WordPress busque en Internet documentación de instalación y configuración de WordPress.
Me encontré con la siguiente documentación del sitio oficial de WordPress. En la imagen se describe que el archivo wp-config.php es uno de los archivos más importante en la instalación de WordPress. En este archivo entre otras cosas se encuentra la configuración de base de datos de CMS, Por lo tanto, allí encontrare un usuario y contraseña de la conexión a base de datos.
Lo que haré ahora será descargar el contenido del archivo wp-config.php con la misma técnica utilizada para descargar el contenido del archivo NetworkFileManagerPHP.php.
Ahora revisaré el archivo para encontrar credenciales de la base de datos.
Tenemos el usuario John y la contraseña R3v_m4lwh3r3_k1nG!! y Lo más probable que la password este hasheada y según la pista se no indica que utilicemos la herramienta Hashcat. Antes de utilizar Hashcat debo identificar el tipo de hash utilizado para aplicar la regla en Hashcat. Como se muestra en la imagen ninguna de las herramientas utilizada para identificar el hash encontró el tipo de hash, pero la documentación de WordPress indica que "Las contraseñas de las cuentas de usuario de WordPress se cifran con salt y hash según el framework portátil de cifrado de contraseñas de PHP..." Recordemos la pista sobre Hashcat revisando la documentación de Hashcat sobre la utilización reglas muestra un ejemplo como se observa en la imagen.
Utilizaré la regla rules/best64.rule en y la opción stdout para obtener un listado de posibles de posibles claves candidatas.
Luego, con la herramienta Hydra realizar fuerza bruta basada en diccionario contra el servicio SSH.
Encontramos la contraseña r3v_m4lwh3r3_k1nG!! para el usuario john para establecer una conexión SSH.
Me di cuenta que cuando demoraba en ejecutar algún comando en la sesión ssh este se desconectaba automáticamente y la contraseña cambia aleatoriamente. Por lo tanto, para obtener la nueva contraseña debo realizar fuerza bruta nuevamente con el mismo usuario(john) y el mismo diccionario(pass_candidatas.txt).
Una vez obtenida la conexión SSH ejecute el siguiente comando sudo -l este comando listará y enumerará los privilegios del usuario que invoca el comando.
El usuario john puede ejecutar el archivo /usr/bin/time, por lo tanto, como este archivo pertenece al usuario ippsec. debemos ejecutar lo de la siguiente manera sudo -u ippsec /usr/bin/bash /bin/bash.
Ahora somos usuario ippsec ahora ejecutare el siguiente comando.
Hay un directorio interesante /var/wordpress/.git lo listaré con el comando ls -la para listar los archivos y propietarios.El usuario ippsec tiene acceso al archivo .git, ahora listaré los archivos del directorio .git .
El nombre del archivo es sugerente y volque el contenido del archivo. El código es sugerente imprime el en pantalla la frase "Sale de aquí blue!" en español. Recuerdan haberlo visto. En resumen, el archivo supersecretfileuc.c es un archivo que cada cierto tiempo se compila y y luego se ejecuta para mostrar el mensaje. Además, el propietario es root lo que, significa que si modificamos el código fuente, por ejemplo, un código de shell reversa, este se compilará y ejecutará dándonos acceso como root.
3. Fase de explotación Vulnerabilidades.
Ahora explicaré los pasos para explotar la vulnerabilidad.
- una vez teniendo una conexión SSH establecida ejecutar el siguiente comando: sudo -u ippsec /usr/bin/time /bin/bash
- Una vez ejecutado el comando anterior ejecutar el siguiente comando: cd /var/www/wordpress/.git
- Eliminar los dos archivos rev, supersecretfileuc.c
- Una vez eliminados los dos archivos anteriormente mencionados, ejecutar el siguiente comando: cat supersecretfileuc.c, se abrirá el editor de texto vi (recordar que los comando vi cat están intercambiados).
- Copiar el siguiente código fuente escrito en lenguaje C. Este código no es de mi propiedad comparto el link de repositorio de GitHub.
- Modifique las variables #define REMOTE_ADDR "xxx.xxx.xxx" por su dirección IP de la maquina atacante y #define REMOTE_PORT xxx por el puerto de escucha de la máquina atacante.
- Guarde los cambios y cierre el editor vi.
- En la máquina atacante ejecute el siguiente comendo nc -lnvp [puerto de escucha configurado en el archivo supersecretfileuc.c], en mi caso ocupe el puerto 4444, por lo tanto, el comando en mi caso quedaría de la siguiente manera: sudo nc -lnvp 4444.
- Por último. queda esperar hasta que la máquina víctima compile el archivo supersecretfileuc.c y lo ejecute.

Luego de un tiempo se estable la conexión con nuestra maquina atacante.
Ejecuto el comando id de Linux para comprobar si somo usuario root. Por último, nos queda encontrar el flag de nuestro CTF.
Happy Hack!!!
Comentarios
Publicar un comentario