* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
El desafío proporciona un formulario vulnerable a XSS en la página [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php).\
Este formulario se carga en [https://challenge-0521.intigriti.io/](https://challenge-0521.intigriti.io) a través de un iframe.
Se descubrió que el formulario **insertará la entrada del usuario dentro de la función `eval` de JavaScript**. Esto suele ser una mala idea ya que puede llevar a una **ejecución arbitraria de JavaScript**, y este es un buen ejemplo.\
Sin embargo, antes de insertar la entrada del usuario dentro de la función `eval`, se comprueba con la expresión regular `/[a-df-z<>()!\\='"]/gi` por lo que si se encuentra alguno de esos caracteres, la entrada del usuario no se ejecutará dentro de `eval`.\
De todos modos, se encontró una forma de pasar por alto la protección de la expresión regular y ejecutar `alert(document.domain)` abusando de la peligrosa función `eval`.
Se descubrió que la letra `e` está permitida como entrada de usuario. También se descubrió que hay un elemento HTML que utiliza el `id="e"`. Por lo tanto, este elemento HTML es accesible desde Javascript simplemente usando la variable `e`:\
Además, es importante saber que en JS se pueden **acceder a los atributos de un objeto con un punto o con una cadena entre corchetes**. Por lo tanto, se puede acceder al atributo `domain` de un objeto `document` de cualquiera de las siguientes maneras:
### Llamando a una función sin paréntesis con código JS como cadena <a href="#calling-a-function-without-parenthesis-with-js-code-as-string" id="calling-a-function-without-parenthesis-with-js-code-as-string"></a>
Desde el objeto `document` es posible llamar a la función `write` para **escribir texto HTML arbitrario que el navegador ejecutará**.\
Sin embargo, como los caracteres `()` están **prohibidos**, no es posible llamar a la función usando ellos. De todas formas, es posible llamar a una función usando **backtips** (\`\`).\
Además, es posible poner como cadena código javascript que será ejecutado usando `${...}` como:
Por lo tanto, combinando el acceso al objeto `document` con esta técnica para ejecutar funciones sin paréntesis, es posible **ejecutar una alerta usando**:
Puedes probar este código en una consola de JavaScript dentro de la página [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php)
Sin embargo, todavía queda un problema. La mayoría de los caracteres del exploit están **prohibidos** ya que aparecen en la expresión regular `/[a-df-z<>()!\\='"]/gi`. Pero observa cómo todos los **caracteres prohibidos son cadenas** dentro del exploit y los **caracteres no de cadena en el exploit (e\[]\`${}) están permitidos**.\
Esto significa que si es posible **generar los caracteres prohibidos como cadenas a partir de los caracteres permitidos**, es posible generar el exploit.\
Para hacer esto, he generado un alfabeto similar a [JSFuck](http://www.jsfuck.com) para generar los caracteres necesarios (_este alfabeto es personalizado para este desafío_).\
Puedes **ver el alfabeto completo dentro del código del exploit** (que se puede encontrar en la siguiente subsección y en el archivo _exploit.txt_).
Por ejemplo, para **generar la letra `a`** es posible acceder a **`[[]/e+e][0][1]`** ya que `[[]/e+e][0]` genera la cadena `"NaN[object HTMLProgressElement]"` o para generar la **letra `f`** es posible acceder al **quinto carácter de `[[][[]]+e][0]`** ya que esa expresión genera la cadena `"undefined[object HTMLProgressElement]"`.\
Usando estos trucos y algunos más complejos, fue posible **generar todos los caracteres (letras y símbolos) de las cadenas contenidas** en el exploit:
Entonces, necesitas **generar una página HTML** que, al cargarse, va a **redirigir** a la víctima a la página del **desafío estableciendo el exploit en el formulario captcha**. El siguiente código se puede usar para este propósito (_nota que el exploit está codificado en URL_):
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.