12 juin 2026

FakePHPInfo : Transformez votre fonction phpinfo() en piège pour les attaquants

Une page phpinfo() exposée est une mine d'or pour un attaquant : adresse IP réelle, nom d'hôte, chemins d'accès. Et si on la transformait en appât redirigeant l'attaquant vers un pot de miel ?

FakePHPInfo

Quiconque s'intéresse aux systèmes et à la sécurité le sait : une page phpinfo() Oublier des informations sur un serveur de production est l'un des cadeaux les plus précieux que l'on puisse faire à un attaquant. C'est une mine d'informations, servie sur un plateau d'argent, qui nous révèle pratiquement tout sur notre infrastructure. Dans cet article, nous voulons inverser la tendance : au lieu de simplement les dissimuler, que diriez-vous de les utiliser comme… appâtC'est exactement l'idée. FakePHPInfo, un petit wrapper PHP que nous avons développé et que nous souhaitons partager avec vous.

Il peut être téléchargé sur GitHub et se compose d'un seul fichier phpinfo.php : https://github.com/MarcoMarcoaldi/fakephpinfo

Pourquoi phpinfo() est une mine d'or pour les attaquants

Lorsqu'un attaquant exécute la phase de reconnaissance contre une cible, une page phpinfo() L'accès public à ces informations leur fournit une mine d'informations précieuses. Parmi les plus importantes :

  • L'adresse IP réelle du serveur (la variable SERVER_ADDRCeci est particulièrement précieux lorsque le site est protégé par un CDN ou un WAF comme Cloudflare : connaître l’adresse IP d’origine permet de contourner complètement la protection et d’attaquer directement le serveur.
  • Le nom d'hôte réel de la machine, utile pour les déplacements latéraux et l'énumération DNS de l'infrastructure.
  • Les itinéraires absolus du système de fichiers (DOCUMENT_ROOT, include_path, emplacement du journal), précieux pour la construction de charges utiles ciblées et de LFI.
  • La liste complète des extensions téléchargées et directives de configuration, à partir desquels déduire les versions vulnérables et les fonctions dangereuses activées.

La règle d'or, évidemment, reste la même : ne jamais exposer phpinfo() en productionEt si, au lieu de simplement la retirer, nous pouvions retourner cette arme contre ceux qui nous attaquent ?

L'idée : la tromperie plutôt que la simple suppression

Le concept de tromperie La tromperie est l'un des piliers de la défense active moderne. Au lieu de simplement fermer une porte, on construit derrière elle une pièce factice, plausible et gardée. Un attaquant qui trouve une page phpinfo() Si elle paraît réelle, le système la considérera comme authentique et agira en conséquence : il enregistrera l’adresse IP, l’utilisera pour ses tentatives de contournement et l’intégrera à ses outils automatiques.

Et si cette adresse IP et ce nom d'hôte pointaient vers un pot de miel ? Nous obtiendrions alors quatre résultats simultanément :

  1. Dévier l'attaquant loin de l'infrastructure réelle.
  2. Attirez-le à l'intérieur d'un système de leurres surveillé, où il peut étudier calmement ses techniques et ses outils.
  3. Faites-le gaspiller du temps et des ressources contre une cible factice.
  4. Recueillir des renseignements sur les menacesAdresse IP, agent utilisateur, schéma d'attaque.

Comment fonctionne FakePHPInfo

L'opération est élégante dans sa simplicité. Le script génère une page phpinfo() Identique à l'original en tous points.À une différence près : toutes les occurrences du nom d’hôte et de l’adresse IP réels sont remplacées par des valeurs factices pointant vers notre honeypot. Tout le reste (version PHP, modules, chemins, directives) demeure parfaitement authentique, de sorte que la page ne suscite pas le moindre soupçon.

La première étape consiste à capturer la sortie réelle de phpinfo() en utilisant la mise en mémoire tampon de la sortie PHP, vous pouvez la manipuler avant de l'envoyer au navigateur :

ob_start();
phpinfo();
$output = ob_get_clean();

Le script détecte ensuite automatiquement toutes les véritables valeurs d'identification du serveur, en puisant dans de multiples sources afin de ne rien laisser au hasard :

$real_hostname    = gethostname();
$real_ip          = $_SERVER['SERVER_ADDR'] ?? gethostbyname($real_hostname);
$real_ipv6        = '::ffff:' . $real_ip;
$real_server_name = $_SERVER['SERVER_NAME'] ?? $real_hostname;
$real_http_host   = $_SERVER['HTTP_HOST']   ?? $real_hostname;

// Rimuove l'eventuale porta dall'HTTP_HOST prima della sostituzione
$real_http_host_no_port = preg_replace('/:\d+$/', '', $real_http_host);

