Bir PHP komut bir GIF dosyası içinde olması mümkün mü? I + + not defteri bir. Gif dosyayı açtığında bir tane buldum.
Aslında, mümkün olan şeyler bir çift vardır (ve yaygın isabet sayaçları gibi şeyler için kullanılır.)
Bu düşünün:
<img src="myPicture.php" />
myPicture.php bu gibi görünebilir:
<?php
// Use PHP's GD image libraries.
// Create the image
$my_img = imagecreate( 200, 80 );
// set image attributes
// Set the header to indicate we're sending image data, rather than ASCII
header( "Content-type: image/png" );
// Output the image
imagepng( $my_img );
// cleanup
?>
Yani, PHP komut dosyası çıktı bir. Png dosyası ikili, ASCII metin (ya da HTML) değildir. Böylece header () bu belirtmek için ayarlanır ve imagepng () işlevleri ham PNG resim veri aslında çıkış gösterilir. (Örneğin, here kaldırılır).
Diğerleri de söylediğim başka bir seçenek, bir "normal" resim etiketi içerir:
<img src="myPicture.png" />
Bu ". Png" biter dikkat edin. Bu durumda, web sunucusu değil sadece çözümlü böylece çalıştırılabilir PHP kodu olarak. Yapılandırılmalıdır php dosyaları var, ama aynı zamanda olur. Png dosyaları. Sizin kod aynı görünür, ama o "myPicture.png" yerine ". Php" sarılmış olacaktır.
Muhtemelen müşterilerine dinamik bir gif resmini yaptı. Gif uzantısıyla bir sunucu tarafı komut dosyası PHP oldu. Sunucu sadece çalıştırmak için yapılandırıldı. Gif dosyaları PHP (veya daha büyük olasılıkla, sadece belirli. Gif dosyası).
Bu oldukça yaygındır. Siz dinamik görüntüler var web siteleri bulacaksınız.
Ben görüntü uzantısı (. Gif,. Jpg,. Png) it usually means that somebody broke into a PHP Application and is hiding malicious code o dosya içindeki PHP betikleri bulmak bir sistem yöneticisi olarak.
Onların kod PHP CLI arayarak ya da sadece başka bir PHP komut dosyası dahil tarafından idam edilebilir. Içerir ve gerçekten dosyanın adının umurumda değil gerektirdiğini unutmayın. İkincisi gördüğüm en yaygın durumdur.
Bu kodu kendisi kontrol ve ne yaptığını görmek gerekir. Don't run it, read it first.
En resim formatları yazar gerçek görüntü veri olmayan bazı açıklamaları veya başka bilgiler saklayabilirsiniz segmentleri var.
Eğer böyle bir açıklama segmentinde bazı PHP kodu kaydediniz, .php
ve sunucu sadece (geçerli görüntü verisi için kontrol olarak bir sunucuya yüklemek getimagesize
fonksiyonu gibi a> yapar ), geçerli bir görüntü olarak kabul ediliyor. Bu talep olduğunda ancak, açıklama segmentinde içinde PHP kodu yürütülür.
PHP kodu gönderme script niyet belirlemede yardımcı olacaktır. Commenters en belirttiği gibi, ona bir iyi huylu bir açıklama olabilir, olsa da ben hala devam az masum maskaralık kural olmaz.
The benign case: komut gerçekten çıkışında bir GIF görüntü gerekiyordu ve çünkü bir sunucu yanlış yapılandırma yerine kodu var olduğunu. Bu olabilirdi eğer:
AllowOverride none
düştüBen kodu kullanılan fonksiyonların türüne bakmak olacaktır. Bu sözde bir GIF dosyası olmak, senaryo belki imagedestroy($img)
tarafından izlenen bir imagegif($img)
talimat ya da böyle, ile sonuna kadar beklenir. Bu durumda komut tarayıcıya çıkış GIF görüntüleri anlamına olması muhtemel görünüyor.
The evil case: Korumasız eval()
, bir delik: birileri korsan şeyler bir demet ona komut satırına erişim verebilir herhangi bir yöntemi kullanarak başlatmak için sonra bekliyor, bir GIF olarak maskelenmiş tarih başka bir yerde aynı makinede çalışan tamamen ilgisiz daemon sunucusu ya da bir açığı. Bu durumda Onun avantajı komut sunucunun root türeyebililirler bilinen bir yerde saklanır olacağını olacaktır. Tek bir paket içinde tam bir dosya yöneticileri ve araçlardan setleri dahil orada komut vardır - sadece tahribat yapmak amacıyla. Yine, kaynağına bakmak: Bir shebang kesinlikle komut satırından çalıştırmak için pinti (#!/bin/php /usr/htdocs/myfakeimagefile.gif
gibi bir şey) ile başlıyorsa. Shebang eksikliği ancak bir komut dosyası olarak çalıştırabilirsiniz olamaz anlamına gelmez: sürece PHP komut dosyası olduğu, ve bir komut istemi erişebilirsiniz nerede kimse bilmiyor muhtemelen yine de başlatabilirsiniz.
Bir gif dosyası php bulma birisi sunucu konum saldırı çalışıyor gösterebilir. This güvenli dosya yükleme ve php ile ilgili ilginç bir okuma olduğunu.
Siz "bmp" biçimine dönüştürmek ve yedekleyebilirsiniz - yüklenen görüntülerin meta veri içinde komut temizlemek için. Bmp meta veri yok ama alfa şeffaflık ve% 100 kalite var. PHP size Imagick'teki sınıfını kullanabilirsiniz:
/*
Cleanup injected scripts from imagick object "$insecure", making object safe next manipulations.
*/
function MakeImageSafe($insecure) {
global $configuration,$dic,$smarty;
$ImageMETAFormat=strtolower($insecure->getImageFormat());
$ImageMETAName=$insecure->getFilename();
//convert to bmp to remove injected php/js... and
if($ImageMETAFormat!="gif") {
$insecure->setImageFormat("bmp");
$insecure->writeImage("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
//get secure image
$original=new Imagick("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
//delete temporary bmp
unlink("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
}
else {
// convert each frame in animated gif and recreate the gif
$original=new Imagick();
foreach($insecure as $frame) {
$frame_delay=$frame->getImageDelay();
//get timing
$frame_page=$frame->getImagePage();
//get offsets and geometry of the frames
$frame->setImageFormat("bmp");
$frame->writeImage("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
$safeframe=new Imagick("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
$safeframe->setImageDelay($frame_delay);
$safeframe->setImagePage($frame_page['width'],$frame_page['height'],$frame_page['x'],$frame_page['y']);
$safeframe->setImageFormat("gif");
$original->addImage($safeframe->getImage());
unlink("{$configuration['tmp_path']}/{$ImageMETAName}.bmp");
}
}
//return safe object
return $original;
}
Çoğu resim barındırma siteleri görüntülerde komut dahil izin: örn: flickr, LiveJournal veya jpeg gibi bazı kötü formatında görüntü dönüştürme - örn: google, vb Bu script bu sorunu giderir. Yorumlarınızı bekliyoruz! :) Şerefe, Matt.
Dosya uzantısı dosya içeriklerinin aynı olması gerekmez, bu yüzden evet. Gif uzantılı bir metin dosyası veya PHP dosyayı kaydetmek mümkündür. O değil (genellikle?) Bir tarayıcı veya başka bir uygulama bir görüntü olarak gösterir, ve sunucunun özel olarak bu şekilde yapılandırılmış sürece ne de bir web sunucusu üzerinde bir PHP dosyası olarak çalıştırmak olasıdır.
Bu sunucu komut olarak. Gif dosyaları çalıştırmak için yapılandırılmış olan bir görüntü yükleme formu aracılığıyla PHP kodu denemek ve yürütmek için sinsi bir yol olarak kullanılır (yani herhangi bir uzantısı gider) sürece bu yapmanın faydaları bana net değil.