Le script d'analytics que personne n'a ajouté : démasquer un skimmer de cartes

Investigation Numérique & Réponse à Incident Niveau 2/4 ~3 min 30 octobre 2026

Le défi

Un script vole les cartes des clients Fernhill. Décode l'adresse cachée dans son code. Trouve le domaine qui reçoit les cartes.

Ce que tu vas apprendre

  • Comprendre comment un skimmer Magecart exfiltre les données de carte
  • Lire du JavaScript obfusqué pour retrouver son ordre de décodage
  • Décoder à la suite des codes de caractères, une inversion et du base64
  • Nommer les contrôles qui bloquent l'injection de scripts tiers

Compétences testées

Désobfuscation JavaScriptRéponse à incidentEncodage

Prérequis

  • Ce qu'est le base64
  • Lire une ligne de JavaScript

Comment ça marche

Un skimmer web est du JavaScript injecté dans une page de paiement, généralement via un script tiers compromis ou un CMS piraté. Il lit les champs de la carte pendant que le client tape et les envoie à l'attaquant, souvent sous la forme new Image().src = url + data, une simple requête d'image qui ne laisse aucune trace dans les logs de la boutique.

Pour passer une revue rapide, l'adresse de collecte est obfusquée. Ici c'est du base64, inversé, puis stocké sous forme de codes de caractères. Le code de décodage est livré sur la même ligne : en le lisant de l'intérieur vers l'extérieur, on obtient la recette exacte, fromCharCode, reverse(), atob.

Erreurs fréquentes

  • Appuyer d'abord sur base64. Les nombres sont des codes de caractères : décode-les avec decimal avant tout le reste.
  • Sauter l'inversion. Une chaîne qui commence par == est du base64 écrit à l'envers : le padding se trouve à la fin.
  • Répondre google.com. Le domaine ne fait qu'imiter celui de Google : lis-le exactement.

Comment s'en protéger

  • Sers le paiement avec une Content-Security-Policy stricte : allowlist sur script-src, et limite connect-src et img-src pour que les données volées n'aient nulle part où aller.
  • Charge les scripts tiers avec Subresource Integrity (hashes integrity=).
  • Surveille les changements de scripts sur les pages de paiement (exigences 6.4.3 et 11.6.1 de PCI DSS 4.0).
  • Préfère les champs de paiement hébergés dans une iframe du prestataire de paiement, hors de portée des scripts de la page.

Solution complète

Les membres Pro et Max débloquent la solution complète étape par étape.

Passer Pro

Statistiques de la communauté

172 résolutions
82% taux de réussite
Malekith Premier sang

Hacks du jour associés

36 000+ Hackers Vrais labs Gratuit
Commencer Gratuitement ou résolvez le hack du jour, sans compte