MySQL
📚 Qu'est-ce que MySQL ?
MySQL est un système de gestion de base de données relationnelle (SGBDR) open-source développé et maintenu par Oracle. Il repose sur le langage SQL (Structured Query Language) et utilise une architecture client-serveur, composée :
d'un serveur MySQL, chargé de gérer, stocker et sécuriser les données,
d'un ou plusieurs clients MySQL qui envoient des requêtes pour interagir avec les bases.
Les données sont organisées sous forme de tables (lignes, colonnes, types) stockées dans des fichiers .sql
. Le système est optimisé pour une performance élevée tout en occupant un espace mémoire limité.
💡 Cas d'usage typique : WordPress
Un exemple courant est WordPress, qui utilise MySQL pour stocker les articles, utilisateurs et paramètres du CMS. Les requêtes SQL permettent d'insérer, modifier ou supprimer dynamiquement du contenu via des scripts PHP côté serveur.
⚙️ MySQL et LAMP/LEMP
MySQL est très présent dans les stacks de développement Web :
LAMP : Linux, Apache, MySQL, PHP
LEMP : Linux, Nginx, MySQL, PHP
Il sert à centraliser les informations telles que :
Données utilisateurs : logins, e-mails, rôles
Données de contenu : articles, liens, balises méta
Données sensibles : mots de passe (chiffrés via PHP en général)
🔍 Commandes MySQL utiles
mysql -u <user> -p<pass> -h <IP>
Connexion à distance à un serveur MySQL
show databases;
Lister les bases de données disponibles
use <base>;
Sélectionner une base
show tables;
Lister les tables de la base sélectionnée
show columns from <table>;
Afficher les colonnes d'une table
select * from <table>;
Tout afficher dans la table
select * from <table> where <col> = "<val>";
Rechercher une donnée spécifique
🛠️ Configuration par défaut
Fichier principal : /etc/mysql/mysql.conf.d/mysqld.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
port = 3306
datadir = /var/lib/mysql
explicit_defaults_for_timestamp
symbolic-links = 0
⚠️ Paramètres dangereux
user
/ password
Si en clair, permet accès direct aux données
admin_address
IP d'écoute des connexions admin
debug
/ sql_warnings
Fuites potentielles d'information sensible via erreurs
secure_file_priv
Permet les imports/exports depuis des chemins arbitraires
Des fichiers de configuration mal sécurisés ou lisibles par tous peuvent révéler ces paramètres. Cela peut entraîner une compromission totale du serveur MySQL.
🔎 Scan & Footprinting
Utilisation typique de Nmap :
nmap -sV -sC -p3306 --script mysql* <IP>
Permet d'obtenir :
Version du serveur MySQL
Utilisateurs existants
Présence éventuelle de mots de passe vides (
mysql-empty-password
)
⚠️ Il convient de vérifier manuellement les résultats (nombreux faux positifs possibles).
🧪 Connexion manuelle et interactions
Connexion :
mysql -u root -pP4SSw0rd -h <IP>
Exploration :
show databases;
use mysql;
show tables;
select * from user;
Les bases importantes sont :
mysql
: comptes utilisateurs, privilègesinformation_schema
: métadonnéessys
: statistiques d'exécution
🔁 MariaDB
MariaDB est un fork de MySQL, né après le rachat par Oracle. Il est 100% compatible avec MySQL et maintenu par la communauté open-source.
🧱 Recommandations
Déployer une instance MySQL/MariaDB pour s'entraîner
Lire la documentation officielle pour la configuration et la sécurité
Vérifier les droits Unix sur les fichiers de conf (
chmod
,chown
)
📚 Ressources utiles
Enumerate the MySQL server and determine the version in use. (Format: MySQL X.X.XX)
Afin d'énumérer le serveur, nous effectuons un scan via nmap sur notre cible :
$ nmap -A -T5 10.129.170.210 --script=banner
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-24 19:03 CEST
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
25/tcp open smtp
53/tcp open domain ISC BIND 9.16.1 (Ubuntu Linux)
110/tcp open pop3 Dovecot pop3d
143/tcp open imap Dovecot imapd
993/tcp open ssl/imap Dovecot imapd
|_LE LITERAL+ AUTH=PLAIN] HTB{roncfbw7iszerd7shni7jr2343zhrj}
995/tcp open ssl/pop3 Dovecot pop3d
3306/tcp open mysql MySQL 8.0.27-0ubuntu0.20.04.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Nmap done: 1 IP address (1 host up) scanned in 52.15 seconds
Nous pouvons bien observer la présence du service MySQL
sur le port 3306.
Il nous est également possible de relever la version du service : MySQL 8.0.27
.
During our penetration test, we found weak credentials "robin:robin". We should try these against the MySQL server. What is the email address of the customer "Otto Lang"?
Nous nous connectons au serveur MySQL
:
$ mysql -u robin -probin -h 10.129.244.241
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
Une fois connectés, nous pouvons naviguer au sein du serveur afin de trouver le mail associé au client Otto Lang
:
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| customers |
+--------------------+
MySQL [(none)]> use customers;
Database changed
MySQL [customers]> show tables;
+---------------------+
| Tables_in_customers |
+---------------------+
| myTable |
+---------------------+
MySQL [customers]> select * FROM myTable WHERE name = "Otto Lang";
+----+-----------+---------------------+---------+-----------+---------+-----------------+------------------+------+
| id | name | email | country | postalZip | city | address | pan | cvv |
+----+-----------+---------------------+---------+-----------+---------+-----------------+------------------+------+
| 88 | Otto Lang | ultrices@google.htb | France | 76733-267 | Belfast | 4708 Auctor Rd. | 5322224628183391 | 595 |
+----+-----------+---------------------+---------+-----------+---------+-----------------+------------------+------+
Nous obtenons alors le mail du client : ultrices@google.htb
.
Mis à jour