Nascondere codice JavaScript all’interno di immagini

Se avete letto il mio precedente post sapete già come sia facile nascondere all’interno di normali immagini codice PHP. Il parser infatti non considera tutti i caratteri che stanno al di fuori dei tag “<?” e “?>”. Anche se questa tecnica non è nuova è interessante l’idea di utilizzare siti di image hosting come base per attacchi RFI.

I più attenti avranno sicuramente pensato che all’interno di immagini è possibile nascondere di tutto, basta pensare a quei semplici programmi di data hiding che accodano dati (di qualunque genere) ad immagini JPEG o GIF.
Partendo da questo presupposto ho iniziato a fare dei test per poter nascondere codice JavaScript all’interno di GIF: in questo caso non basta scrivere il codice all’interno delle immagini senza curarsi dei caratteri “speciali” perchè questi bloccano l’interprete JS all’interno dei browser restituendo “carattere illegale”. A questo punto i maggiori problemi sono due: effettuare l’escape dei caratteri speciali e far considerare, all’interprete JS, i primi 6 byte dell’header GIF come il nome di una variabile.
Per capire meglio vediamo com’è composto l’header di una immagine GIF:

  • 3 bytes “GIF” (in ASCII)
  • 3 bytes “87a” o “89a”
  • 2 bytes Larghezza logica dell’immagine
  • 2 bytes Altezza logica dell’immagine

Un semplice PoC:


Come si può vedere è stata usato “=1″ per rendere GIF89a una variabile e “/*” per commentare tutti i caratteri speciali. I bytes modificati sono quelli relativi alla larghezza e altezza dell’immagine così è molto probabile che dopo le modifiche risultino misure “strane” dell’immagine. Per risparmiare un carattere tentare di limitare la larghezza finale dell’immagine è possibile utilizzare “=/*” come proposto da thornmaker su ha.ckers.org

L’immagine di esempio, riportata sopra, è nato come 2×2 pixel con sfondo nero. La miglior cosa sarebbe creare una GIF con una figura o un disegno al suo interno in modo che i dati sull’effettiva larghezza e altezza siano validi (specifiche GIF89a, paragrafo 20).

Non solo il formato GIF si presta a questo tipo di usi, ma anche quello BMP ci viene incontro in quanto i primi bytes del suo header non contengono caratteri “speciali”:

  • 2 bytes “BM”(in ASCII)
  • 4 bytes grandezza in bytes dell’immagine (solitamente non usato)
  • 2 bytes spazio non utilizzato, ma deve essere impstato a 0

L’unico inconveniente del formato BMP si trova nei servizi di image hosting: nella quasi loro totalità, convertono le immagini BMP in PNG o JPG al momento dell’upload.

 

Nessun Commento.. Puoi essere il primo!

Lascia un Commento