Injection de commande en PHP
L'injection
Par exemple, la commande "echo Test" devrait afficher "Test" dans le tableau output
<?php
$output = null;
// Exécute la commande par exemple "echo Test"
exec('echo ' . $_GET["name"], $output);
// Affiche le résultat de la commande
print_r($output);
?>
Cependant, aucune restriction n'est imposée dans le code. Nous pouvons donc injecter une commande à la suite.
Par exemple :
echo Test & echo Contenu du fichier C:\Users\%USERNAME%\Desktop\fichier.txt
Le caractère "&" permet d'exécuter des commandes à la suite. La seconde commande va créer un fichier sur le bureau.
Pour injecter la commande, il faut encoder l'URL comme ceci :
index.php?name=Test%26%20echo%20Contenu%20du%20%20fichier%3E%20C%3A%5CUsers%5C%25USERNAME%25%5CDesktop%5Cfichier.txt
Vous pouvez consulter la page Wikipédia sur l'Encodage-pourcent
Quelques conseils
Toujours utiliser la fonction "escapeshellcmd". Voir la documentation de escapeshellcmd
<?php $output = null; // Exécute la commande par exemple "echo Test" escapeshellcmd('echo ' . $_GET["name"], $output); // Affiche le résultat de la commande print_r($output); ?>
- Éviter d'exécuter une commande avec des arguments de l'utilisateur
- Toujours vérifier ce que l'utilisateur rentre : vérifier que les caractères sont alphanumériques ou numériques par exemple. Enlever les caractères spéciaux.
Commentaires
Enregistrer un commentaire