Résultats (le détail, full board inclus, est ici)
:
Points: 47308
10e/2460 au classement général
dont 1765 ont scoré
1 flag utile
Mon objectif était top 10, c'est réussi!
J'ai clear tout le Forensic, Stéganographie, Programmation,
Rétro-ingénierie (lol, probablement sans en reverse un seul!),
tous les challenges Intro et Facile, et quasi tous les "Moyen"
(sauf "En construction", snif…)
Pour chaque challenge, vous trouverez une archive ZIP contenant les fichiers de l'énoncé,
mais aussi mes fichiers de résolutions. Si certains ZIP contiennent eux-même un XZ ou un 7Z,
c'est simplement pour réduire la taille des fichiers tout en respectant la convention
de n'avoir que des ressources en .zip dans mon archi web
Divers (6038 / 7038)
Bienvenue
|
50 |
Savez-vous copier/coller un texte? |
Discord
|
50 |
Avez-vous Discord et savez-vous en lire les règles? |
Pierre-papier-hallebarde
|
100 |
Exploiter un input() python… Pour ma part, en lisant le flag bit-à-bit |
Je suis une théière
|
899 |
Trouvez un domaine caché et résolvez un mini-jeu puis déchiffrez le flag en base64 |
Par câble
|
984 |
Transformer un signal numérique de tension en ASCII via Return-Zero Inverted |
Gogolfplex
|
990 |
Savoir que Python autorise les underscores '_' dans les int pour gagner un 'jeu' de golf |
Un utilisateur suspicieux 1/2
|
980 |
Exploiter une injection SQLite dans un bot Discord |
Un utilisateur suspicieux 2/2
|
986 |
Exploiter un shell restreint pour lire le flag via stderr et la commande '.' |
8vers10
|
999 |
Convertir un nombre décimal de la base 10 à la base 8 et le lire comme un sample d'audio |
Joutes, Arches, Vallées & Arbalètes
|
1000 |
Exploiter la faille Log4Shell pour accéder au flag contenu dans un champ private d'une classe Java |
Forensics (8606 / 8606)
Floppy
|
100 |
Récupérer des fichiers 'effacés' d'une image disque |
Pingpong
|
832 |
Analyser un dump 'pcap' pour découvrir que la longueur du champ DATA des requetes PING représente un caractère ASCII |
Un agent compromis 1/3
|
864 |
Repérer, dans un dump réseau, un script python (qui servira à exfiltrer des données plus tard) |
Un agent compromis 2/3
|
917 |
Analyser le dump réseau pour retrouver, dans un tunnel DNS, les fichiers exfiltrés par l'insider |
SOS Raid 1/2
|
960 |
Reconstruire une image disque d'un RAID5 et trouver le flag qu'elle contient |
Hackllebarde ransomware 1/4
|
968 |
Reconstituer un fichier PDF exfiltré en utilisant les flags TCP comme tunnel |
Un agent compromis 3/3
|
988 |
Patcher un fichier PDF corrompu pour pouvoir l'ouvrir et lire le flag qu'il contient |
Hackllebarde ransomware 2/4
|
997 |
Retrouver des informations dans un dump mémoire (ce que j'ai fait via grep, et non volatility) |
SOS Raid 2/2
|
980 |
Corriger le fichier PNG corrompu (0x0A, CRC32, chunck lengts) issu du challenge 1/2 pour y trouver le flag |
Hackllebarde ransomware 3/4
|
1000 |
Le flag est dans l'historique d'un fichier KDBX qu'on doit cracker (pass + fichier clef) lui-même dans un zip chiffré (pass) qu'on localisera dans l'image RAW d'une clef USB |
Retro-ingénierie (7917 / 7917)
Mot de passe?
|
100 |
Décompiler une class Java pour récupérer un mot de passe chiffré, et le déchiffrer (ce mot de passe étant le flag) |
Renverse la tour 1/2
|
866 |
Brute-forcer (même s'il y a plus subtil) les entrées de 3 étapes de chiffrement pour retrouver le mot de passe original |
Mise à jour
|
978 |
Brute-forcer un mot de passe caractère par caractère |
Renverse la tour 2/2
|
982 |
Trouver la logique liant deux constantes d'un fichier assembleur (qu'on peut reverse, mais ce n'est pas nécessaire) |
Pas de mise à jour
|
992 |
Décompiler un script Python pyc, le lire et reconstituer l'algorithme de chiffrement du mot de passe pour retrouver ledit mot de passe |
Frida-me
|
999 |
Brute-forcer (même s'il y a plus subtil)Forcer un PIN de 8 chiffres avec les dates du CTF et voir que, coup de bol, ça passe! |
Nos amis les portes
|
1000 |
Simuler un circuit logique dans logisim, le corriger, et brute-forcer son entrée avec xdotools et un compteur loggé dans un fichier |
Changement d'architecture 1/2
|
1000 |
Retrouver un mot de passe (en explorant les registres et la stack d'un interpréteur de 'VM') |
Fourchette
|
1000 |
Jouer sur des JUMP (ou sur les registres) pour amener l'exécution d'un programme jusqu'au déchiffrement du flag, et forcer ce déchiffrement à continuer jusqu'à être complet |
Stéganographie (4475 / 4475)
La plume à la main
|
100 |
Lire un acrostiche calligraphié |
PNG: Un logo obèse 1/4
|
358 |
Extraire les données excédentaires à la fin d'un fichier (une image PNG) |
Stéréographie
|
996 |
Transformer un signal audio stéréo en coordonnées (X;Y), les tracer, et lire le flag qui en résulte |
PNG: drôles de chimères 2/4
|
930 |
Extraire les données d'un chunck PNG custom (sTeG) pour constituer une nouvelle image PNG |
PNG: Toujours obèse 3/4
|
991 |
Décompresser un chunk IDAT pour récupérer une nouvelle image PNG avec le flag |
La méthode française
|
1000 |
Avoir de l'oreille (ou un spectrogramme) pour reconstituer la partition d'une musique et retrouver le chiffrement par substitution donnant le 'signal' à Hallebarde |
PNG: une histoire de filtres 4/4
|
100 |
Analyser les valeurs de filtre des lignes de pixel du IDAT d'un PNG pour y trouver un flag encodé en base 4 |
Web (2966 / 2966)
Fiché JS
|
100 |
Derouler l'exécution d'un JS pas à pas dans une apge web pour trouver un code PIN menant à une page cachée contenant le flag |
Le Braquage
|
874 |
Exploiter manuellement des SQL injections, y compris en bypassant le 'WAF', pour récupérer des informations constituant le flag |
Du gâteau
|
993 |
Forger un cookie permettant d'usurper le compte de l'administrateur, et bypasser la blacklist avec un padding |
En construction
|
999 |
Identifier que le HTTP status code 2xx sert à passer un message encodé en ASCII par blocs de 9 bits (et non 8 bits) |
Cryptanalyse (7043 / 10906)
Un RSA incassable?
|
100 |
Factoriser le N d'un RSA pour trouver phi(N) et en déduire d, la clef de déchiffrement |
Quatre Oracles
|
864 |
Ce challenge a été annulé à la suite d'un défaut d'implémentation. Il a été remplacé par les deux autres challenges d'oracles |
Un simple oracle 1/2
|
981 |
Utiliser un oracle RSA et lui envoyer C * 2**e pour qu'il le déchiffre, nous renvoie m*2 et en déduire m, le message original (le flag) |
Weak signature
|
994 |
Comprendre l'algorithme de signature d'un exécutable (très, très mauvais algorithme!) et en forger un à partir d'un exemple de démonstration |
Une lettre bien mystérieuse
|
998 |
Appliquer un déchiffrement par substitution prenant en compte les accents, ponctuations, etc |
Un simple oracle 2/2
|
991 |
Savoir que -1**d_premier mod N = N - 1 ce qui permet de déjouer l'oracle comme précédemment, même si celui-ci ne nous donne pas le module N |
Un point c'est tout
|
1000 |
Exploiter un point fixe non-trivial du RSA (un message qui, chiffré, est égale à lui-même) pour factoriser N = P*Q et retrouver d, qui permet de déchiffrer le flag |
La fonte des hashs
|
979 |
Brute-forcer un (mauvais!) algorithme de hashage pour retrouver le texte original |
Hackllebarde Ransomware 4/4
|
1000 |
Brute-forcer la seed d'un 'rand()' pour reproduire les mêmes valeurs de la suite aléatoire (non-crypto safe) et s'en servir pour déchiffrer un PDF donnant le flag |
Puisse Kocher être avec vous
|
1000 |
|
Enigma
|
999 |
Bruteforcer, de manière un peu futée (et veinarde) Enigma |
Dégâts collatéraux
|
1000 |
Exploiter un padding oracle pour trouver, bit à bit, la clef de déchiffrement |
OSINT (2438 / 3425)
Equipement désuet
|
100 |
Reconnaître un minitel |
Collaborateur suspect
|
927 |
Utiliser archives.org pour retrouver des informations dans une page archivée, qui a été modifiée depuis |
A l'aube d'un échange
|
549 |
Identifier les bâtiments-clef d'une photo pour retrouver l'endroit d'où elle a été prise via Google earth (et ses vues 3D) |
Nous sommes infiltrés!
|
862 |
Trouver le lien d'un site caché dans les anciens commits des sources github du site personnel d'un faux-membre de HackademINT, pour y trouver le flag |
Nom d'une nouvelle recrue!
|
987 |
Remonter les réseaux sociaux de quelqu'un jusqu'à son gmail, puis trouver sur Googlemaps un photo de son avion dans un avis de voyage et enfin, le vol associé et sa destination. |
Programmation (2851 / 2851)
Compression
|
100 |
Créer un script extrayant plusieurs fois de site une archive récursive |
Découpé
|
791 |
Réassembler des morceaux d'image pour donner un QRCode qu'on scannera |
128code128
|
977 |
Créer un programme qui déchiffrera un PNG contenant un code à barres (code128) écrit à l'envers et renverra la valeur déchiffrée (100x de suite) pour obtenir le flag |
Données corrompues
|
983 |
Décoder un base64 corrompu (ignorer les caractères en trop et remplacer le cyrillique par de l'ASCII), assembler les résultats et écouter le flag |
Exploitation de binaires (3061 / 5061)
Changement d'architecture 2/2
|
1000 |
|
Coffre-fort
|
1000 |
|
Trop facile
|
100 |
Débugger un exécutable pour trouver quelle entrée nous donnera un shell, et l'exploiter pour lire le flag |
Sans protection
|
977 |
Exploiter un binaire classique en prenant la main sur l'EIP pour rediriger l'exécution vers la stack (NX disabled) et obtenir un shell pour lire le flag |
Cache cache
|
989 |
Avancer l'heure de sa machine pour connaître le mot de passe 'aléatoire' d'accès au challenge à venir, puis utiliser ce mot de passe sur le serveur lorsque l'heure du serveur correspond à celle modifiée |
Patchwork
|
995 |
Exploiter un overflow via ret2libc pour obtenir un shell et lire le flag |
Web3 (2092 / 3092)
Pense-bête
|
100 |
Explorer la blockchain via Etherscan pour trouver le flag dans un transaction passée |
La guerre des contrats 1/2
|
995 |
Créer un contrat appelant un contrat pour entrer dans Hallebarde (ou utiliser un contrat déjà existant) |
Clef publique
|
997 |
Trouver la clef publique d'une adresse de la blockchain |
La guerre des contrats 2/2
|
1000 |
Lire une variable "privée" d'un contrat de la blockchain (je ne sais pas comment, donc cf ce write-up) |
Les sources des challenges sont données
dans le Github du 404CTF
et une copie est dispo ici
⇇ Write-up de CTFs