WebEra

Introduction aux Buffer Overflow (BoF)

Lors de notre challenge au Hacknowledge de Lille, nous n’avions pu résoudre une seule épreuve sur les Buffer Overflow faute d’avoir une personne de compétente dans ce domaine. C’est pourquoi j’ai commencé à me pencher sur le sujet, et je dois dire que c’est très intéressant autant d’un point de vue technique que l’exploitation de cette faille en elle même ! C’est pourquoi je ferai une série d’articles sur l’ensemble des techniques de BoF (Buffer overFlow) afin de voir si j’ai bien tout assimilé.

Mais tout d’abord les Buffer Overflow Kézako ?

Un Buffer Overflow – ou « dépassement de mémoire tampon » en français – c’est d’essayer de mettre plus de données que peut contenir une variable par exemple,

Voici un exemple en image de BoF :

wikipedia.org

On peut voir que la chaîne de caractères est plus longue que le « buffer » alloué ce qui provoque un écrasement des valeurs suivante du programme, dans un environnement non contrôlé. Cela va tout simplement cracher le programme, mais on va voir que l’on va pouvoir faire en sorte de contrôler ce dépassement afin d’exécuter du code arbitraire à notre convenance !

Pour cela, la connaissance du langage assembleur est obligatoire. En effet nous allons développer du code de bas niveau afin de pouvoir maîtriser et exploiter ce dépassement de données, c’est pourquoi je ne m’attarderais pas dans cet article sur le langage ASM (assembleur) qui fera sans doute l’objet d’un autre tutorial afin de reprendre les bases de la programmation de bas niveau.

La pratique est la meilleure méthode pour apprendre. Pour cela, je vous propose de faire ensemble des « challenges » basés sur les différents types de BoF.

J’ai choisi de commencer par les wargames de chez OverTheWire, ils sont assez simples pour débuter.

Quitter la version mobile