# Sécurité des applications, débordements de tampon mémoire

Un programme doit anticiper les actions malveillantes pouvant se produire à chacune des interactions:

- Entrées du programme vérifiées et assainies
- Contrôle des appels de programmes externes
- Utilisation correcte de fonctions sûres
  - par exemple ```strncpy``` et ```strncat``` au lieu de ```strcpy``` et ```strcat```

```C
strcat(dst,src)
```

Cette fonction enlève le caractère de fin de chaine de dst, et concatène src à la fin de dst. Le problème ? On ne vérifie pas la taille de l'espace alloué à dst, et on peut ainsi déborder sur la pile.

Une bonne façon d'utiliser ```strcat``` est de précéder ```strcat``` d'un test :

```C
if (strlen(dst)+strlen(src)< sizeof(dst)-1){
    strcat(dst,src);
}
```

L'alternative est

```C
/// Le troisième paramètre de strncat est le nombre max de char que l'on va copier de src dans dst
/// -1 pour le symbole de fin de chaine de caractères
strncat(dst, src, sizeof(dst)-strlen(dst)-1);
```

Accès à l'origine : (lecture) ou (écriture) qui sont causés par de mauvais indices d'un tableau, un strcpy mal maîtrisé, etc...

## Les possibles conséquences d'un débordement

**Cela dépend de l'emplacement du débordement :**

- Pile : données de contrôle d'exécution ou variables du programme
- Tas : Données gérées par la ```libc``` ou variables du programme
- Data : Variables du programme
- Code : Pas en écriture !

**L'exploitation demande de connaitre la sémantique des données écrasées :**

- Données de contrôle d'exécution : Specification du processeur
- Données gérées par la ```libc``` => implémentation de ```malloc```
- Variables du progrmame => Sémantique du programme (rétro-conception...)

**Conséquences de l'exploitation :** Déni de service (```seg fault```), changement de comportement du processus vulnérable, escalade de privilèges, etc...

**Définition du Tas :** Zone mémoire qui sert de base pour l'allocation dynamique de mémoire ``` malloc free ```

# Exploiter une vulnérabilité

## Etape 1 : Recherche de l'adresse de retour

