2017-07-11 3 views
0

hey ceci est mon très simple Codepuis-je injecter du code php dans une partie de l'URL qui s'affiche à l'écran?

<?php 
$test= $_GET['test']; 
echo $test; 

?> 

et url i a écrit ce
test.php? Test = système ('dir')
pourquoi il ne pas excute la commande et l'afficher?

+0

Vous ne devez jamais autoriser l'exécution d'un script envoyé par un utilisateur. – kuba

+0

Yikes! Voulez-vous que quelqu'un puisse pirater votre serveur? –

+0

Je pense que vous essayez de créer (ou de comprendre) un shell PHP. Personne dans le bon sens ne ferait quelque chose comme ça. (sans vouloir vous offenser) –

Répondre

0

Vous transmettez la commande sous la forme d'une chaîne dans l'URL. De plus, vous faites simplement écho à la chaîne à l'écran. Alors qu'un écho pourrait inclure du code php échappé qui serait exécuté, vous pourriez plutôt vouloir évaluer et exécuter la commande.

Pour exécuter effectivement la commande que vous pouvez utiliser des commandes suivantes:

Assurez-vous de lire la documentation de safe-mode-exec ainsi. Surtout le bit suivant:

chaîne de safe_mode_exec_dir Si PHP est utilisé en mode sans échec, le système() et les autres fonctions d'exécution des programmes du système refusent de lancer des programmes qui ne sont pas dans ce répertoire. Vous devez utiliser/comme répertoire séparateur sur tous les environnements, y compris Windows.

3

Vous passez une chaîne via l'URL, un écho n'exécutera pas une chaîne. Vous devez écrire:

eval($test) 

pour l'exécuter. Donc, votre code actuel ne peut pas exécuter du code PHP, mais il pourrait être utilisé pour exécuter du code JS. Vous devriez le filtrer.

Consultez la documentation sur les filtres pour en savoir plus sur le filtrage: http://php.net/manual/en/intro.filter.php. Vous pouvez également utiliser une telle bibliothèque: https://github.com/ircmaxell/filterus. Si vous travaillez avec un framework, consultez les fonctions/méthodes de filtrage intégrées.