Outils d'utilisateurs

Outils du Site


failles_app:format_string

Ceci est une ancienne révision du document !


Les failles de type format string

Introduction

Je rédige ce papier afin de combler un manque cruel (à mon sens) de documentation à propos de ces failles. L’essentiel des tutos/papiers que l’on trouve sur le net sont en anglais, ce qui ne facilite pas la compréhension du sujet. Pour les quelques rares documents rédigés en français, ils sont bien souvent très mal tournés (je trouve).

Je vais donc tenter d’expliquer le principe des Format String de la façon dont j’aurais aimé qu’on le fasse au moment ou j’ai moi-même appris.


SOMMAIRE


  • 1 Rappels sur les fonctions de la famille printf()
    • 1.1 Comportement global
    • 1.2 Les formateurs (partie 1)
  • 2 La faille Format String, théorie
    • 2.1 Un programme faillible
    • 2.2 Explication de la faille
    • 2.3 Les formateurs (partie 2)
      • 2.3.1 Les formateurs “directs”
      • 2.3.2 Les formateurs “pointeurs”
      • 2.3.3 Le formateur %n
  • La faille Format String, exploitation
    • 3.1 Théorie
    • 3.2 Pratique

1 Rappels sur les fonctions de la famille printf()

1.1 Comportement global

Ces fonctions ont la particularité d'utiliser une technique un peu spéciale pour traiter les données qu'elles manipulent. En effet, elles se basent sur des “formateurs”, pour interpréter leurs arguments et les mettre en forme. Voici un exemple :

exemple1.c
#include <stdio.h>
 
int main()
{
   int nombre = 5;
   printf("L'adresse de la variable nombre est %x ou encore %d, et sa valeur est %d.\n", &nombre, &nombre, nombre);
   return 0;
}
Terminal
warr@debian:~$ gcc printf.c -o printf
warr@debian:~$ ./printf
L'adresse de la variable nombre est bffffd60 ou encore -1073742496, et sa valeur est 5.
failles_app/format_string.1339537681.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)