Aller au contenu principal

CTF « Le QR code du bistrot »

Samedi midi. Trois chevalets de table du Bistrot du Port portent un QR code « Menu et paiement ». Une cliente se plaint d'avoir été redirigée vers une page de paiement étrange. Le gérant vous demande de vérifier les trois codes avant de les remplacer.

info

Ce défi est un CTF (Capture The Flag) : il n'y a pas d'étapes guidées. Vous cherchez, vous trouvez un flag (un mot caché), puis vous le saisissez dans l'application Joligo, dans l'activité « Le QR code du bistrot ». Le bistrot, ses chevalets et les adresses sont fictifs (les domaines en .example n'existent pas).

attention

Ce défi se pratique uniquement sur les images fournies. Ne scannez jamais avec votre téléphone un QR code dont vous ne connaissez pas la source, et ne collez jamais le faux QR code d'un autre établissement : c'est une fraude.

Petite vérification​

Avant de commencer, vérifiez si vous savez encore réaliser ces 3 actions très simples, sur la séance consacrée au QR code piégé :

  1. dans ~/tp-qrcode, lire le contenu de qr_1.png sans ouvrir son lien, avec zbarimg -q --raw qr_1.png
  2. demander le type de l'image avec file qr_1.png
  3. fabriquer un QR code d'essai avec qrencode -o essai.png 'https://exemple.example', puis le relire avec zbarimg
📌 Réponse attendue

Votre mission​

Vous êtes l'administrateur système du bistrot. Les trois images chevalet_1.png, chevalet_2.png et chevalet_3.png sont la copie des QR codes collés sur les tables.

Lisez leur contenu sans l'ouvrir, repérez celui qui piège les clients, et relevez le code de référence que transporte son adresse.

Le matériel​

Chaque participant reçoit un flag personnel : inutile de comparer avec vos voisins, le vôtre ne marcherait pas chez eux. Dans l'application Joligo, ouvrez l'onglet Profil et relevez votre code personnel (8 caractères, carte « Mon code personnel (défis CTF) »).

Dans votre VM Debian (remplacez a1b2c3d4 par votre code) :

sudo apt install zbar-tools qrencode openssl
mkdir -p ~/ctf-qr
cd ~/ctf-qr
CODE=a1b2c3d4
attention

Le script ci-dessous fabrique les trois images de chevalets (c'est le travail du « méchant » de l'histoire). Ne le décodez pas pour le lire : ce serait lire la solution avant d'avoir cherché. Analysez les images produites.

base64 -d <<'EOF' | bash -s -- "$CODE"
Q09ERT0iJDEiCmlmIFsgLXogIiRDT0RFIiBdOyB0aGVuIGVjaG8gIlVzYWdlIDogYmFzaCAtcyAt
LSBWT1RSRV9DT0RFIiA+JjI7IGV4aXQgMTsgZmkKS0VZPSI3YzgxYWVhZjdkOWY1ZjJlOTI5MyIK
RkxBRz0kKHByaW50ZiAlcyAiJENPREUiIHwgb3BlbnNzbCBkZ3N0IC1zaGEyNTYgLWhtYWMgIiRL
RVkiIC1yIHwgY3V0IC1jMS0xMikKcXJlbmNvZGUgLW8gY2hldmFsZXRfMS5wbmcgJ2h0dHBzOi8v
d3d3LmJpc3Ryb3QtZHUtcG9ydC5leGFtcGxlL21lbnUnCnFyZW5jb2RlIC1vIGNoZXZhbGV0XzIu
cG5nICJodHRwczovL2Jpc3Ryb3QtZHUtcDBydC1wYWllbWVudC5leGFtcGxlL3BheWVyP3RhYmxl
PTcmcmVmPSR7RkxBR30iCnFyZW5jb2RlIC1vIGNoZXZhbGV0XzMucG5nICdodHRwczovL2JpdC5l
eGFtcGxlL1RrNHg5JwplY2hvICJGaWNoaWVycyBjcsOpw6lzIDogY2hldmFsZXRfMS5wbmcsIGNo
ZXZhbGV0XzIucG5nIGV0IGNoZXZhbGV0XzMucG5nIgo=
EOF

Vous obtenez trois images : chevalet_1.png, chevalet_2.png et chevalet_3.png.

Comment jouer​

  1. Lisez chaque QR code avec zbarimg -q --raw, puis étudiez l'adresse obtenue comme à la séance sur le QR code piégé : domaine, orthographe, paramètres. N'ouvrez aucune adresse.
  2. Répondez aux questions de l'activité Joligo « Le QR code du bistrot » : certaines portent sur le flag, d'autres sur la démarche et les bons réflexes.
  3. Le flag est la valeur du paramètre ref de l'adresse du chevalet piégé : il contient 12 caractères (lettres a à f et chiffres). Dans Joligo, vous saisirez seulement ces 12 caractères.
Besoin d'un coup de pouce ?

Cette démarche a été vue dans la séance Le QR code piégé. Le contexte de l'appareil personnel vient de la séance Smartphone et BYOD. Le domaine d'une adresse est la partie entre https:// et le premier /. Comparez-le lettre par lettre au vrai domaine du bistrot. Un mauvais flag fait perdre une vie dans Joligo : réfléchissez avant de tenter au hasard, comme pour un vrai mot de passe.