Ho trovato uno script PHP in un file GIF

È ansible che uno script PHP si trovi all'interno di un file GIF? Ne ho trovato uno quando ho aperto un file .gif in Notepad ++.

In realtà, ci sono un paio di cose che sono possibili (e comunemente usate per cose come i contatori di colpi).

Considera questo:

<img src="myPicture.php" /> 

myPicture.php potrebbe assomigliare a questo:

 <?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 ?> 

Quindi, l'output del tuo script PHP non è ASCII text (o HTML), è il binario di un file .png. Quindi l'intestazione () è impostata per indicare questo, e le funzioni imagepng () mostrate effettivamente producono i dati di image PNG non elaborati. (esempio sollevato da qui ).

Un'altra opzione, citata da altri, riguarda un tag image "normale":

 <img src="myPicture.png" /> 

Si noti che questo termina con ".png". In questo caso, il server Web dovrebbe essere configurato in modo da analizzare non solo i file .php come codice PHP eseguibile, ma anche i file .png. Il tuo codice sembrerebbe lo stesso, ma sarebbe racchiuso tra "myPicture.png" anziché ".php".

Era probabilmente uno script PHP lato server con estensione .gif che serviva un'image client gif dynamic. Il server è appena configurato per eseguire file .gif come script PHP (o, più probabilmente, solo quel file .gif specifico).

Questo è abbastanza comune. Lo troverai nei siti web che hanno immagini dinamiche.

Come SysAdmin quando trovo script PHP con estensione image (.gif, .jpg, .png) , di solito significa che qualcuno ha fatto irruzione in un'applicazione PHP e sta nascondendo il codice dannoso all'interno di quel file.

Il loro codice può essere eseguito chiamando la CLI di PHP o semplicemente includendo il file da qualsiasi altro script PHP. Ricorda che includi e richiedi che non ti interessa davvero il nome del file. Quest'ultimo è il caso più comune che abbia mai visto.

Dovresti controllare il codice stesso e vedere cosa fa. Non dirlo, leggi prima .

tecnicamente sì un esempio di questo utilizzo potrebbe essere un server che vuole hide la vera fonte di un'image e magari fare un po 'di throttling (come quelli di image shack – questa image è stata vista troppe volte i messaggi di oggi)

La situazione richiederebbe a apache di fare in modo che php gestisca l'estensione del file gif. il php all'interno del file farebbe quindi qualsiasi controllo desiderato, quindi submit le intestazioni per il tipo mime image / gif, dimensione del file, ecc. e quindi submit il file con file_get_contents (o metodo simile)

Ho visto questo fatto (anche se di solito con l'estensione .jpg) per servire le immagini da un database …

Supponendo che usi Apache, devi solo dire ad apache di elaborare quel file specifico come se fosse php.

Trovare php in un file GIF potrebbe indicare che qualcuno sta tentando di attaccare il tuo server. Questa è una lettura interessante su upload di file sicuri e php.

La maggior parte dei formati di immagini ha segmenti in cui l'autore può memorizzare alcuni commenti o altre informazioni che non sono i dati reali dell'image.

Se memorizzi del codice PHP in un segmento di questo tipo, lo carichi su un server come .php e il server controlla solo i dati di image validi (come getimagesize function getimagesize ), viene accettato come image valida. Ma quando viene richiesto, viene eseguito il codice PHP all'interno del segmento dei commenti.

Pubblicare il codice PHP sarebbe utile per determinare l'intento dello script. Mentre, come ha sottolineato la maggior parte dei commentatori, potrebbe esserci una spiegazione benevola, non escluderei comunque imbrogli less innocenti.

Il caso benigno : lo script è in realtà pensato per l'output di un'image GIF e hai ottenuto il codice invece a causa di un errore di configuration del server. Questo potrebbe accadere se:

  1. l'autore ha errato l'istruzione nel file .htaccess per trattare sia tutte le GIF che questo particolare file come PHP
  2. il webmaster ha sovrascritto il .htaccess con uno privo di istruzioni
  3. l'amministratore del server ha lasciato cadere un AllowOverride none nel suo httpd.conf disabilitando tutte le personalizzazioni dello AllowOverride none utente

Guarderei il tipo di funzioni utilizzate nel codice. Trattandosi di un file GIF, mi aspetto che lo script termini con un'istruzione imagegif($img) o magari seguita da imagedestroy($img) . Se questo è il caso, sembra probabile che lo script abbia l'intenzione di submit immagini GIF al browser.

Il caso del male : qualcuno ha caricato un mucchio di roba hacker mascherata come GIF, aspettandosi in seguito di lanciarlo usando qualsiasi metodo che gli possa dare accesso alla linea di command: una eval() non protetta, un buco altrove nel server o anche una vulnerabilità in un demone totalmente non correlato in esecuzione sulla stessa macchina. Il suo vantaggio in questo caso sarebbe che lo script sarebbe memorizzato in una posizione nota derivabile dalla radice del server. Ci sono script là fuori che includono file manager completi e set di utilità in un unico pacchetto – solo allo scopo di creare scompiglio. Di nuovo, guarda la fonte: se inizia con uno shebang (qualcosa come #!/bin/php /usr/htdocs/myfakeimagefile.gif ) è sicuramente pensato per essere eseguito dalla row di command. La mancanza di shebang non implica tuttavia che non possa essere eseguito come uno script: finché si sa where si trova PHP, where lo script è e può accedere a un prompt dei comandi può probabilmente avviarlo comunque.

Puoi convertire in formato "bmp" e tornare indietro – per ripulire gli script all'interno dei metadati delle immagini caricate. Bmp non ha metadati ma ha trasparenza alfa e qualità al 100%. In PHP puoi usare la class imagick:

 /* 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; } 

La maggior parte dei siti web di hosting di immagini consente l'inclusione di script nelle immagini: ad es .: flickr, livejournal o converte l'image in un formato non valido come jpeg, ad es. Google, ecc. Questo script risolve questo problema. I tuoi commenti sono ben accetti! 🙂 Saluti, Matt.

L'estensione del file non deve essere uguale al contenuto del file, quindi sì è ansible salvare un file di text o un file PHP con l'estensione .gif. Non verrà visualizzato (di solito?) Come un'image in un browser o in un'altra applicazione, né è probabile che venga eseguito come file PHP su un server Web a less che il server non sia stato specificamente configurato in questo modo.

I vantaggi di farlo non mi sono chiari a less che non siano usati come un modo subdolo per provare ad eseguire codice PHP tramite un module di caricamento dell'image, where il server è stato configurato per eseguire file .gif come script (vale a dire qualsiasi estensione va).

Puoi sempre usare la riscrittura mod per modificare l'estensione del file se questo è quello che stai facendo?