Cybersecurity
  • Mon Blog
    • 🏠Home
    • 📦Archives
      • 2024
      • 2023
      • 2022
    • 📂Catégories
    • 📧A propos de moi
  • Mes projets
    • Livres / publications
      • Sécurité des applications web - Stratégies offensives et défensives
    • MyExpense
    • XSS Exploitation Tool
  • Mes Articles
    • 2025
      • Mars
        • Comment les requêtes préparées (prepared statement) protègent-elles contre les injections SQL ?
      • Janvier
        • XSS Exploitation Tool v0.7.0
    • 2024
      • Décembre
        • XSS Exploitation Tool v0.6.0
      • Septembre
        • MyExpense v1.4
      • Aout
        • XSS Exploitation Tool v0.5.0
        • Exploitation des injections SQL au sein de la clause ORDER BY
      • Juin
        • Parution de mon livre, Sécurité des applications web - Stratégies offensives et défensives
      • Mai
        • Dompurify 3.0.10 bypass - Confusion nodeName and CDATA
        • Dompurify 3.0.9 bypass - Node type confusion
      • Avril
        • Bypass de validation d'URL et embedded credentials côté front
      • Mars
        • MyExpense v1.3
    • 2023
      • Mai
        • MyExpense v1.2
      • Mars
        • MyExpense v1.1
        • Fonctionnement de l'entête X-Content-Type-Options - Contournement de CSP
      • Février
        • Fonctionnement de l'entête HTTP Strict Transport Security Header (HSTS)
    • 2022
      • Décembre
        • Les injections CSS - Règle @import
        • Les injections CSS - Scroll-to-Text Fragment
      • Novembre
        • Les injections CSS - Attribute Selector
        • Les injections CSS - Règle @font-face et descripteur unicode
      • Octobre
        • XSS Exploitation Tool v0.4.0
      • Septembre
        • Cross-Site Scripting (XSS) et schéma d'URI javascript
      • Juillet
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Windows)
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Debian)
        • Est-il possible de contourner la fonction PHP htmlspecialchars() ?
  • Common Vulnerabilities and Exposures (CVE)
    • 2024
      • CVE-2024-29415
    • 2023
      • CVE-2023-42282
    • 2022
      • CVE-2022-33910
      • CVE-2022-32444
      • CVE-2022-32442
    • 2020
      • CVE-2020-26311
  • Livres
    • 2023
      • Attacking and Exploiting Modern Web Applications
      • DevSecOps - Développez et administrez vos services en toute sécurité
    • 2022
      • Hacking APIs - Breaking Web Application Programming Interfaces
    • 2018
      • Practical Web Penetration Testing
      • Web Hacking 101: How to Make Money Hacking Ethically
  • Walkthroughs
    • Capture The Flag
      • Hack.lu CTF 2019
        • Nucular Power Plant
      • TAMUctf 2019
        • 1337 Secur1ty
        • Bird Box Challenge
        • Science!
    • Deliberately Vulnerable
      • CORS vulnerable Lab
        • Application Trust Arbritrary Origin
        • Application has bad "regex" Implementation to check Trusted Origin
        • Application Trust "null" Origin
      • Damn Vulnerable Web Application (DVWA)
        • Brute Force
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Command Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSRF
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Inclusion
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Upload
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Insecure CAPTCHA
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection (Blind)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Weak Session IDs
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (DOM)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Reflected)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Stored)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSP Bypass
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Javascript
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
      • Unescape() room
        • Level 1 (practice)
        • Level 2 (practice)
        • Level 3 (practice)
        • Level 4 (practice)
        • Level 5 (practice)
        • Level 6 (practice)
        • Level 7 (practice)
        • Level 8 (practice)
        • Level 9 (practice)
        • Level 10 (practice)
      • VulnHub
        • GoatseLinux: 1
        • Hackademic: RTB1
        • Hackademic: RTB2
        • Holynix: v1
        • Holynix: v2
        • Kioptrix: Level 1 (#1)
        • Kioptrix: Level 1.1 (#2)
        • Kioptrix: Level 1.2 (#3)
        • Kioptrix: Level 1.3 (#4)
        • LAMPSecurity: CTF4
        • LAMPSecurity: CTF5
        • LAMPSecurity: CTF6
        • Metasploitable: 1
        • pWnOS 1.0
        • pWnOS 2.0 (Pre-Release)
      • XSS Vulnerability Challenges
        • xss1
        • xss2
        • xss3
        • xss4
        • xss5
        • xxs6
        • xss7
        • xss8
Propulsé par GitBook
Sur cette page
  • Challenge #1
  • Description
  • Résolution
  • Challenge #2
  • Description
  • Résolution
  • Challenge #3
  • Description
  • Résolution
  • Challenge #4
  • Description
  • Résolution
  1. Walkthroughs
  2. Deliberately Vulnerable
  3. Unescape() room

Level 10 (practice)

PrécédentLevel 9 (practice)SuivantVulnHub

Dernière mise à jour il y a 2 ans

Challenge #1

Description

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

Résolution

Dans ce challenge, en plus de l'inversion de la chaîne, un filtrage est effectué sur le caractère "'" (simple quote) ainsi que sur le caractère "Y" :

Une fois la chaîne inversée, je m’aperçois qu'un filtrage est également réalisé sur l'occurrence "on"mais il suffit de répéter le motif pour contourner la mécanique. J'utilise les HTML entities afin de pouvoir entourer de guillemets simples la chaîne à passer en paramètre. Puis pour terminer, j'utilise l'encodage unicode afin de gérer le cas du "Y" :

Challenge #2

Description

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

Résolution

Le but ici est de fermer la balise <style> puis d'injecter le script. Une des deux parenthèses est filtrée ici ainsi que le caractère "d". Reste à voir si aucun autre filtre se déclenche lorsque je vais inverser la payload :

Aucun autre filtre ne s'active une fois la chaîne inversée. Par contre je dois insérer une balise <svg> afin de pouvoir remplacer la parenthèse par son équivalent HTML entities :

Le caractère "d" est filtré mais également le caractère "0". Manque de chance, son équivalent unicode est \u0046 et son équivelent HTML entities est &#100; ...

Pour contourner cela, j'utilise en plus la fonction eval() ainsi qu'un toLowerCase() sur le "D" :

blue;}</style><svg><script>eval('kin'+'D'.toLowerCase(&#41;+'Function("JmRBD96amXGY"&#41;'&#41;</script>

Challenge #3

Description

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

Résolution

Avec un peu de chance je ne vais rencontrer aucune difficulté sur ce challenge là car seul le caractère "E" semble être filtré :

En effet, je remplace le caractère par son équivalent unicode et je valide cet autre challenge :

Challenge #4

Description

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

Résolution

Pas mal de filtres pour ce dernier challenge et j'avoue l'avoir passé avec de la chance et surtout, avec beaucoup de tentatives. Le mot clé "script" est filtré mais contournable en utilisant un contournement bien connu comme "scrscriptipt" auquel j'ajoute des majuscules pour passer quelques autres filtres.

L'occurrence "on" , présent dans le nom de la fonction, est filtré, mais il est possible de contourner cette limitation en utilisant l'occurrence "oonn" . De plus, dans un premier temps j'ai du ajouter des caractères aléatoires au niveau du paramètre de la fonction pour récupérer une sortie lisible :

A noter ici que dans la chaîne passée en argument, les caractères "a", "b" et "\" sont filtrés. Cela m'a permis de modifier la longueur de la chaîne sans en modifier son contenu et ainsi, de récupérer une sortie lisible afin de valider ce dernier challenge :

La payload dépassant du champ <input> voici sa version complète et non inversée :

🙂