6 bonnes façons de rendre votre programme vulnérable

Magazine
Marque
MISC
Numéro
65
Mois de parution
janvier 2013
Domaines


Résumé

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...

Cet article est réservé aux abonnés. Il vous reste 97% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite


Articles qui pourraient vous intéresser...

Zéro SQLi malgré les développeurs

Magazine
Marque
MISC
Numéro
111
Mois de parution
septembre 2020
Domaines
Résumé

Nous proposons une méthode pour effectuer des requêtes SQL qui garantit l'invulnérabilité aux injections SQL, y compris lorsqu'elle est utilisée par un développeur pressé ou incompétent, contrairement aux requêtes paramétrées. Basée sur l'utilisation d'arbres de syntaxe abstraite, elle permet facilement de construire des requêtes dynamiques et est plus facile à mettre en œuvre qu'un ORM. Nous proposons une bibliothèque Java implémentant nos idées, mais la méthode peut s'appliquer à d'autres langages de programmation et d'autres types de requêtes.

Introduction à QBDI et ses bindings Python

Magazine
Marque
MISC
Numéro
109
Mois de parution
mai 2020
Domaines
Résumé

Le présent article traite de l'outil d'instrumentation dynamique QBDI. C'est un framework de DBI (Dynamic Binary Instrumentation), comparable à d'autres projets publics tels qu’Intel PIN, Valgrind ou encore DynamoRIO. Avant d'entrer dans le vif du sujet, quelques rappels peuvent s'avérer nécessaires…