Écrire un fichier local sur le serveur avec sqlmap

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous allez explorer une fonctionnalité puissante de sqlmap : la capacité d'écrire des fichiers locaux sur un serveur distant. Cette capacité est cruciale dans les scénarios de tests d'intrusion, vous permettant de téléverser des web shells, des fichiers de configuration ou d'autres charges utiles malveillantes sur un serveur compromis. Nous aborderons les prérequis nécessaires, tels que la confirmation des privilèges DBA et l'identification des répertoires inscriptibles, puis nous détaillerons le processus de création d'un fichier localement, l'utilisation de sqlmap pour le téléverser, et enfin la vérification de sa présence sur le serveur.

Confirmation des privilèges DBA et des permissions d'écriture de répertoire

Dans cette étape, vous utiliserez sqlmap pour vérifier si l'utilisateur actuel de la base de données possède les privilèges DBA (Database Administrator) et pour identifier les répertoires sur le serveur qui sont inscriptibles. Avoir les privilèges DBA est souvent un prérequis pour écrire des fichiers, et connaître les répertoires inscriptibles est essentiel pour choisir une destination pour votre fichier téléversé.

Tout d'abord, vérifions les privilèges DBA. Ceci est crucial car sqlmap nécessite souvent des privilèges élevés pour effectuer des opérations sur le système de fichiers.

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --is-dba

Vous devriez voir une sortie indiquant si l'utilisateur est un DBA. Recherchez une ligne similaire à [INFO] the back-end DBMS user is a DBA.

Ensuite, nous devons trouver un répertoire inscriptible sur le serveur. sqlmap peut aider à cela en essayant d'identifier les chemins courants inscriptibles. Nous utiliserons l'option --file-write avec un fichier factice et un répertoire inscriptible courant comme /tmp pour tester. Bien que nous n'écrivions pas encore réellement de fichier, cette commande peut aider à confirmer les capacités d'écriture.

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write=/dev/null --file-dest=/tmp/test_write.txt --batch

L'indicateur --batch indique à sqlmap d'utiliser les réponses par défaut aux questions, ce qui est utile pour l'automatisation. Si la commande s'exécute sans erreurs liées aux permissions, cela suggère que /tmp est inscriptible.

Sortie attendue pour --is-dba :

...
[INFO] checking if the back-end DBMS user is a DBA
[INFO] the back-end DBMS user is a DBA
...

Sortie attendue pour le test des permissions d'écriture (peut varier, mais recherchez des messages de succès ou l'absence d'erreurs de permission) :

...
[INFO] the file '/tmp/test_write.txt' has been successfully written on the back-end DBMS file system
...

Création d'un fichier local à téléverser (par exemple, upload.txt)

Dans cette étape, vous allez créer un fichier texte simple sur votre machine locale (l'environnement LabEx) que vous avez l'intention de téléverser sur le serveur cible. Ce fichier peut contenir n'importe quel contenu, mais pour ce laboratoire, nous allons créer un fichier texte basique pour démontrer le processus.

Naviguez vers le dossier project de votre répertoire personnel, qui est le répertoire de travail par défaut dans cet environnement de laboratoire.

cd ~/project

Maintenant, créez un fichier nommé upload.txt avec du contenu en utilisant la commande echo et la redirection.

echo "This file was uploaded from the LabEx environment!" > upload.txt

Vous pouvez vérifier le contenu du fichier en utilisant cat :

cat upload.txt

Sortie attendue :

This file was uploaded from the LabEx environment!

Utilisation de --file-write et --file-dest pour spécifier la source et la destination

Dans cette étape, vous apprendrez les options de sqlmap utilisées pour l'écriture de fichiers : --file-write et --file-dest.

  • --file-write : Cette option spécifie le chemin local du fichier que vous souhaitez téléverser. sqlmap lira le contenu de ce fichier.
  • --file-dest : Cette option spécifie le chemin absolu sur le serveur distant où sqlmap doit écrire le fichier. Il est crucial de fournir un chemin vers un répertoire auquel l'utilisateur de la base de données a des permissions d'écriture. D'après notre étape précédente, /tmp/ est un bon candidat.

Nous allons préparer la commande sqlmap en utilisant ces options, mais nous ne l'exécuterons pas avant la prochaine étape. Cela vous permet de comprendre d'abord la structure de la commande.

La commande ressemblera à ceci :

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

Décomposons la commande :

  • -u "http://localhost/vulnerable/index.php?id=1" : L'URL cible avec la vulnérabilité d'injection SQL.
  • --file-write="/home/labex/project/upload.txt" : Le chemin complet vers le fichier local que vous avez créé à l'étape précédente. Rappelez-vous que ~/project se développe en /home/labex/project.
  • --file-dest="/tmp/uploaded_file.txt" : Le chemin complet où le fichier sera écrit sur le serveur distant. Nous utilisons /tmp/ comme répertoire de destination et nommons le fichier téléversé uploaded_file.txt.
  • --batch : Pour automatiser le processus et accepter les choix par défaut.

Prenez un moment pour examiner la commande et vous assurer que les chemins sont corrects.

Exécution de la commande pour téléverser le fichier vers un répertoire accessible en écriture

Dans cette étape, vous allez exécuter la commande sqlmap préparée à l'étape précédente pour téléverser upload.txt depuis votre machine locale vers le répertoire /tmp/ sur le serveur cible, en le nommant uploaded_file.txt.

Exécutez la commande sqlmap :

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

sqlmap va maintenant tenter d'écrire le fichier. Vous devriez observer la progression de sqlmap alors qu'il essaie différentes techniques pour téléverser le fichier. En cas de succès, sqlmap signalera que le fichier a été écrit.

Sortie attendue (recherchez le message de succès) :

...
[INFO] the file '/tmp/uploaded_file.txt' has been successfully written on the back-end DBMS file system
...

Ce message confirme que sqlmap pense avoir réussi à écrire le fichier à la destination spécifiée sur le serveur.

Vérification du téléversement réussi à l'aide de la commande --file-read

Dans cette dernière étape, vous allez vérifier que le fichier a bien été téléversé sur le serveur et que son contenu est correct. Vous pouvez le faire en utilisant l'option --file-read de sqlmap, qui vous permet de lire des fichiers depuis le serveur distant.

Utilisez l'option --file-read, en spécifiant le chemin du fichier que vous venez de téléverser sur le serveur :

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-read="/tmp/uploaded_file.txt" --batch

sqlmap tentera de lire le fichier et d'afficher son contenu dans le terminal.

Sortie attendue :

...
[INFO] retrieved file content:
This file was uploaded from the LabEx environment!
...

Si vous voyez le contenu "This file was uploaded from the LabEx environment!", cela signifie que votre fichier a été téléversé avec succès et peut être lu depuis le serveur. Cela confirme l'ensemble du processus d'écriture d'un fichier local sur le serveur à l'aide de sqlmap.

Résumé

Dans ce laboratoire, vous avez appris avec succès à exploiter les capacités d'écriture de fichiers de sqlmap. Vous avez commencé par confirmer les privilèges DBA et identifier les répertoires accessibles en écriture sur le serveur cible. Ensuite, vous avez créé un fichier local et utilisé sqlmap avec les options --file-write et --file-dest pour le téléverser sur le serveur. Enfin, vous avez vérifié le téléversement réussi en lisant le contenu du fichier depuis le serveur à l'aide de l'option --file-read. Cette compétence est fondamentale en test d'intrusion pour diverses activités post-exploitation.