# Level 6 (practice)

## Challenge #1

### Description

Appeler la fonction `politeSuperHero()` avec la chaîne de caractères `"v1hiyw5"` en argument :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIpRtjskqcLzTWMl25%2F-LsIpYEk1V0OD2FvL3xv%2F419ae6bae339c90bd9c3389d71848fb4.png?alt=media\&token=bf50c121-530f-44e0-956e-722163799966)

### Résolution

Un filtrage est effectué sur les caractères `"e"` et `"u"`. Cela va empêcher l'utilisation de l'encodage unicode. Un filtre est aussi présent sur le caractère `" " (espace)` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIqvhjRojaL_dMQDaU%2F-LsIrEBGUzHtQIusP3Wt%2Ff11f5a752fcfce688cb5c7301d21718a.png?alt=media\&token=a5ea0fe1-d1c2-4103-bf46-031314da8814)

Difficile de pouvoir appeler la fonction `politeSuperHero()` sans pouvoir utiliser l'encodage unicode. Je tente de contourner cela en passant par un label `<svg>` et en ajoutant un `"/"` pour contourner le filtrage du caractère `" " (espace)` . L'utilisation des HTML entities permet de gérer le cas du `"u"` et du `"e"` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIqvhjRojaL_dMQDaU%2F-LsIs1iP8vTveFI_gLK3%2F8b95268af04727ee2ea6cb1aa4c2355b.png?alt=media\&token=c314ad24-55ed-428c-9302-f314d19b23dc)

## Challenge #2

### Description

Appeler la fonction `prettyHuman()` avec la chaîne de caractères `"xdheb3s"` en argument mais cette fois sur l'attribut `src` dans une balise `<img />` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIsE4coS8puJAYdC-Q%2F-LsIsvjn71GA6GTiTqPE%2F3fe692e3c721273cf700f79efb1d9b95.png?alt=media\&token=988167bd-c00a-4011-b3d1-f9918cf806d8)

### Résolution

Je tente d'utiliser l'attribut `onerror` de la balise image afin d'exécuter la fonction javascript mais un mécanisme semble filtrer les occurrences `"on"` ainsi que le caractère `"d"` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsItyu5bt2mmuQfsrsl%2F-LsIuBslZmYAf-8rOjH0%2F02504d3bb79c4d0a9d75e253ef04139a.png?alt=media\&token=397b8b35-dce0-4a64-948f-74b88bd134cf)

Je réussis à contourner le filtre sur l'occurrence `"on"` en le répétant une seconde fois. Le caractère `"d"` présent dans la chaîne de caractères passée en paramètre peut, par exemple, être représenté par son équivalent en base64 :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIuSE75CQuSmpgoILC%2F-LsIv30xj7kZfpF5ikwQ%2Fee9887a0682224aaa55b8f0674181cf9.png?alt=media\&token=5b162ba0-86d2-4a08-a315-bf4492c34513)

## Challenge #3

### Description

Appeler la fonction `politeFunction()` avec la chaîne de caractères `"237chw3"` en argument mais cette fois sur l'attribut `href` dans une balise `<a>` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIvR_WQq9kloRn0pF4%2F-LsIvV-6KkaHMceCXI3G%2F01ff527592f876043c7fe6d4cba07ac9.png?alt=media\&token=fecbae14-faa2-4136-96db-d1b8395e17bc)

### Résolution

Etant donné que l'injection est présente au sein d'un attribut `href` j'utilise la syntaxe `javascript:code`. Le filtre en place supprime le caractère `"t"` ainsi que le caractère spécial `"'" (simple quote)` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIwe61AJkW3ypMytrv%2F-LsIxL_IduOwZitXlUKq%2Fc50b7f5529ea8cc50dbb558e73077ebd.png?alt=media\&token=1958526b-a859-4629-9f75-b10dc910431d)

Il est possible de contourner le premier filtre en utilisant la majuscule, soit `"T"`. Pour les occurrences du caractère `"t"` présents dans le nom de la fonction il est possible d'utiliser l'encodage unicode, puis les HTML entities pour les deux `"'" (simple quote)` entourant la chaîne de caractère en argument :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsIzguYYpzDRdv3fleM%2F-LsIzjvHMV2UoSwVePE3%2F33aea2ee5da784bd3dca025acb4e2d45.png?alt=media\&token=b6fabd0d-d5ca-46ff-ab1d-a9b1d75a17e4)

## Challenge #4

### Description

Appeler la fonction `tallSuperHero()` avec la chaîne de caractères `"rj7tfb1"` en argument mais cette fois sur la valeur de la propriété `background-color` du sélecteur `banner` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJDXtmwVuzu51dGulP%2F-LsJDa-ZC3aqxjl9gKpH%2F69f66f865b50058f5767b89f9fcb1c4d.png?alt=media\&token=044ecf9c-ac39-4787-9874-a6a9afde59f0)

### Résolution

L'objectif est ici de sortir de la balise `<style></style>` et d'injecter du javascript. Le mot clé `"script"` semble être filtré ici. De même pour le caractère `"f"` nécessaire dans la chaîne de caractères devant être passée en argument :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJEB0d2UB9H4aB1BfL%2F-LsJERUv7DCmaKnmIzSN%2F6c8463db047d5dd21d0daab656e8cae6.png?alt=media\&token=284dd384-9560-453e-b323-032d02a7f67c)

