* Travaillez-vous dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter****🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Le défi propose un formulaire vulnérable à XSS sur la page [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php).\
Il a été découvert que le formulaire **insère l'entrée de l'utilisateur à l'intérieur de la fonction JavaScript `eval`**. C'est généralement une mauvaise idée car cela peut entraîner une **exécution JavaScript arbitraire**, et c'est un bon exemple.\
Cependant, avant d'insérer l'entrée de l'utilisateur à l'intérieur de la fonction `eval`, elle est vérifiée avec l'expression régulière `/[a-df-z<>()!\\='"]/gi` donc si l'un de ces caractères est trouvé, l'entrée de l'utilisateur ne sera pas exécutée à l'intérieur de `eval`.\
Quoi qu'il en soit, il a été trouvé un moyen de contourner la protection de l'expression régulière et d'exécuter `alert(document.domain)` en abusant de la fonction `eval` dangereuse.
Il a été découvert que la lettre `e` est autorisée en tant qu'entrée utilisateur. Il a également été découvert qu'il y a un élément HTML utilisant l'`id="e"`. Par conséquent, cet élément HTML est accessible depuis JavaScript en utilisant simplement la variable `e` :\
De plus, il est important de savoir qu'en JS vous pouvez **accéder aux attributs d'objets avec un point ou avec une chaîne entre crochets**. Ainsi, vous pouvez accéder à l'attribut `domain` d'un objet `document` de l'une des manières suivantes :
### Appeler une fonction sans parenthèses avec du code JS en tant que chaîne <a href="#calling-a-function-without-parenthesis-with-js-code-as-string" id="calling-a-function-without-parenthesis-with-js-code-as-string"></a>
À partir de l'objet `document`, il est possible d'appeler la fonction `write` pour **écrire du texte HTML arbitraire que le navigateur exécutera**.\
Cependant, comme les caractères `()` sont **interdits**, il n'est pas possible d'appeler la fonction en les utilisant. Quoi qu'il en soit, il est possible d'appeler une fonction en utilisant des **backtips** (\`\`).\
Par conséquent, en combinant l'accès à l'objet `document` avec cette technique pour exécuter des fonctions sans parenthèses, il est possible d'**exécuter une alerte en utilisant**:
Vous pouvez tester ce code dans une console JavaScript à l'intérieur de la page [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php)
Cependant, il reste encore un problème. La plupart des caractères de l'exploit sont **interdits** car ils apparaissent dans l'expression régulière `/[a-df-z<>()!\\='"]/gi`. Mais notez comment tous les **caractères interdits sont des chaînes** à l'intérieur de l'exploit et que les **caractères non-chaînes dans l'exploit (e\[]\`${}) sont autorisés**.\
Cela signifie que s'il est possible de **générer les caractères interdits en tant que chaînes à partir des caractères autorisés**, il est possible de générer l'exploit.\
Pour ce faire, j'ai généré un alphabet similaire à [JSFuck](http://www.jsfuck.com) pour générer les caractères nécessaires (_cet alphabet est personnalisé pour ce défi_).\
Vous pouvez **voir l'alphabet complet à l'intérieur du code de l'exploit** (qui peut être trouvé dans la prochaine sous-section et dans le fichier _exploit.txt_).
Par exemple, pour **générer la lettre `a`**, il est possible d'accéder à **`[[]/e+e][0][1]`** car `[[]/e+e][0]` génère la chaîne `"NaN[object HTMLProgressElement]"` ou pour générer la **lettre `f`**, il est possible d'accéder au **5ème caractère de `[[][[]]+e][0]`** car cette expression génère la chaîne `"undefined[object HTMLProgressElement]"`.\
En utilisant ces astuces et d'autres plus complexes, il a été possible de **générer tous les caractères (lettres et symboles) des chaînes contenues** dans l'exploit:
Ensuite, vous devez **générer une page HTML** qui, une fois chargée, va **rediriger** la victime vers la page du **challenge** en **définissant l'exploit dans le formulaire captcha**. Le code suivant peut être utilisé à cette fin (_notez que l'exploit est encodé en URL_):
* Travaillez-vous dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter****🐦**[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.