Post

picoCTF — Récapitulatif & Progression

Ma progression sur picoCTF : mes challenges résolus classés par catégorie (cryptographie, forensics, web…), chacun avec son writeup complet.

picoCTF — Récapitulatif & Progression

Ce post est l’index vivant de ma progression sur picoCTF. Chaque challenge résolu s’ajoute ici, classé par catégorie (cryptographie, forensics, web…) avec sa difficulté réelle 🟢🟡🔴, et pointe vers son writeup complet.


🎯 En bref

InfosDétails
PlateformepicoCTF
Challenges résolus4 (StegoRSA, Shared Secrets, Undo, MyGit)
PrincipeChaque challenge = une entrée classée par catégorie
FormatRésumé + lien vers le writeup complet (avec photos de résolution)

🏆 Les challenges résolus

🔐 Cryptographie

StegoRSA — 🟢 Facile — résolu le 10/08/2026

Writeup complet : StegoRSA — la clé privée RSA cachée dans une image

Objectif : un message a été chiffré en RSA, la clé publique a disparu… mais quelqu’un a été négligent avec la clé privée.

ÉtapeCe qu’on fait
Découvertefile image.jpg + exiftool image.jpg → champ Comment rempli d’une chaîne hexadécimale
ReconnaissanceDétecteur de code de dcode.fr → verdict : de l’hexadécimal
ExtractionDécodage : 2d 2d 2d = --------BEGIN PRIVATE KEY-----
Reconstitutionxxd -r -p → clé privée PEM (cle.pem)
Décryptageopenssl pkeyutl -decrypt -in flag.enc -inkey cle.pem → flag

Compétences : métadonnées (forensics), reconnaissance d’encodage, stéganographie, RSA, OpenSSL.

Flag : picoCTF{rs4_k3y_1n_1mg_4eedd678}

Shared Secrets — 🟢 Facile — résolu le 12/08/2026

Writeup complet : Shared Secrets — quand le secret Diffie-Hellman fuite en clair

Objectif : un message a été chiffré avec un secret partagé (échange Diffie-Hellman)… mais l’une des deux parties a laissé fuiter son secret privé dans le fichier de sortie.

ÉtapeCe qu’on fait
AnalyseLecture du code source encryption.py → repérage de la fuite : le secret b du client est écrit en clair dans message.txt
Recalculshared = pow(A, b, p) → on rejoue le calcul du serveur avec les valeurs fuitées
DéchiffrementXOR répété (shared % 256) appliqué à enc → flag

Compétences : Diffie-Hellman, arithmétique modulaire (pow() à 3 arguments), XOR à clé répétée, lecture de code source.

Flag : picoCTF{dh_s3cr3t_32ec2679}

🛠️ General Skills

Undo — 🟢 Facile — résolu le 12/08/2026

Writeup complet : Undo — remonter une chaîne de transformations Linux

Objectif : un service distant applique 5 transformations successives au flag (Base64, rev, tr, ROT13…) ; à chaque étape, le serveur affiche le flag transformé, donne un indice, et attend la commande Linux qui inverse la transformation.

ÉtapeCe qu’on fait
Connexionnc foggy-cliff.picoctf.net 62907 — un service interactif pose une question à chaque étape
Étapes 1-2base64 -d puis rev — décoder le Base64, inverser l’ordre des caractères
Étapes 3-4tr '-' '_' puis tr '()' '{}' — remplacer des caractères par paires
Étape 5ROT13 : tr 'a-zA-Z' 'n-za-mN-ZA-M' — le piège : ne pas oublier les majuscules

Compétences : netcat, encodage Base64, manipulation de texte (rev, tr), ROT13, résolution d’une chaîne de transformations dans l’ordre inverse.

Flag : picoCTF{Revers1ng_t3xt_Tr4nsf0rm@t10ns_dcc1896c}

MyGit — 🟢 Facile — résolu le 12/08/2026

Writeup complet : MyGit — usurper l’identité root avec un simple commit Git

Objectif : un serveur Git maison ne renvoie le flag que si un flag.txt est poussé par un auteur nommé root (root@picoctf)… or l’identité d’un commit Git est une métadonnée que le client déclare lui-même, sans aucune vérification.

ÉtapeCe qu’on fait
Clonegit clone ssh://git@foggy-cliff.picoctf.net:53071/git/challenge.git — lecture du README.md : la règle exacte est écrite noir sur blanc
Imposturegit config user.name "root" + git config user.email "root@picoctf" — on se déclare root, aucune preuve demandée
Pushtouch flag.txt + git add . + git commit + git push → le serveur croit en l’identité déclarée et renvoie le flag

Compétences : Git (clone, config, commit, push), compréhension du modèle de confiance de l’auteur d’un commit, lecture d’énoncé/README.

Flag : picoCTF{1mp3rs0n4t4_g17_345y_02a39618}

🕵️ Forensics

(pas encore de challenge résolu — à venir)

🌐 Web

(pas encore de challenge résolu — à venir)

⚙️ Reverse Engineering

(pas encore de challenge résolu — à venir)

🔓 Exploitation (Pwn)

(pas encore de challenge résolu — à venir)


🧭 Progression à venir

Chaque nouveau challenge résolu viendra s’ajouter dans sa catégorie — pas de montée en difficulté artificielle, juste ma collection qui grandit :

1
2
3
4
5
6
🔐 Cryptographie : StegoRSA ✅, Shared Secrets ✅
🛠️ General Skills : Undo ✅, MyGit ✅
🕵️ Forensics      : à venir ⬜
🌐 Web            : à venir ⬜
⚙️ Reverse        : à venir ⬜
🔓 Pwn            : à venir ⬜

📊 Mon bilan

DomaineCe que j’ai appris
MétadonnéesLes métadonnées d’une image (champ Comment) peuvent cacher n’importe quoi — premier réflexe en forensics
EncodagesSavoir reconnaître l’hexadécimal (et le base64, ROT13…) avant de décoder
StéganographieCacher ≠ chiffrer : une clé cachée dans une image est récupérable
RSA / OpenSSLopenssl pkeyutl -decrypt pour un déchiffrement RSA brut
Diffie-HellmanSi l’une des valeurs privées (a ou b) fuite, tout l’échange s’effondre : on recalcule le secret partagé sans casser le logarithme discret
XOR / PythonLe XOR se déchiffre en réappliquant la même clé ; pow(base, exp, mod) à 3 arguments pour les grands nombres
netcatnc <host> <port> ouvre une session texte interactive avec un service distant — le point d’entrée de beaucoup de challenges
Texte Linuxrev inverse une ligne, tr remplace caractère par caractère ; une chaîne de transformations se dénoue dans l’ordre inverse
ROT13Auto-inverse (13 + 13 = 26)… à condition de traiter minuscules et majuscules : tr 'a-zA-Z' 'n-za-mN-ZA-M'
GitL’auteur d’un commit (user.name/user.email) est une métadonnée déclarative : se déclarer root suffit — l’authentification réelle (SSH, token) est indépendante de ce champ
Conception serveurNe jamais faire confiance à une donnée fournie par le client (auteur du commit, en-têtes HTTP…) comme source de vérité pour une autorisation

📚 Ressources liées

Ce post sera mis à jour à chaque nouveau challenge picoCTF résolu — chaque writeup s’ajoute dans sa catégorie. Stay tuned ! 🚀

Cet article est sous licence CC BY 4.0 par l'auteur.