Stripe, une solution de paiement en ligne, est à l'origine d'un Capture The Flag à la fois ludique et instructif. Les six niveaux de ce challenge offrent un joli tour d'horizon des grandes catégories d'erreur de programmation à ne pas commettre. Nous proposerons dans cet article une analyse de chacun de ces niveaux afin de comprendre la vulnérabilité qui y a été introduite, la façon de l'exploiter et surtout les bonnes pratiques à adopter pour éviter de reproduire ces erreurs dans vos futurs programmes.
Les règles du jeu sont simples et classiques pour ceux qui sont coutumiers de ce genre d'exercice. Les identifiants de l'utilisateur du premier niveau nous permettent de nous connecter en SSH sur un serveur GNU/Linux. Chaque niveau renferme un exécutable vulnérable (et son code source) possédant le droit SUID de l'utilisateur du niveau suivant. Il faut donc exploiter successivement ces programmes pour escalader les privilèges et accéder au secret final.
Bien que le serveur initial de Stripe ne soit plus ouvert [1], ceux qui désirent effectuer ce CTF en conditions réelles pourront récupérer l'image disque du serveur [2]. De plus, Stripe a mis en ligne le code source des différents niveaux [3] ainsi que des preuves de concept pour les exploiter [4].
Les niveaux sont de difficulté croissante. Commençons donc en douceur avec le premier d'entre eux.
1. Niveau 1 : Prenez le bon chemin
1.1. Comprendre
#include <stdio.h>
#include <stdlib.h>
int...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première