# Hijack d'une fonction avec LD_PRELOAD sur GNU/Linux
Hijack d'une fonction avec LD_PRELOAD sur GNU/Linux
Pour mieux comprendre cet article, je vous recommande de lire avant celui-ci : Création et utilisation des librairies en langage de programmation C
Introduction
Il existe plusieurs façons de produire un exécutable, l'une d'entre elle consiste à utiliser les librairies partagées.
Donc, à utiliser les fichiers ".so" sur GNU/Linux.
Pour connaître les librairies partagées dont dépend un exécutable, il existe l'outil ldd. Exemple :
|
|
Nous pouvons voir ici les dépendances de l'exécutable ls ainsi que les adresses où seront mappées ces dépendances.
Hijack d'une fonction
Le therme hijack signifie ici : détournement.
Je vais donc expliquer comment détourner une fonction grâce à la variable d'environnement LD_PRELOAD.
Prenons un exemple qui vérifie la correspondance entre deux chaînes de caractères en utilisant la fonction strcmp
|
|
Compilons :
$ gcc strcmp.c
Essayons :
$ ./a.out deadbeef
Wrong !
Cet exemple peut être attaqué en détournant la fonction strcmp pour utiliser une fonction qui renvoie toujours 0 signifiant que les deux chaînes de caractères sont égales.
|
|
Je compile ce code en tant que librairie partagée :
gcc -fPIC -shared hijack.c -o hijack.so
L'attaque consiste maintenant à utiliser la variable d'envionnement LD_PRELOAD :
|
|
Nous pouvons donc voir que même si les deux chaînes de caractères ne correspondent pas, nous obtenons bien le message "Good !".
Cool!