Cacher du code dans une image en PHP - Goufablog
Goufablog

Geek, nouvelles technologies, société et jeux vidéos!
Aucune information sur l'auteur !
14
déc.
2014
Cacher du code dans une image en PHP
Technique - par Goufalite - 8656 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 :

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
Soyons clair, la différence entre les cookies et les images est que l'on peut avec les cookies tracer les internautes entre différents sites.

Par contre, ne soyez pas crédules, de nombreuses infolettres contiennent ce genre d'images afin de voir si vous avez ouvert le mail (par exemple) et un système de lien + redirection pour savoir si vous avez cliqué sur un lien.
Posté le 17 décembre 2014 à 12:26:35 par Goufalite
Commentaire jugé impertinent Afficher
Votre avis?
(Obligatoire)

Site et style réalisé par Goufalite
Reproduction interdite sans l'accord de l'auteur.