À ce stade, une carte de substitution est construite sous la forme suivante : valeur réelle → valeur fictiveUn détail technique important : l’ordre compte. Les chaînes les plus longues et les plus spécifiques doivent être remplacées en premier. Pensez à l’adresse IPv6 mappée. ::ffff:1.2.3.4: si nous remplacions d'abord le simple 1.2.3.4, nous corromprions la représentation IPv6. Par conséquent, le script trie les substitutions par longueur décroissante :

// Ordina le chiavi per lunghezza decrescente: prima le stringhe più lunghe
uksort($replacements, function ($a, $b) {
    return strlen($b) - strlen($a);
});

$output = str_replace(
    array_keys($replacements),
    array_values($replacements),
    $output
);

echo $output;

La page modifiée est ensuite envoyée au navigateur. Pour l'attaquant, il s'agit d'une escroquerie pure et simple. phpinfo() Réel ; en fait, toute référence à l'infrastructure a été détournée.

Qu'est-ce qui est remplacé et qu'est-ce qui reste authentique ?

La philosophie consiste à se concentrer sur l'essentiel pour préserver une crédibilité maximale. Les éléments suivants sont remplacés :

  • La ligne "Système" en haut de la page (le nom d'hôte du noyau).
  • $_SERVER['SERVER_ADDR'] — l'adresse IP du serveur.
  • $_SERVER['SERVER_NAME'] — le nom de l'hôte virtuel.
  • $_SERVER['HTTP_HOST'] — la valeur de l'en-tête Host.
  • Toute autre occurrence du nom d'hôte ou de l'adresse IP réelle dans le reste de la sortie, y compris le nom d'hôte FQDN renvoyé par php_uname('n'), qui peut différer de gethostname().

Au contraire, il reste parfaitement réel Tout le reste : version et build de PHP, extensions chargées et leur configuration, directives php.ini (Valeurs locales et maîtres), chemins du système de fichiers, variables d'environnement et en-têtes de requêtes. C'est précisément cette authenticité sous-jacente qui rend la supercherie convaincante.

Configuration et installation

La configuration se résume à quelques lignes en haut du fichier. Il suffit d'entrer les valeurs pour votre honeypot :

// === CONFIGURAZIONE: inserisci qui i valori fittizi (honeypot) ===
$fake_hostname = 'honeypot.example.com';
$fake_ip       = '192.168.100.50';
$fake_ipv6     = '::ffff:192.168.100.50';

// Opzionale: porta fittizia (lascia null per mantenere quella reale)
$fake_port     = null;

Guide rapide des paramètres :

  • $faux_nom_d'hôte: le nom d'hôte (FQDN) de votre pot de miel, qui remplacera le vrai.
  • $fausse_ip: l'adresse IPv4 du pot de miel.
  • $fausse_ipv6: la représentation mappée IPv6 de l'adresse IP fictive, normalement ::ffff: suivi par $fake_ip.
  • $faux_port: une porte factice optionnelle. Il est recommandé de la laisser ouverte. nullChanger le port visible risque souvent de paraître plus suspect qu'utile.

Pour le déploiement, il suffit de télécharger le fichier sur le serveur web en utilisant le nom phpinfo.php (ou tout autre nom) dans un emplacement où un attaquant est susceptible d'espionner : la racine du Web, ou des chemins « appâts » comme /info/ o /debug/.

Une approche encore plus raffinée consiste à afficher la page de manière conditionnelle: par .htaccess ou bien la configuration du serveur web peut être effectuée de manière à ce que les adresses IP non autorisées reçoivent la version factice, tandis que votre équipe — connectée à partir d'adresses IP autorisées — voit la version factice en cas de besoin. phpinfo() réel.

Considérations de sécurité

Il est important d'être honnête quant aux limites de cet outil, car la tromperie est une arme qui doit être maniée avec discernement :

  • FakePHPInfo est un aide à la désinformation et renseignement sur les menacesCela ne remplace pas le durcissement. La mesure la plus efficace reste de ne pas exposer du tout. phpinfo()À utiliser uniquement comme appât intentionnel et surveillé.
  • Toutes les données non identifiantes (version PHP, extensions, chemins, directives) restent Reali et ces informations sont toujours divulguées. Assurez-vous que cela soit acceptable dans votre modèle de menaces.
  • La substitution est une simple opération sur les chaînes de caractères : si votre nom d’hôte réel est une sous-chaîne très courte ou courante, vérifiez le résultat pour vous assurer qu’aucun fragment de texte sans rapport n’est modifié accidentellement.

Conclusions

FakePHPInfo est né d'un principe qui nous est cher : la sécurité exige non seulement de la défense, mais aussi une contre-attaque intelligente . Une page présentant une vulnérabilité peut, en quelques lignes de code seulement, devenir un outil de collecte d'informations et un piège qui fait perdre du temps et des ressources à ceux qui tentent de nous attaquer. C'est une forme de tromperie appliquée de la manière la plus simple et la plus économique qui soit.

Cet outil est distribué sous licence GNU GPL v2 (ou ultérieure) et son utilisation et sa modification sont libres. Nous vous encourageons à l'intégrer à votre stratégie de défense active et, pourquoi pas, à contribuer à son amélioration. Car, parfois, la meilleure façon de protéger une infrastructure est de faire croire à l'adversaire qu'il l'a déjà découverte.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

AVIS DE NON-RESPONSABILITÉ, Mentions légales et droits d'auteur. Red Hat, Inc. détient les droits sur Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale de la AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la Fondation FreeBSD ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt ; Oracle Corporation détient les droits sur Oracle®, MySQL®, MyRocks®, VirtualBox® et ZFS® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; PostgreSQL® est une marque déposée de PostgreSQL Global Development Group ; SQLite® est une marque déposée de Hipp, Wyrick & Company, Inc. ; KeyDB® est une marque déposée d'EQ Alpha Technology Ltd. ; Typesense® est une marque déposée de Typesense Inc. ; REDIS® est une marque déposée de Redis Labs Ltd ; F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB ; HAProxy® est une marque déposée de HAProxy Technologies LLC ; Traefik® est une marque déposée de Traefik Labs ; Envoy® est une marque déposée de CNCF ; Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited ; Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal® ; Shopify® est une marque déposée de Shopify Inc. ; BigCommerce® est une marque déposée de BigCommerce Pty. Ltd.; TYPO3® est une marque déposée de la TYPO3 Association; Ghost® est une marque déposée de la Ghost Foundation; Amazon Web Services, Inc. détient les droits sur AWS® et Amazon SES® ; Google LLC détient les droits sur Google Cloud™, Chrome™ et Google Kubernetes Engine™ ; Alibaba Cloud® est une marque déposée d'Alibaba Group Holding Limited ; DigitalOcean® est une marque déposée de DigitalOcean, LLC ; Linode® est une marque déposée de Linode, LLC ; Vultr® est une marque déposée de The Constant Company, LLC ; Akamai® est une marque déposée d'Akamai Technologies, Inc. ; Fastly® est une marque déposée de Fastly, Inc. ; Let's Encrypt® est une marque déposée d'Internet Security Research Group ; Microsoft Corporation détient les droits sur Microsoft®, Azure®, Windows®, Office® et Internet Explorer® ; Mozilla Foundation détient les droits sur Firefox® ; Apache® est une marque déposée de The Apache Software Foundation ; Apache Tomcat® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée de PHP Group ; Docker® est une marque déposée de Docker, Inc. Kubernetes® est une marque déposée de The Linux Foundation ; OpenShift® est une marque déposée de Red Hat, Inc. ; Podman® est une marque déposée de Red Hat, Inc. ; Proxmox® est une marque déposée de Proxmox Server Solutions GmbH ; VMware® est une marque déposée de Broadcom Inc. ; CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV ; Grafana® est une marque déposée de Grafana Labs ; Prometheus® est une marque déposée de The Linux Foundation ; Zabbix® est une marque déposée de Zabbix LLC ; Datadog® est une marque déposée de Datadog, Inc. ; Ceph® est une marque déposée de Red Hat, Inc. ; MinIO® est une marque déposée de MinIO, Inc. ; Mailgun® est une marque déposée de Mailgun Technologies, Inc. ; SendGrid® est une marque déposée de Twilio Inc. Postmark® est une marque déposée d'ActiveCampaign, LLC ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Hetzner® est une marque déposée de Hetzner Online GmbH ; OVHcloud® est une marque déposée d'OVH Groupe SAS ; Terraform® est une marque déposée de HashiCorp, Inc. ; Ansible® est une marque déposée de Red Hat, Inc. ; cURL® est une marque déposée de Daniel Stenberg ; Facebook®, Inc. détient les droits sur Facebook®, Messenger® et Instagram®. Ce site n'est pas affilié, sponsorisé ou autrement associé à l'une des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées sont la propriété de leurs titulaires respectifs. MANAGED SERVER® est une marque déposée européenne de MANAGED SERVER SRL, dont le siège social est situé Via Flavio Gioia, 6, 62012 Civitanova Marche (MC), Italie et le siège opérationnel Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italie.

JUSTE UN MOMENT !

Vous êtes-vous déjà demandé si votre hébergement était nul ?

Découvrez dès maintenant si votre hébergeur vous pénalise avec un site web lent digne des années 1990 ! Résultats immédiats.

Fermer le CTA
Retour en haut de page