Je parviens à contourner le filtre sur la chaîne `"script"` en mélangeant les majuscule et les minuscules. Pour le caractère `"f"`, j'utilise l'encodage base64 car le caractère `"0"` est en fait également filtré, ce qui empêche l'utilisation de l'encodage unicode :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJFXPDRx0eRp5HCdtn%2F-LsJG4zDpR5SKWciQSlY%2Fc0e473bc849ebfa3b0a4045238fdc5ad.png?alt=media\&token=c62441e8-efdf-4bdf-8cea-632a8f36497b)

## Challenge #5

### Description

Appeler la fonction `kindHuman()` avec la chaîne de caractères `"lxu2w3b"` en argument mais cette fois sur l'attribut `value` du tag `<input/>` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJL9V-qMx1BgOaVs_o%2F-LsJLC6Fxfhe0UMuYAtG%2F1be38c35cf6535fd9da7f894b702ebf7.png?alt=media\&token=8f676ada-d97a-4b6b-a262-9be2fbf9b3bb)

### Résolution

Celui-ci est relativement facile. J'utilise l'attribut `onmouseover` et tente de déclencher la payload via la vue DOM. Le seul caractère filtré est le `"H"` présent dans le nom de la fonction :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJMXw3MgXySqgjDzef%2F-LsJN0uteBB4PPF4QxSl%2F5cdd5979489fb409aab554a5bd77ba9b.png?alt=media\&token=72e22ee5-76ab-4c63-9b08-fc006c9de64a)

L'encodage unicode suffit à contourner cette limitation :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJMXw3MgXySqgjDzef%2F-LsJNFt_xqcofGH8ccvp%2Fc07963d0ddae101e1d8fdcb8cbba3ffe.png?alt=media\&token=d54c7738-69cc-43e7-8d54-fd404c8ca0aa)

## Challenge #6

### Description

Appeler la fonction `niceSuperHero()` avec la chaîne de caractères `"7451rf5p"` en argument au sein de la valeur d'une variable Javascript :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJRvOeNN0iu03Qa-o9%2F-LsJRxyATqy1d739gA9m%2Fe5d02b4f5bb2966d60db62c99ed36582.png?alt=media\&token=a6185191-9f26-41dc-ab45-af8377f7e0cb)

### Résolution

Une première tentative m'indique un filtrage sur les caractères `""" (double quotes)`, `")"` et `"5"`:

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJSUVNzfT90yLFgXMy%2F-LsJSheceJWLa6HXWxBP%2Fa809973c4c0e094754be373c52e21c0e.png?alt=media\&token=fd1e72ec-7c4b-445e-96e8-6c8c0a66b2f8)

Pour réussir ce challenge, j'ai mis fin à la balise `<script>` et démarrer une nouvelle balise `<svg>` me permettant d'utiliser les HTML entities pour le caractère `")"`. Pas de réelle difficulté sur le contournement du filtre du caractère `""" (double quotes)`, il me suffit simplement d'utiliser la version simple `"'" (simple quote)` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJSUVNzfT90yLFgXMy%2F-LsJTygPhqspJ9VddIdl%2F98b8c2f05325a1e9b8def94ec6b3bb85.png?alt=media\&token=a944fa5e-10ab-479f-a7a6-d231a18f0efd)

## Challenge #7

### Description

Appeler la fonction `tallSuperHero()` avec la chaîne de caractères `"gt31knj"` en argument mais cette fois en valeur d'une donnée JSON stockée dans la variable `window.appData` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJNVbWWpPr1gD-12q9%2F-LsJNZFqQuXL6nPCiM1j%2F62d22163e2fb9bf6bd54b1ddc8482091.png?alt=media\&token=11ec8aec-909e-4967-b9df-d25ebfb7a4fc)

### Résolution

Il me faut ici sortir de la payload JSON. Le plus simple est sans doute de fermer correctement le JSON puis la balise `<script>` et d'ouvrir de nouvelles balises. Cela fonctionne quasiment du premier coup puisque seul le caractère `"g"` présent dans la chaîne passée en argument est filtré :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJON5P-5xL14HYWmRA%2F-LsJOaYkfH39Xc5VfIRy%2F74990954317ba72fd1b93e613e7eaf39.png?alt=media\&token=7dfe98f4-03b6-4ee8-8bfb-ab3162ab53dc)

Après un nouvel essai, il n'est pas possible d'utiliser l'encodage unicode car le caractère `"0"` est aussi filtré. L'encodage base64 vient à ma rescousse, mais en fait non ... Les simples quotes `"'"` sont également filtrées. Je décide alors de tenter ma change avec la fonction `String.toLowerCase` et d'utiliser le `"G"` au lieu du `"g"` :

![](https://1502624390-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXA-aPG-dBFXBTzP1DC%2F-LsJPc3-oaTN19mio0Fe%2F-LsJPpqv9xSx754ve9k3%2F927f18816277f2aed331142c0687e057.png?alt=media\&token=94e34ba1-981c-42b6-9c47-da4ada41f6a1)
