Le détournement de clics : Pas seulement pour les clics

version tl;dr

Vous pouvez inciter les utilisateurs à « taper » des données dans le cadre d’une attaque par détournement de clics.
Démonstration sur YouTube : https://www.youtube.com/watch?v=VIEZ1aByFvU

PoC GitHub Repo : https://github.com/hoodoer/dragInputClickjacking

Détails :

J’ai récemment eu une mission dans laquelle j’ai pu insérer dans un iframe des parties sensibles d’une application qui me permettait de modifier des données financières. Cependant, la modification des données pour permettre le « vol » de fonds nécessitait que l’utilisateur administrateur saisisse des chiffres, et pas seulement qu’il clique sur des boutons dans l’application.

Par le passé, je n’avais utilisé que des attaques de type clickjacking, qui utilisaient les clics de souris pour effectuer des actions malveillantes, impliquant généralement une séquence de clics de souris (un exemple simple de preuve de concept ici).

En creusant un peu, j’ai trouvé des références sur Hacktricks qui indiquent qu’il est possible d’effectuer des saisies « typées » dans le cadre d’une attaque par détournement de clics, ce que je n’avais jamais réalisé.

Bien que l’utilisateur puisse taper directement dans les champs de saisie cachés du site iframé, il est peu probable qu’il soit convaincu de le faire.

Cependant, un jeu qui demande à l’utilisateur de faire glisser une image sur une cible pourrait constituer un défi d’ingénierie sociale plus réaliste.

Dans un élément HTML pouvant être déplacé, vous pouvez déclencher une action consistant à saisir un texte arbitraire dans un champ de formulaire, même si ce champ est caché dans le site iframé. Le navigateur considère qu’il s’agit d’une action initiée par l’utilisateur et autorise les entrées interdomaines.

Le code est assez simple :

Le code transfert de données vous permet de définir ce qui est « tapé » lorsque l’utilisateur dépose l’image. Il n’est pas nécessaire qu’il s’agisse d’une image, mais c’est certainement un élément pratique à faire glisser par les utilisateurs dans le cadre de la démonstration du concept.

J’ai essayé de placer cet élément glissant dans une iframe séparée que je pourrais superposer au site caché/iframé ; cependant, cela n’a pas semblé fonctionner, quelle que soit l’ordre en z que j’ai utilisé. Apparemment, le glissement d’une iframe à une autre ne fonctionne pas pour cette technique, vous aurez donc des restrictions sur l’endroit où vous pouvez placer l’élément glissant dans votre attaque.

Dans l’exemple de code fourni, je le place simplement au-dessus de l’application iframée et je le rends visible dans l’étape de l’attaque où j’ai besoin qu’ils « tapent » une valeur d’entrée.

Dans le code de démonstration, j’ai une page simple qui affiche un formulaire d' »ajustement de salaire » après avoir cliqué sur un bouton. Sur ce formulaire, un montant arbitraire peut être saisi et soumis pour soi-disant ajuster le salaire d’un employé.

Nous ajouterons 10 000 000 de dollars pour faire bonne mesure dans la démo. Après tout, les fêtes de fin d’année approchent à grands pas.

Tout d’abord, nous allons cloner la base de données et démarrer un serveur HTTP local :

git clone https://github.com/hoodoer/dragInputClickjacking
cd dragInputClickjacking
python3 -m http.server 80

Si vous ouvrez http://127.0.0.1/clickjackPoc.html sur votre machine locale, la preuve de concept se chargera. Si vous cliquez sur le bouton « Start Game », le jeu démarre et vous pouvez « jouer ». Si vous ne cliquez sur rien après le bouton de démarrage, le jeu se déroulera, mais aucun clickjacking ne sera effectué. Vous pouvez rafraîchir la page pour redémarrer le « jeu ».

Figure 1 – Preuve de concept du détournement de clics

Vous pouvez voir l’application iframed partiellement cachée. Dans une véritable attaque de clickjacking, elle serait complètement cachée. Vous pouvez ajuster l’opacité de l’application iframed dans la partie supérieure de la fenêtre clickjackPoc.html . Par défaut, il est fixé à 30 %.

Une fois que l’utilisateur a été incité à cliquer sur le premier bouton, le formulaire d’ajustement des chèques de paie est maintenant « affiché » dans l’application iframed.

Figure 2 – Formulaire d’ajustement des chèques de paie

L’utilisateur doit « taper » 10 000 000 $ dans ce champ. C’est à ce moment-là que l’étape suivante du jeu demande à l’utilisateur de faire glisser rapidement un élément sur la cible.

Figure 3 – Logo de glissement

Lorsque l’utilisateur fait glisser notre image sur le champ de saisie et qu’il la relâche, la valeur 10000000 est « tapée » dans ce champ.

Figure 4 – Champ de saisie rempli

Lors de la dernière étape, l’utilisateur clique sur le bouton de soumission et nous pouvons voir que cette valeur a été soumise avec succès au serveur d’application.

Figure 5 – Ajustement de la paie soumis

Voilà une démonstration rapide de l’utilisation d’éléments glissants pour « taper » des entrées dans une attaque de clickjacking. Le mérite en revient à Hacktricks qui en a eu l’idée.

Si vous avez des problèmes ou des idées sur la façon dont cela peut être amélioré, mes DM sont toujours ouverts. @hoodoer.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *