Goufablog

Geek, nouvelles technologies, société et jeux vidéos!
14
déc.
2014
Cacher du code dans une image en PHP
Technique - par Goufalite - 2256 hits

Suite à mon article sur le soi-disant danger des cookies sur le net, j'avais juste signalé qu'une image pouvait être aussi dangereuse. Je vais donc vous montrer ci-dessous qu'une simple image peut révéler pas mal d'informations sur votre ordinateur et surtout que l'on peut cacher du code derrière l'appel d'une image !

Simple image : IP et User-Agent

Nous allons commencer simplement : l'appel d'une image statique.

<img src='monimage.jpg' alt='Mon image !' />

Ce qui donne :

Mon image !

Rien de bien sorcier, mais quand l'image s'est affichée, voilà ce qui est apparu dans les logs de mon serveur :

MonAdresseIp - - [14/Dec/2014:21:48:28 +0100] "GET /monimage.jpg HTTP/1.1" 200 216023

Si vous avez Fiddler d'installé vous pouvez aussi voir ce que cette image transporte :

Je sais TOUT sur vous !
Je sais TOUT sur vous !

Rien qu'en affichant une image j'ai donc :

  • votre adresse IP, et la géolocalisation qui en découle
  • votre User-Agent, en gros le navigateur que vous utilisez

C'est bien pour commencer, d'ailleurs c'est comme ça que l'on génère des statistiques de visites sur les sites web.

Se faire passer pour une image

On va utiliser la librairie GD de PHP pour faire des manipulations sur les images, donc on va utiliser l'appel :

<img src='monscript1.php' alt='Mon image !' />

et le contenu de monscript1.php :

<php // Je fais croire au navigateur que je suis // une image qui peut changer header("Content-Type: image/jpg"); header("Cache-control: no-store,must-revalidate,no-cache"); // Je charge et fais passer l'image dans le code $img = imagecreatefromjpeg("monimage.jpg"); imagejpeg($img); // libération de la ressource imagedestroy($img); exit; ?>

Ce qui donne :

Mon image !

A vous de mettre dans le code une façon plus subtile de récupérer l'IP ou l'User-agent, le temps de navigation,...

Par contre, l'appel d'un script dans une balise img affiche une image ? Whaou ! Cependant il y a un petit souci : l'appel à un script n'est pas très discret... On va donc utiliser le mécanisme d'URL Rewriting d'Apache :

RewriteEngine On RewriteRule ^monscript\.jpg$ %{SCRIPT_URL}script/monscript.php [L]

Ainsi on peut utiliser la syntaxe suivante sans problème :

<img src='monscript1.jpg' alt='Mon image !' />

Ça ne vous suffit pas ? Regardez plutôt :

'Vous

Facile, rajouter dans le code précédent :

$text_color = imagecolorallocate($img, 233, 14, 91); imagestring($img, 5, 5, 5, 'Il est '.date("r"), $text_color);

C'est comme ça qu'il est possible de faire passer une information dynamique dans un contenu statique, un flux RSS par exemple !

A vous de faire des appels à une base ou à un fichier...

Passer un paramètre dans une image

Prenons un cas simple : vous avez une base de données de mails et vous souhaiteriez savoir quel mail est valide. Il suffit d'envoyer une image qui fera une interrogation serveur et qui passera le Hash MD5 du mail pour prouver que l'adresse en question a bien affiché l'image.

Nous allons encore utiliser la réécriture d'URL à la volée et quelques expressions régulières :

RewriteRule ^monimage-([1-9]+)\.jpg$ %{SCRIPT_URL}monimage.php?param=$1 [L]

Récuperer le paramètre dans le code PHP :

$var = $_GET["param"];

Et voilà le résultat :

<img src='monimage-1234.jpg' alt='Mon image paramétrée!' />
Mon Image avec paramètre

Vous pouvez modifier le numéro près du nom de l'image ci-dessus en l'ouvrant dans un nouvel onglet pour constater la prise en compte du paramètre.

Vous comprenez maintenant pourquoi les clients de messagerie cachent les images.

Prochainement : attention ce site utilise des images !

Nous avons vu comment cacher un comportement derrière une image que ce soit juste à son appel ou en mettant du code paramétré derrière. Là où les cookies représentent juste une paire clef/valeur, nous avons grâce aux images un comportement plus sournois car caché côté serveur. Et pendant la rédaction de cet article j'ai même appris que l'on pouvait y cacher du code Javascript !

+ Sources des images


Vous pouvez aussi lire :

GoufaliteGoufalite - Site Web - Steam - Twitter
Rédacteur et programmeur principal du Goufablog. Ingénieur de profession et avide de connaissances technologiques et scientifiques il partage son savoir à travers ces différents articles. Plus de renseignements sur la page de contact.
RSS Voir ses articles...
CC-BY-SACet article est protégé par une licence CC-BY-SA.


Tags : gd, image, php, script
Delicious   Facebook   Commentaires(2) | Permalink
RSS:Commentaires du billet Il y a 2 commentaires.
Posté le 15 décembre 2014 à 23:52:00 par Altair
Commentaire jugé impertinent Afficher
[+] -13 [-] | Signaler
Posté le 17 décembre 2014 à 12:26:35 par Goufalite
Commentaire jugé impertinent Afficher
[+] -15 [-] | Signaler
Votre avis?
(Obligatoire)

Site et style réalisé par Goufalite
Reproduction interdite sans l'accord de l'auteur.
Valid XHTML 1.0 Transitional Optimisé pour FireFox 2
avec une résolution 1024*768