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
  • L'élément HTML <a>
  • L'élément HTML <iframe>
  • Autres éléments HTML
  1. Mes Articles
  2. 2022
  3. Septembre

Cross-Site Scripting (XSS) et schéma d'URI javascript

17 Septembre 2022

PrécédentSeptembreSuivantJuillet

Dernière mise à jour il y a 1 an

Dans cet article, nous allons examiner quelques exemples d'injections XSS possibles lorsque les données entrées par l'utilisateur sont réfléchies au sein d'un attribut HTML représentant une URL, tel que href, src, ou url.

L'accès à une URL par un navigateur est conditionné par son schéma (scheme). Le schéma est le premier niveau de la structure de nommage d'un URI. Plus concrètement, il s'agit de la partie la plus à gauche, avant le caractère ":". Il ne faut pas confondre le schéma et le protocole : le schéma représente la sémantique alors que le protocole est la manière de communiquer avec le service cible.

Le schéma d'URI fait partie des schémas communs qui fonctionne sur les navigateurs récents mais n'est pas un schéma . Ce schéma peut permettre d'exécuter du code Javascript comme ceci :

javascript:doSomething()

ou plusieurs instructions à la suite :

javascript:doSomething();doSomethingElse()

Il peut être intéressant, lors des tests d'intrusions ou des séances de bug bounty, de connaitre son utilisation afin de détecter des vulnérabilités de type Cross-Site Scripting. Il ne sera pas question dans cet article de lister tous les éléments HTML sensibles à cette attaque mais plutôt d'analyser les cas les plus fréquents.

L'élément HTML <a>

Le premier cas analysé est sans doute celui le plus rencontré lors des audits. Il s'agit de l'utilisation d'une donnée non fiable en tant que valeur de l'attribut href de la balise <a> :

<a href="{user input}">a link</a>

Si aucun assainissement est effectué, il est facile de s'échapper de l'attribut href afin d'écrire le code d'exploitation en ouvrant une balise <script>. Mais qu'en est t'il si un assainissement est présent empêchant cela par un filtrage des guillemets simples et/ou doubles ?

Dans l'exemple suivant, le développeur, qui a été sensibilisé aux vulnérabilités Web, pense avoir correctement assaini l'entrée utilisateur grâce à l'appel à la méthode htmlspecialchars() :

<!DOCTYPE html>
<html>
  <head lang="en">
    <meta charset="UTF-8">
  </head>
  <body>
    <?php
      $var = $_GET['userInput'];
      echo '<a href="' . htmlspecialchars($var, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, "UTF-8") . '">Lien</a>';
    ?>
  </body>
</html>

Bien qu'il ne soit plus possible d'effectuer l'injection du code malicieux en s'échappant de l'attribut HTML href :

l'utilisation du schéma Javascript peut tout de même permettre l'exécution de code lors du clique sur le lien par la victime :

L'élément HTML <iframe>

Il n'est pas rare qu'une application web permette à l'utilisateur de renseigner la source d'une <iframe> qui sera intégrée dans une des pages du site. L'attribut src de la balise <iframe> permet également l'exécution de code en utilisant le schéma Javascript. Soit le code suivant :

<!DOCTYPE html>
<html>
  <head lang="en">
    <meta charset="UTF-8">
  </head>
  <body>
    <?php
      $var = $_GET['userInput'];
      echo '<iframe src="' . $var . '">';
    ?>
  </body>
</html>

et l'exécution du code qui ne nécessite pas d'action utilisateur :

Autres éléments HTML

Il existe d'autres éléments HTML sensibles à cette attaque dont voici quelques exemples :

<svg><a xlink:href="javascript:alert(1)"><text x="20" y="20">XSS</text></a>
<object data="javascript:alert(1)"> // Seulement sur Firefox
<embed src="javascript:alert(1)"> // Seulement sur Firefox

Pour plus d'informations, la de PortSwigger mérite le coup d'œil.

Javascript
officiel
cheat sheet