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

Commande
Description

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

Paramètre
Description

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èges

  • information_schema : métadonnées

  • sys : 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