# Path Abuse

La variable d'environnement **PATH** spécifie l'ensemble des répertoires où un exécutable peut être localisé. La variable PATH d’un compte est composée de chemins absolus, ce qui permet à un utilisateur de taper une commande sans préciser le chemin complet du binaire.

Par exemple, un utilisateur peut taper `cat /tmp/test.txt` au lieu de `/bin/cat /tmp/test.txt`. On peut vérifier le contenu de la variable PATH avec :

### ⚙️ Vérification de la variable PATH

```bash
htb_student@NIX02:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
```

Créer un script ou un programme dans un répertoire spécifié dans le PATH permettra de l'exécuter depuis n’importe quel répertoire sur le système.

#### ⚙️ Exemple de script dans un répertoire du PATH

```bash
htb_student@NIX02:~$ pwd && conncheck
/usr/local/sbin
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1189/sshd
tcp        0     88 10.129.2.12:22          10.10.14.3:43218        ESTABLISHED 1614/sshd: mrb3n [p
tcp6       0      0 :::22                   :::*                    LISTEN      1189/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      1304/apache2
```

Comme montré ci-dessus, le script `conncheck` créé dans `/usr/local/sbin` s’exécutera toujours même depuis le répertoire `/tmp` car il se trouve dans un répertoire présent dans le PATH.

#### ⚙️ Exemple de PATH modifié pour exécuter un binaire local

Ajouter `.` au PATH d'un utilisateur ajoute son répertoire de travail actuel à la liste. Par exemple, si nous pouvons modifier le PATH d'un utilisateur, nous pourrions remplacer un binaire courant comme `ls` par un script malveillant (ex: reverse shell).

```bash
htb_student@NIX02:~$ PATH=.:${PATH}
htb_student@NIX02:~$ export PATH
htb_student@NIX02:~$ echo $PATH
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
```

Dans cet exemple, on modifie le PATH pour exécuter une commande simple `echo` lorsque la commande `ls` est tapée :

```bash
htb_student@NIX02:~$ touch ls
htb_student@NIX02:~$ echo 'echo "PATH ABUSE!!"' > ls
htb_student@NIX02:~$ chmod +x ls
htb_student@NIX02:~$ ls
PATH ABUSE!!
```

***

{% hint style="info" %}
&#x20;SSH to 10.129.61.185 (ACADEMY-LPE-NIX02) with user "htb-student" and password "Academy\_LLPE!"
{% endhint %}

> Review the PATH of the htb-student user. What non-default directory is part of the user's PATH?

Nous nous connectons dans un premier temps à notre cible :&#x20;

```bash
ssh htb-student@10.129.61.185
```

Une fois la connexion effective, nous pouvons lister l'ensemble des PATH disponibles pour l'utilisateur ***htb-student*** :&#x20;

```bash
htb-student@NIX02:~$ $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/tmp: No such file or directory
```

Nous pouvons alors observer que le répertoire non présent par défaut présent ici est le répertoire ***/tmp***.

***
