L'injection de commande Shell est possible quand un programme utilise une donnée, entrée par l'utilisateur, sans la filtrer, comme argument d'une commande shell.
Par exemple: un formulaire permet de saisir son nom et l'afficher. Le code coté serveur va ressembler à:
system ('echo '.$NAME);
Si nous saisissons:
YOLO; cat /etc/password;
Le serveur va enchainer les deux commandes en executant:
system ('echo YOLO; cat /etc/password;');
Nous allons récupérer le contenu du fichier passwd.
Avec une injection de commande nous avons la main sur le serveur. Nous pouvons récupérer des informations sur le serveur (uname -a), recupérer des noms de comptes (cat /etc/passwd), récupérer les fichiers de config du serveur web, lancer un reverse shell...