404CTF 2022

404CTF 2022

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 (10 / 11)

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 (10 / 10)

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 (9 / 9)

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 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 (7 / 7)

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 (3 / 4)

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 (8 / 11)

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 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
Enigma 999 Bruteforcer, de manière un peu futée (et veinarde) Enigma ; les fichiers du challenge sont là
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 ?
Dégâts collatéraux 1000 Exploiter un padding oracle pour trouver, bit à bit, la clef de déchiffrement

OSINT (4 / 5)

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 Trouver quelqu'un sur Linkedin, remonter à son site via son CV puis à son compte gmail, trouver sur Googlemaps un photo de son avion dans un avis de voyage, retrouver les vols de cet avion, croiser avec le commentiare pour avoir la bonne date de vol et en déduire sa destination

Programmation (4 / 4)

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 (4 / 6)

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
Changement d'architecture 2/2 1000 ?
Coffre-fort 1000 ?

Web3 (3 / 4)

Je suis très surpris d'en avoir scoré autant…

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

Les sources des challenges sont données dans le Github du 404CTF et une copie est dispo ici