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