Enumeración
Para comenzar voy a realizar un escaneo de puertos con nmap:
Los puertos que se encuentran abiertos son el 80 (http) y el 22 (ssh).
Voy a ingresar en la página web para ver de que se trata:
Me encuentro con una tienda online que utiliza Magento, la cual es una plataforma de ecommerce de código abierto desarrollada en PHP y utilizada para la creación de tiendas en línea.
Me llamó la atención que al ingresar en el home de la página la url me devolvía: “swagshop.htb/index.php/”. Esa barra después de index.php me hizo pensar que podía llegar a contener algo dentro, con lo cuál realicé una búsqueda de directorios a esa dirección:
Entre todos los directorios hay uno que es admin, el cual se utiliza para loguearse como administrador:
Intenté buscar la versión de Magento utilizada pero no tuve suerte, lo único que hallé fue la fecha del copyright en el pie de la página, la cual data del 2014. Esto me hace pensar que la versión utilizada debería ser del 2014 o anterior.
Lo que voy a hacer es buscar algun exploit para Magento con la herramienta ‘searchsploit’:
De todos los exploits hay solo 2 que me llamaron la atención, el “CE < 1.9.0.1” y el “eCommerce – Remote Code Execution”, ambos contienen código de Python, el primero permite ejecutar código remoto luego de la autenticación y el segundo permite autenticarme.
Voy a probar una autenticación usando el exploit “eCommerce – Remote Code Execution”:
Al código lo tuve que limpiar un poco antes de utilizarlo, me quedaría algo así:
Y ahora a ejecutarlo:
¡Y funcionó! Me creo un usuario y contraseña de nombre “forme”. Así que ahora me voy a loguear con esas credenciales.
Explotación
Al ingresar como administrador puedo ver en el pie de página que la version de Magento es 1.9.0.0.
Tras una amplia investigación y varias pruebas y errores encontré una posible solución. Hay una configuración incorrecta dentro del admin de Magento, la cuál me permite obtener acceso al sistema.
Para explotar este error me voy a dirigir a la página de administrador de productos y le voy a dar al botón edit para ingresar en la página de edición de producto.
Dentro de la página de edit me dirijo a donde dice “custom Options” (en el cuadro del costado) y luego selecciono “Add New Option” y agrego la nueva opción que me va a permitir cargar un archivo .php:
Entonces ahora cuando quiera comprar ese producto me va a permitir ingresar el archivo .php que va a contener la reverseshell.
Lo que voy a hacer ahora es cargar el archivo con el exploit. Yo ya tengo el exploit para realizar la reverse Shell, pero ustedes lo pueden descargar desde el siguiente repositorio:
https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php
Ahora voy a abrir un puerto de escucha con netcat y listo, ya estoy en condiciones de realizar la explotación.
Al ingresar en la página del producto veo que ya se encuentra la opción para cargar un archivo:
Selecciono el archivo y agrego el producto al carrito, con eso ya debería quedar guardado el archivo.
Ahora tengo que hallar la ruta del archivo para luego poder abrirlo. Para eso voy a realizar un nuevo análisis de directorios y así tratar de encontrar la ruta en la que se almacenan los archivos:
Veo que se encuentra el directorio media, el cual es muy posible que contenga el archivo y así fue, el archivo estaba dentro del directorio media, mas precisamente en la siguiente ruta: http://swagshop.htb/media/custom_options/quote/p/h/.
Con solo hacer click ya obtengo la reverse Shell:
Si me dirijo al home veo que hay un usuario con el nombre “haris”, el cuál posee la bandera user.
Escalada de Privilegios
Ahora voy a ingresar el comando sudo –l para ver que permisos tenemos:
Por lo visto tengo permisos de root para ejecutar el editor de texto en cualquier archivo del directorio var/www/html.
Así que lo que puedo hacer es ingresar un comando bash dentro de cualquier archivo y así ganar acceso:
Al darle enter me aparecen un monton de líneas, simplemente presiono la tecla escape, dos puntos (:) e ingreso !bash.
Una vez obtengo root simplemente resta navegar hasta encontrar la bandera.
Espero que este tutorial te haya ayudado!