* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **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** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Le défi fournit un formulaire vulnérable à XSS sur la page [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php).\
Ce formulaire est chargé dans [https://challenge-0521.intigriti.io/](https://challenge-0521.intigriti.io) via un iframe.
Il a été découvert que le formulaire **insère l'entrée utilisateur à l'intérieur de la fonction JavaScript `eval`**. C'est généralement une mauvaise idée car cela peut conduire à une **exécution arbitraire de JavaScript**, et c'est un bon exemple.\
Cependant, avant d'insérer l'entrée utilisateur dans 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 utilisateur ne sera pas exécutée dans `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 existe un élément HTLM utilisant l'`id="e"`. Par conséquent, cet élément HtML est accessible depuis Javascript en utilisant simplement la variable `e`:\
Il est également important de savoir qu'en JS, vous pouvez **accéder aux attributs d'un objet 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 de caractères <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** (\`\`).\
De plus, il est possible de mettre en tant que chaîne de caractères du code javascript qui sera exécuté en utilisant `${...}` comme suit :
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 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 que tous les **caractères interdits sont des chaînes de caractères** à l'intérieur de l'exploit et que les **caractères non-chaînes de caractères 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 de caractères à 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 de caractères `"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 de caractères `"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 de caractères contenues** dans l'exploit :
Ensuite, vous devez **générer une page HTML** qui, lorsqu'elle est 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é** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **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** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.