Vulnhub - My Expense
Descripción
MyExpense is a deliberately vulnerable web application that allows you to train in detecting and exploiting different web vulnerabilities. Unlike a more traditional “challenge” application (which allows you to train on a single specific vulnerability), MyExpense contains a set of vulnerabilities you need to exploit to achieve the whole scenario.
Your credentials were: samuel:fzghn4lw
Resolution summary
- En la enumeración web se encuentra un panel
admin/admin.php
el cual da vulnerable para XSS - Interceptamos la cookie de sesión de varios usuarios
- En el panel de usuario administrador existe vulnerabilidad SQLi
Configuración máquina VMware
Configurar la máquina para que pueda ser detectada en la red local. Presionar e
y Agregar
Y presionar ctrl + x
Dirigirnos al directorio /etc/network
y editar el archivo interfaces
Ir al directorio /opt
y editar los archivos con la IP de la máquina
Cambiar en los 4 scripts
Reconocimiento
Se identifica la IP de la máquina a través de arp-scan
. Comando: sudo arp-scan -l
Se comprueba que la máquina está activa y se determina su sistema operativo a través del script implementado en bash whichSystem.sh
El sistema operativo es una Linux
Nmap
Se va a realizar un escaneo de todos los puertos abiertos en el protocolo TCP a través de nmap. Comando: sudo nmap -p- --open -sS -T4 -vvv -n -Pn 192.168.1.20 -oG allPorts
Puertos abiertos son: 80,36859,40275,53159,59793
Se procede a realizar un análisis de detección de servicios y la identificación de versiones utilizando los puertos abiertos encontrados.
Comando: nmap -sCV -p80,3306,33060 192.168.1.20 -oN targeted
Obteniendo:
Port 80 - HTTP (Apache)
Visitando el sitio web se obtiene:
Enumerando a través del script http-enum
de nmap
se obtiene la ruta:
Esto también se pudo haber obtenido a través de gobuster
:
Obteniendo:
Hay una opción que nos permite registrarnos:
Pero la opción Sign up!
se encuentra bloqueada, la podemos liberar modificando su fuente html
Borrando la opción disabled=””
Agregando el usuario
Dirigiéndonos nuevamente a la ruta admin/admin.php
, obteniendo:
Nuestro usuario ha sido creado, pero se encuentra inactivo.
La data que ingresamos está reflejada en el formulario por lo que se podría probar una vulnerabilidad del tipo XSS
Se procede agregar otro usuario pero esta vez con una inyección XSS
Obteniendo:
Se comprueba que es vulnerable para XSS
Exploitation via XSS
Podemos habilitar un servidor a través de python y tratar de cargar un archivo pwned.js
Primero vamos a tratar de comprobar si hay peticiones que se realicen al servidor
Obteniendo:
Se observa que hay interacción con el servidor creado
Vamos a crear un archivo pwned.js
con un código para tratar de obtener la cookie de sesión del usuario actual que este interactuando con el servidor:
Levantado el servidor web, se obtiene:
Para verificar en qué usuario podemos iniciar sesión, ingresamos la cookie de sesión correspondiente.
Cambiando cookie:
Obteniendo:
Se observa un mensaje donde nos dice que el usuario administrador solo puede estar autenticado en simultáneo una vez
Como verificamos que el usuario administrador
es el que está interactuando con el servidor nos podemos aprovechar y hacer que este active la cuenta del usuario slamotte
Inspeccionando el código fuente podemos saber el número de id
del usuario slamotte
Obteniendo:
A través de:
Obteniendo:
Se habrá activado la cuenta
En la descripción de la máquina habíamos obtenido las credenciales:
Your credentials were: slamotte/fzghn4lw
Ingresando en la cuenta:
Dirigiéndonos al apartado Expense Reports
y mandando el report. Obteniendo:
En la página principal tenemos un chat, donde se ven varios usuarios, lo que hace pensar que si creamos un archivo pwned.js
podremos robar sus cookies de sesión:
Levantando servidor, obteniendo:
Probando la cookies, podemos ingresar como otros usuarios:
Obteniendo la sesión del usuario Manon Riviere (mriviere)
Aceptando el ticket:
Obteniendo:
El manager
del usuario Manon Riviere (mriviere)
es Paul Baudouin
No disponemos la cookie del usuario Paul Baudouin
Dirigiéndonos al panel Rennes
el cual es vulnerable para SQLi
SQLi
Mientras nos encontramos con la sesión iniciada como el usuario mriviere
y nos dirigimos al panel de Rennes, procedemos a realizar pruebas de SQLi
.
Para explotar una SQLi:
Encontrar el número de columnas a través de la query
order by 100-- -
En este caso dispone de dos columnas
Listando todas las bases de datos
union select 1,schema_name from information_schema.schemata-- -
Listando base de datos actual en uso:
- Listando tablas
union select 1,table_name from information_schema.tables where table_schema='myexpense'-- -
- Listar columnas:
union select 1,column_name from information_schema.columns where table_schema='myexpense' and table_name='user'-- -
- Listando data:
union select 1,group_concat(username,0x3a,password) from user-- -
Obteniendo:
Utilizando en vim %s/,/\r/g
obteniendo:
Utilizando https://hashes.com/en/decrypt/hash para romper la contraseña del usuario pbaudovin
Obteniendo:
Ingresando al usuario Paul Badouin (pbaudouin)
pbaudouin:HackMe
Aceptando el pago:
Si nos dirigimos de nuevo al usuario: slamotte/fzghn4lw
Obteniendo la flag: