Les développeurs utilisent parfois des fonctions comme shell_exec(), system() ou exec() pour lancer des commandes système (ex: ping, grep, image processing).
Si l'entrée utilisateur est concaténée directement dans la commande sans être nettoyée, c'est la catastrophe.
Dans un shell (Linux/Bash), on peut enchaîner plusieurs commandes sur une même ligne grâce aux séparateurs :
; (Point-virgule) : Exécute la commande suivante quoi qu'il arrive.&& (ET logique) : Exécute la suivante SEULEMENT si la précédente réussit.|| (OU logique) : Exécute la suivante SEULEMENT si la précédente échoue.| (Pipe) : Passe la sortie de la première à la seconde.Si l'utilisateur entre : 8.8.8.8; ls -la
Le serveur exécute :
Il va faire le ping... PUIS lister tous les fichiers du répertoire !
C'est une RCE (Remote Code Execution). L'attaquant a pris le contrôle du serveur.