12
votes

Est-il possible d'exécuter PHP avec une extension fichier.php.jpg?

Fichier LEGIT SITE image_upload.php a été utilisé pour télécharger le fichier 89471928047.php.jpg Le formulaire de téléchargement de fichier simple qui copie le fichier TMP sur les mêmes images d'images. Comment ils ont réussi à l'exécuter et à télécharger d'autres fichiers. Quelqu'un sache comment c'est possible? la version PHP était 5.1.6 qui étant mis à jour il y a exactement l'heure ou après par la planification avec l'hôte à 5.3.8 ... Quelle coïncidence?


3 commentaires

Était-ce un piratage? demandez-vous comment prévenir? Que contient 89471928047.php.jpg? Avez-vous essayé de le remplacer par un simple fichier PHP faisant un écho et essayez d'exécuter pour voir ce qui se passe?


La question est de savoir si ils capables de télécharger PHP avec une extension .jpg Comment peut-ils l'exécuter de Maybee extérieur est parce que PHP était v5.1.6


@Johna Cela n'a probablement rien à voir avec la version de PHP que vous utilisez.


3 Réponses :


17
votes

Vérifiez votre fichier .htaccess

en utilisant AddType < / Code> Dans votre fichier .htaccess, vous pouvez ajouter de nombreuses autres extensions à partir de laquelle PHP peut être couru. C'est généralement comment .html peut être utilisé tout en utilisant PHP en eux-mêmes. Donc, oui, il est possible: xxx

Vous pouvez tester cela si vous le souhaitez.

  1. Créer un répertoire avec deux fichiers: .htaccess and Test.php.jpg
  2. Définir le contenu de .htaccess à AddType Application-X-httpd-php .jpg
  3. Définir le contenu de test.php.jpg sur
  4. accès test.php.jpg par localhost

    Si tout va comme prévu, "FOO" sera sortie sur votre écran. Vous pouvez développer cette option pour déplacer les fichiers / tmp autour de si vous le souhaitez.

    Certainement quelque chose que vous voulez faire très attention à.

    Vérifiez les appels exposés à Inclure / exiger

    Une autre façon que cela aurait pu être effectué est via un appel à exiger () ou inclure () (ou l'un quelconque du code > _ONCE () Méthodes) Où par le pirate informatique a été capable de charger dans son fichier badfile.php.jpg téléchargé sous l'apparence d'une image innocente: < pré> xxx

    dans le cas ci-dessus (exemple simplifié), le pirate pirate pourrait transmettre un chemin vers son fichier .php.jpg et avoir son contenu chargé et traité comme php Code.

    Autres idées (effrayantes)

    exiger, inclure et leurs méthodes associées ne sont pas les seuls moyens de traiter des scripts externes - malheureusement, vous pouvez utiliser eval ( ) aussi. J'espère que vous n'en auriez rien de tout ce que cela se passe. Si vous avez eu des scripts sur votre serveur qui utilisaient l'une des fonctions de fichier pour lire le contenu d'un autre script, puis eval () pour évaluer ce contenu en tant que PHP, cela pourrait également fournir un trou de sécurité béant sur votre site web.


8 commentaires

Je pense qu'il demande comment un pirate informatique pourrait le faire, pas comment il peut le faire. En outre, si vous mappez .jpg Tous les fichiers JPG seront exécutés par PHP, ce qui n'est guère une bonne idée. Mais peut-être, oui, il pourrait vérifier si ses fichiers .htaccess ont été altérés. Je pense que nous avons besoin de plus d'informations. (Commentaire reposé en raison d'une erreur d'orthographe).


Il n'y avait pas .htaccess ils ont géré quelque peu de site de débordement, je pense et le font le processus JPG en tant que PHP ... il n'y avait pas de .htaccess sur place du tout.


@stivlo J'étais simplement montrant une méthode par laquelle un pirate informatique pourrait faire cela. Une correction mineure, tous les fichiers .jpg dans le répertoire du fichier .htaccess affecté seraient traités comme PHP. Espérons que cela aide l'OP à trouver le problème.


@Jonathansampson, oui en fait j'ai ajouté Peut-être, oui, il pouvait vérifier si ses fichiers .htaccess ont été altérés.


@stivlo L'inclusion était également ma deuxième idée;)


@Johna Vous devriez vérifier votre site, comme le dit StiVlo, pour des utilisations dangereuses de Inclure , nécessite , include_once et nécessitent_once qui accepte l'entrée qui aurait pu être altéré par les utilisateurs.


J'ai retiré cela du commentaire, car comme écrit, il poussait de plus de temps plus long et plus long, donc dans les prochaines minutes, je l'évolue comme une réponse.


"AddType" contrôle le type MIME que Apache répond avec un type de fichier donné. "Addhandler" rend Apache Utilisez php pour gérer les demandes de fichiers .php.



8
votes

Votre image_upload.php est insécurisé, vérifiez les éléments suivants:

  1. ne permet que des extensions d'image? sinon il serait possible de télécharger directement un fichier PHP. (Je pense que vous êtes couvert sur celui-ci, mais double chèque).
  2. vérifie-t-il que le fichier téléchargé est en effet une image? La réponse est non, elle ne vérifie pas le contenu. Ajoutez ce chèque! Avec cette seule étape, vous fermeriez la violation initiale.

    Pour vérifier si c'est une image que vous pouvez exécuter getImagesize sur le fichier, Il retournera false si ce n'est pas une image.

    Comment est-il possible d'exécuter ce fichier? Premièrement, comment savez-vous qu'il a été exécuté? Avez-vous vu des effets secondaires?

    1. Un moyen est qu'ils auraient pu d'autres fichiers altérés
    2. Une seconde façon, peut-être plus probable est qu'ils ont utilisé des entrées insanitudes de vos scripts à inclure ou à évaluer le code. Dans ce cas, vous ne pouvez trouver que des preuves uniquement en regardant les journaux.

      Comment regarder les journaux?

      Vérifiez la date et l'heure du fichier téléchargé et commencez à regarder autour de lui pour une activité suspecte (regardez les paramètres d'URL étranges). Une fois que vous avez trouvé une ou plusieurs adresses IP, faites des choses diaboliques, grep le journal pour cela (ceux) IPS, de voir toute l'histoire.

      Une autre information importante à savoir est, Avez-vous écrit le site ou utilisez un CMS ou similaire et dans ce cas qu'est-ce que c'est et quelle version? Vous devez vérifier les vulnérabilités publiées et la mise à niveau au cas où.


