Nascondere codice PHP all’interno di immagini

Molti servizi di upload “casalingo” utilizzano solo il mime type resituito dalla funzione getimagesize() per controllare se un file è tra quelli consentiti in upload. In base a questo concetto si è arrivati alla conclusione che iniettando all’interno di un’immagine GIF codice PHP e rinominando poi il file in .php si riesce comunque ad effettuare l’upload perchè il mime type rimane inalterato in image/gif.
In questo modo una volta salvato il file sul server, senza averne cambiato l’estensione e potendolo raggiungere direttamente, sarà possibile eseguire il codice inserito all’interno dello stesso.

Ovviamente la cosa si è diffusa in rete e c’è chi ha scritto pure un documento sull’argomento, non mi sono soffermato più di tanto sugli esempi ma devo dire che può essere utile per capire quali sono i problemi derivanti da un sistema di upload pubblico.

Nell’esempio di RSnake il codice PHP viene messo in parti più o meno casuali dell’immagine GIF e vengono usati i commenti “/*” e “*/” perchè ci sono stati problemi di parsing con i dati binari che compongono l’immagine stessa. Personalmente ho creato una semplice immagine GIF di 1×1 pixel, in formato GIF89a il quale permette l’uso dei metadati, e ho salvato dentro ad essa un commento che altro non era che del codice PHP:Hide PHP code into GIF image
A questo punto ho rinominato il file in .php ed ho provato a far effettuare il parsing a mod_php sia in versione 4 che 5 e non c’è stato nessun problema. L’unico inconveniente, se così si vuole chiamare è che il parser riconosce solo il codice all’interno di “<?php ?>” quindi tutti i caratteri ASCII che compongono l’immagine saranno mandati direttamente in output:

PHP code into GIF image

Se il file GIF rinominato .php viene eseguito senza problemi dal parser PHP vuol dire che se cerco di includere l’immagine originale, con il commento che contiene codice PHP, tramite include() o require() questo verrà eseguito: si possono, quindi, usare file di immagine (GIF, PNG e JPEG) per eseguire codice tramite RFI (Remote File Inclusion). A questo punto un qualsiasi servizio di image hosting come ImageShack, Flickr, Zooomr e tanti altri può trasformarsi inconsapevolmente in un hoster di codice per RFI.
Come già detto, per ospitare codice PHP in una immagine, è possibile utilizzare, oltre al formato GIF, anche JPEG e PNG. Per farlo sarà necessario solamente utilizzare i metadati previsti dai due formati.

 

2 Commenti a 'Nascondere codice PHP all’interno di immagini'

Segui i commenti sottoscrivendo il feed RSS oppure TrackBack a 'Nascondere codice PHP all’interno di immagini'.

  1. Really good ;)

  2. xsfrances

    ciao complimenti XD

    vorrei mettere su un immagine gif un codice php quello
    phpinfo()
    volevo sapere come posso fare…

    un altra cosa essendo che ho un forum che usa phpbb3
    ce il modo per fare questo
    e se si posso fare in modo che non venga fatto…

    thx aspetto tue risposte…^^

:: Trackbacks/Pingbacks ::

Nessun Trackbacks/Pingbacks

Lascia un Commento