Peut php shell être injecté dans une image? Comment serait-il?
Je me souviens avoir vu un exploit pour une image à la fonction de téléchargement, qui consistait à cacher malveillants code php à l'intérieur d'une image tiff.
Je suis en train de faire ma propre image, téléchargement du script, et je suppose que je vais devoir me protéger de cette possibilité. Sauf, que je n'ai aucune idée de comment ça pourrait fonctionner. Personne ne sait comment en php, shell caché à l'intérieur d'une image à l'exécution elle-même? Serait-il besoin d'être chargé d'une certaine façon?
Grâce.
Je suppose que le plus sûr moyen de les protéger des métadonnées serait de détruire l'image d'origine et de le recréer sur le serveur. Ce serait à son tour de protéger vos utilisateurs, comme des informations sensibles qui peuvent être stockées dans les métadonnées.
OriginalL'auteur GStock | 2011-02-24
Vous devez vous connecter pour publier un commentaire.
Re codage de l'image ne doit pas empêcher quelqu'un de téléchargement d'une coquille. Le seul moyen sûr de prévenir est de ré-encoder et analyser l'image pour la présence de balises php.
Pour un exemple de PHP PNG coquille qui va survivre ré-encodage
OriginalL'auteur Marty
Oui, il aurait besoin d'être chargées, probablement par une variable dans un chemin, par exemple:
Ils auraient pu aussi permis à l'utilisateur de définir l'ensemble du nom de fichier avec une .extension php donc ils devez faire c'est de le charger dans un navigateur.
Vérifier que
getimagesize()
ne retourne pas false, utilisez un nom de fichier aléatoire, et d'appliquer l'extension de fichier. Si possible, ne pas stocker l'image téléchargée dans un site web accessible à l'emplacement, comme il pourrait également contenir des JS et, par conséquent, être un XSS vecteur.Re-codage de l'image peut également vous permettre de bande de méchant de métadonnées et d'ordure à la fin qui est permise par plusieurs formats (JPEG par exemple)
pour enregistrer une image pas dans un site web accessible à l'emplacement n'a pas beaucoup de sens
la vérification de
getimagesize()
simplement les mauvaises herbes les plus blatent d'abord. Où il fait sens pour stocker les images dépend entièrement de l'application.Web-application, mec.
cette fin est une application web. C'est tout à fait concevable que l'image n'a pas besoin d'être accessible par le web, par exemple si elle est envoyée par courriel.
OriginalL'auteur Long Ears
Il existe quelques méthodes pour vous protéger de ces tours. Vérifier ici
Également lire cette article qui explique l'attaque et les moyens de la combattre.
Le principal point souligné dans ces est l'utilisation de basename fonction en php pour reporter de telles attaques.
OriginalL'auteur ayush
Je sais qu'il y a un moyen (ou était) un moyen pour enregistrer un fichier php comme
.gif
et exécuter le code. Dans un exploit que j'ai vu sur la page de téléchargement le type mime est défini comme un GIF et l'image a été chargée avec quelque chose à l'effet de:require('myimage.gif');
Quandmyimage.gif
était en fait un fichier PHP rebaptisé.gif
, y compris le fichier à l'exécution de l'php de la charge utile, sinon le fichier est juste un type normal gif. J'ai vu cet exploit pour un script d'upload, le hacker a également hex éditémyimage.gif
de sorte que les octets47 49 46 38 39
précédé le reste du fichier. Ces octets sont un GIF en-tête et susceptible de tromper l'PHP en pensant que le fichier a été un GIF permettant le fichier PHP pour être téléchargé en contournant l'avance "' type de fichier de vérification. Cela pourrait facilement être fixé par l'établissement de meilleures contrôle des fichiers à ce que la totalité du fichier est légitime. Le moyen le plus facile je pense, serait d'essayer de charger l'image avec GD et voir si elle a un message d'erreur. Je ne pense pas que GD à l'exécution de l'PHP charge utile, mais je ne suis pas sûr, vous devez le tester. Je suppose presque le même exploit qui a été fait ou qui pourrait être fait pour une image tiff ou tout type de fichier.Afin de vous assurer que votre script n'est pas exploitée, je voudrais prendre ces mesures.
1) Définir quelques types de fichiers que vous pouvez faire
Array('.png', '.jpg', '.txt', 'etc')
si elle n'est pas dans le tableau NE le permettent PAS. Même si vous interdisez.php
, il y a encore.php3, .php5
etc que les travaux sur certains serveurs.2) Gaard contre
myimage.php.gif
en enregistrant le fichier téléchargé en un md5 (ou un rand nom) du nom de fichier (à l'exclusion du type de fichier) doncmyimage.php.gif
deviendraitef0ca703846cdb7a0131ac2889304a27.gif
3) Vérification de l'intégrité du fichier, assurez-vous que l'en-tête et le reste du fichier est légitime.
4) Ne pas utiliser
require('myimage.gif');
au lieu de l'imprimer du contenuOriginalL'auteur Lienau
Vous pouvez encoder web obus dans une image png, si vous faites ce droit, il devra être en mesure de survivre à la ré-encodage.
ont un regardez cette
OriginalL'auteur ElusiveN
Si vous utilisez uniquement le GD fonctions permettant de manipuler les images que vous devriez être ok.
Pour être sur le côté sécuritaire, vous pouvez convertir toutes les images à un format spécifique que vous pouvez envisager de "coffre-fort" ( j'aime PNG ou JPG, selon si le mode de sortie est à l'affichage dans un navigateur ou une sorte de salut-qualité d'impression). Aussi, n'utilisez jamais le imoage nom fourni par l'utilisateur sur votre propre système de fichiers. De cette façon, il ne sera pas en mesure de mettre bizarre de données dans le nom de fichier.
Pour être encore plus sûr, vous pouvez utiliser la ligne de commande imagemagik utilitaire de conversion. C'est à la fois plus rapide et plus sûr.
OriginalL'auteur Quamis
Je ne sais pas à propos de cet exploit, mais généralement exploits comme cela faire usage de bugs dans le logiciel de chargement de l'image. Si PHP, ou plus exactement, la bibliothèque qui charge l'image TIFF, allouera un montant incorrect de la mémoire pour stocker l'image, il pourrait essayer de charger l'image dans le moins d'espace mémoire que est réservé. Cela s'appelle un dépassement de mémoire tampon.
Qui signifie également qu'une partie de l'image est chargée dans un morceau de la mémoire qui n'est pas attribuée pour l'image. Cette partie pourrait obtenir exécuté parce qu'il pourrait avoir en fait été réservé pour le code.
Ces types de problèmes peuvent survenir lorsqu'il y a un bug dans la bibliothèque d'images. Je pense qu'un bug comme cela existait pour les GIFs dans IE 5. La quantité de mémoire qui a été allouée n'était pas déterminée par la taille réelle du fichier, mais par la taille du fichier d'informations dans l'en-tête du fichier. Cela a permis aux gens de faire corrompre les fichiers gif, en terminant par un morceau de code qui a été écrit dans le segment de code de la procédure et pourrait être exécuté.
Pas de cours. L'image de la bibliothèque et certainement le code injecté dans le TIFF ne sera pas le code PHP, mais c'est grâce à PHP que d'un tel exploit. C'est une description plus générale de toute façon. Comme je l'ai dit, je ne suis pas au courant de toute un tel exploit en PHP.
OriginalL'auteur GolezTrol
Une excellente solution juste venu à mon esprit.
Si vous stockez vos images sur le serveur distinct/domaine/CDN/whatever a pas d'accès direct à votre code, vous avez votre mission accomplie!
OriginalL'auteur Your Common Sense
Oui, il peut. Faire un fichier tif (code php.tif) avec le code suivant
Puis dans un autre script
include 'php-code.tif'
;Voir par vous-même ce qui se fait...
Oui comprennent cela signifierait que l'attaquant a accès à votre serveur OU vous avez téléchargé le fichier vous-même comme un thème ou un plugin pour un cms... oups!
Maintenant la 2ème partie pour les protéger contre de telles attaques, bien que je ne pouvais pas trouver encore une solution fiable, qui fonctionne avec la plupart des Cms et impliquent pas de nier les listes de répertoires. Toujours à la recherche...
OriginalL'auteur adrian7
Moins qu'il y a un sérieux bug dans PHP de traitement d'image, je ne vois pas comment le code PHP dans une image ne pourrait jamais être interprétée simplement en travaillant avec elle, ou de l'afficher.
Cependant il y a des façons d'utiliser des images pour faire des Cross-Site-Scripting attaques sur les utilisateurs à l'aide d'Internet Explorer
Vous devez également faire attention à ce que les utilisateurs ne peuvent pas télécharger les images qui seront utilisées comme PHP entrée. Par exemple. être include()d pour une raison ou en cours de téléchargement avec une .extension php.
Apache Multivues pourrait même conduire à des images nommé comme image.php.jpg d'être exécuté dans certaines circonstances (même si je ne suis pas sûr à ce sujet).
OriginalL'auteur Andreas Gohr