5 commentaires

Les commentaires incorporés dans les fichiers JPG peuvent toujours se contenter du chèque getImagesize (). Il évaluera comme un JPG légitime mais contient toujours du code.


Utilisation de getimagesize () pour déterminer si son image ou non est vraiment une mauvaise idée car on peut facilement intégrer le code dangereux dans une belle image. Vérifiez ce lien indiquant comment les scripts PHP peuvent être intégrés dans une image. php.webttorc.pl/fr/2011/05/13/...


@Bikalbasnet Comme expliqué dans l'article que vous avez lié le code à l'intérieur d'une image peut être exécuté en raison de l'utilisation inappropriée d'afficher une image, non pas à cause de getImagesize.


@stivlo Vous avez raison que cela soit exploité lors de l'utilisation de requis / incluant, etc. mais indique que vous avez une page appelée index.php, qui charge la page de la valeur transmise dans le paramètre à l'aide d'un paramètre ($ _ obtenir ['Page]] ) Par exemple: index.php? Page = page / abeveus.php. Dans ce cas, que si quelqu'un a téléchargé la mauvaise image dans le téléchargement / Bad.jpg et demandé au serveur d'exécuter index.php? Page = Upload / Bad.jpg. Cette fois, de mauvaises choses peuvent arriver. ne peut-il pas?


Vous ne devriez pas avoir d'exiger comme ça en premier lieu, la faute est là. Toutefois, si vous ne vérifiez pas avec getimagesize () Un script PHP uni avec une extension JPG serait accepté, ce qui est encore pire que de ne pas vérifier. Alors, que suggérez-vous de vérifier plus?



8
votes

Le problème est causé par votre serveur à l'aide de la valeur par défaut /etc/httpd/conf.d/php.conf:

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  # Use of the "ZTS" build with worker is experimental, and no shared
  # modules are supported.
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

Le contenu de /etc/httpd/conf.d/php .conf est: p> xxx pré>

Veuillez noter la dernière ligne addhandler php5-script .php. Cela cause ce problème et doit être remplacé par une configuration plus sécurisée p>

Vous pouvez en savoir plus sur et comment appliquer une solution ici (voir la dernière réponse): P>

http://core.trac.wordpress.org/ticket/11122 p>

Voir aussi: p>

https://bugzilla.redhat.com/show_bug.cgi?id=885839 a> p> p>


3 commentaires

Pourquoi addhandler php5-script .php pourrait être exploité pour gérer un fichier .php.jpg? Le simple fait que l'extension de fichier a .php au milieu peut le faire manipuler par l'interprète PHP?


@kaneda Oui L'interprète n'ayant pas d'analyse uniquement pour .php et ignore quoi que ce soit après. Par exemple, vous pouvez utiliser blabla.php.blabla et il l'interprétera toujours comme script PHP.


@kaneda C'est une fonctionnalité de Mod_Mime qui correspondra à l'.php n'importe où dans le nom du fichier. httpd.apache.org/docs/2.2/mod/mod_mime.html# multipleext