PATH es una variable de entorno que especifica el conjunto de directorios donde se puede ubicar un ejecutable. La variable PATH de una cuenta es un conjunto de rutas absolutas, lo que permite a un usuario escribir un comando sin especificar la ruta absoluta al binario. Por ejemplo, un usuario puede escribir cat /tmp/test.txt en lugar de especificar la ruta absoluta /bin/cat /tmp/test.txt. Podemos comprobar el contenido de la variable PATH escribiendo env | grep PATH o echo $PATH.
La creación de un script o programa en un directorio especificado en PATH hará que sea ejecutable desde cualquier directorio del sistema.
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
Como se muestra a continuación, el script conncheck creado en /usr/local/sbin aún se ejecutará cuando esté en el directorio /tmp porque se creó en un directorio especificado en PATH.
htb_student@NIX02:~$ pwd && conncheck
/tmp
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 268 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
Al agregar . al PATH de un usuario, se agrega su directorio de trabajo actual a la lista. Por ejemplo, si podemos modificar la ruta de un usuario, podríamos reemplazar un binario común como ls por un script malicioso como un shell inverso. Si agregamos . a la ruta emitiendo el comando PATH=.:$PATH y luego export PATH, podremos ejecutar binarios ubicados en nuestro directorio de trabajo actual con solo escribir el nombre del archivo (es decir, con solo escribir ls se llamará al script malicioso nombrado ls en el directorio de trabajo actual en lugar del binario ubicado en /bin/ls).
Revisando el PATH observamos que el directorio /tmp forma parte de PATH, con lo que la creación de un script o programa en este directorio /tmp hará que sea ejecutable desde cualquier directorio del sistema.
Comprobando los privilegios de ejecución encontramos que el usuario htb-student puede ejecutar openssl como root:
htb-student@NIX02:/tmp$ sudo -l
Matching Defaults entries for htb-student on NIX02:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
env_keep+=LD_PRELOAD
User htb-student may run the following commands on NIX02:
(root) NOPASSWD: /usr/bin/openssl
1. Como el usuario tiene permiso para ejecutar /usr/bin/openssl como root, podemos aprovecharlo para ejecutar una shell de root.
2. Ejecutamos el siguiente comando para leer el archivo shadow: