12 Giugno 2026

FakePHPInfo: trasforma il tuo phpinfo() in una trappola per attaccanti

Una pagina phpinfo() esposta è oro per chi attacca: IP reale, hostname, percorsi. E se la trasformassimo in un’esca che dirotta l’attaccante verso un honeypot?

FakePHPInfo

Chiunque si occupi di sistemistica e sicurezza lo sa: una pagina phpinfo() dimenticata su un server di produzione è uno dei regali più graditi che possiamo fare a un attaccante. È informazione pura, servita su un piatto d’argento, che racconta praticamente tutto della nostra infrastruttura. In questo articolo vogliamo ribaltare la prospettiva: invece di limitarci a nasconderla, e se la usassimo come esca? È esattamente l’idea alla base di FakePHPInfo, un piccolo wrapper PHP che abbiamo sviluppato e che vogliamo condividere con voi.

Lo si può scaricare su GitHub ed è composto da un unico file phpinfo.php https://github.com/MarcoMarcoaldi/fakephpinfo

Perché phpinfo() è una miniera d’oro per chi attacca

Quando un attaccante effettua la fase di reconnaissance contro un bersaglio, una pagina phpinfo() raggiungibile pubblicamente gli consegna informazioni di valore enorme. Tra le più critiche:

  • L’indirizzo IP reale del server (la variabile SERVER_ADDR). Questo è particolarmente prezioso quando il sito è protetto da una CDN o da un WAF come Cloudflare: conoscere l’IP di origine permette di scavalcare completamente la protezione e colpire il server in modo diretto.
  • L’hostname reale della macchina, utile per il movimento laterale e per l’enumerazione DNS dell’infrastruttura.
  • I percorsi assoluti del filesystem (DOCUMENT_ROOT, include_path, posizione dei log), preziosi per costruire payload e LFI mirati.
  • L’elenco completo delle estensioni caricate e delle direttive di configurazione, da cui dedurre versioni vulnerabili e funzioni pericolose abilitate.

La regola aurea, ovviamente, resta una sola: non esporre mai phpinfo() in produzione. Ma se invece di limitarci a rimuoverla potessimo girare l’arma contro chi ci attacca?

L’idea: deception invece di semplice rimozione

Il concetto di deception (inganno) è uno dei pilastri della difesa attiva moderna. Anziché chiudere semplicemente una porta, gli costruiamo dietro una stanza finta, plausibile e sorvegliata. Un attaccante che trova una pagina phpinfo() apparentemente reale la considererà autentica e agirà di conseguenza: salverà l’IP, lo userà per i suoi tentativi di bypass, lo darà in pasto ai suoi tool automatici.

E se quell’IP e quell’hostname puntassero a un honeypot? A quel punto avremmo ottenuto quattro risultati in un colpo solo:

  1. Deviare l’attaccante lontano dall’infrastruttura reale.
  2. Attirarlo dentro un sistema-esca monitorato, dove studiare con calma le sue tecniche e i suoi strumenti.
  3. Fargli sprecare tempo e risorse contro un bersaglio finto.
  4. Raccogliere threat intelligence: IP di provenienza, user agent, pattern di attacco.

Come funziona FakePHPInfo

Il funzionamento è elegante nella sua semplicità. Lo script genera una pagina phpinfo() identica all’originale in ogni dettaglio, con un’unica differenza: tutte le occorrenze dell’hostname e degli indirizzi IP reali vengono sostituite con valori fittizi che puntano al nostro honeypot. Tutto il resto — versione di PHP, moduli, percorsi, direttive — rimane assolutamente autentico, così la pagina non desta il minimo sospetto.

Il primo passo è catturare l’output reale di phpinfo() tramite l’output buffering di PHP, per poterlo manipolare prima di inviarlo al browser:

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

Successivamente lo script rileva in automatico tutti i valori identificativi reali del server, attingendo a più fonti per non lasciare nulla al caso:

$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);

A questo punto viene costruita una mappa di sostituzioni nella forma valore reale → valore fittizio. Qui c’è un dettaglio tecnico importante: l’ordine conta. Le stringhe più lunghe e specifiche devono essere sostituite per prime. Pensate all’indirizzo IPv6 mappato ::ffff:1.2.3.4: se sostituissimo prima il semplice 1.2.3.4, corromperemmo la rappresentazione IPv6. Per questo lo script ordina le sostituzioni per lunghezza decrescente:

// 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 pagina modificata viene infine inviata al browser. Per l’attaccante è in tutto e per tutto una phpinfo() reale; in realtà ogni riferimento all’infrastruttura è stato dirottato.

Cosa viene sostituito e cosa resta autentico

La filosofia è quella di toccare il minimo indispensabile per mantenere la massima credibilità. Vengono sostituiti:

  • La riga “System” in cima alla pagina (l’hostname del kernel).
  • $_SERVER['SERVER_ADDR'] — l’IP del server.
  • $_SERVER['SERVER_NAME'] — il nome del virtual host.
  • $_SERVER['HTTP_HOST'] — il valore dell’header Host.
  • Qualsiasi altra occorrenza dell’hostname o dell’IP reale nel resto dell’output, compreso l’hostname FQDN restituito da php_uname('n'), che può differire da gethostname().

Resta invece perfettamente reale tutto il resto: versione e build di PHP, estensioni caricate e relativa configurazione, direttive del php.ini (valori locali e master), percorsi del filesystem, variabili d’ambiente e header della richiesta. È proprio questa autenticità di contorno a rendere l’inganno convincente.

Configurazione e installazione

La configurazione si riduce a poche righe in cima al file. Basta inserire i valori del proprio 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;

Una breve guida ai parametri:

  • $fake_hostname: l’hostname (FQDN) del vostro honeypot, che sostituirà quello reale.
  • $fake_ip: l’indirizzo IPv4 dell’honeypot.
  • $fake_ipv6: la rappresentazione IPv6-mapped dell’IP fittizio, normalmente ::ffff: seguito da $fake_ip.
  • $fake_port: una porta fittizia opzionale. Il consiglio è di lasciarla a null: cambiare la porta visibile rischia spesso di apparire più sospetto che utile.

Per il deployment è sufficiente caricare il file sul web server con il nome phpinfo.php (o qualsiasi altro nome) in una posizione in cui un attaccante probabilmente andrà a curiosare: la web root, oppure percorsi “ghiotti” come /info/ o /debug/.

Un approccio ancora più raffinato consiste nel servire la pagina in modo condizionale: tramite .htaccess o la configurazione del web server si può fare in modo che gli IP non in whitelist ricevano la versione fittizia, mentre il vostro team — connesso dagli IP autorizzati — veda all’occorrenza la phpinfo() reale.

Considerazioni di sicurezza

Vale la pena di essere onesti sui limiti dello strumento, perché la deception è un’arma che va maneggiata con consapevolezza:

  • FakePHPInfo è un ausilio di inganno e threat intelligence, non un sostituto dell’hardening. La misura più efficace in assoluto resta non esporre affatto phpinfo(). Usatelo solo come esca intenzionale e monitorata.
  • Tutti i dati non identificativi (versione di PHP, estensioni, percorsi, direttive) restano reali e vengono comunque divulgati. Assicuratevi che questo sia accettabile nel vostro modello di minaccia.
  • La sostituzione è una semplice operazione su stringhe: se il vostro hostname reale è una sottostringa molto corta o comune, verificate l’output per accertarvi che non vengano alterati per errore frammenti di testo non correlati.

Conclusioni

FakePHPInfo nasce da un principio che ci sta a cuore: in sicurezza non bisogna pensare solo in difesa, ma anche in contrattacco intelligente. Una pagina che normalmente è una vulnerabilità può diventare, con poche righe di codice, uno strumento di raccolta informazioni e una trappola che fa perdere tempo e risorse a chi prova a colpirci. È deception applicata nel modo più semplice ed economico possibile.

Lo strumento è rilasciato sotto licenza GNU GPL v2 (o successiva) ed è liberamente utilizzabile e modificabile. Vi invitiamo a integrarlo nella vostra strategia di difesa attiva e, perché no, a contribuire con miglioramenti. Perché il modo migliore per proteggere un’infrastruttura, a volte, è far credere all’avversario di averla già trovata.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

DISCLAIMER, Note Legali e Copyright. Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt; Oracle Corporation detiene i diritti su Oracle®, MySQL®, MyRocks®, VirtualBox® e ZFS®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; PostgreSQL® è un marchio registrato di PostgreSQL Global Development Group; SQLite® è un marchio registrato di Hipp, Wyrick & Company, Inc.; KeyDB® è un marchio registrato di EQ Alpha Technology Ltd.; Typesense® è un marchio registrato di Typesense Inc.; REDIS® è un marchio registrato di Redis Labs Ltd; F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB; HAProxy® è un marchio registrato di HAProxy Technologies LLC; Traefik® è un marchio registrato di Traefik Labs; Envoy® è un marchio registrato di CNCF; Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited; Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®; Shopify® è un marchio registrato di Shopify Inc.; BigCommerce® è un marchio registrato di BigCommerce Pty. Ltd.; TYPO3® è un marchio registrato di TYPO3 Association; Ghost® è un marchio registrato di Ghost Foundation; Amazon Web Services, Inc. detiene i diritti su AWS® e Amazon SES®; Google LLC detiene i diritti su Google Cloud™, Chrome™, e Google Kubernetes Engine™; Alibaba Cloud® è un marchio registrato di Alibaba Group Holding Limited; DigitalOcean® è un marchio registrato di DigitalOcean, LLC; Linode® è un marchio registrato di Linode, LLC; Vultr® è un marchio registrato di The Constant Company, LLC; Akamai® è un marchio registrato di Akamai Technologies, Inc.; Fastly® è un marchio registrato di Fastly, Inc.; Let’s Encrypt® è un marchio registrato di Internet Security Research Group; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, Windows®, Office®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®; Apache® è un marchio registrato di The Apache Software Foundation; Apache Tomcat® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group; Docker® è un marchio registrato di Docker, Inc.; Kubernetes® è un marchio registrato di The Linux Foundation; OpenShift® è un marchio registrato di Red Hat, Inc.; Podman® è un marchio registrato di Red Hat, Inc.; Proxmox® è un marchio registrato di Proxmox Server Solutions GmbH; VMware® è un marchio registrato di Broadcom Inc.; CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V.; Grafana® è un marchio registrato di Grafana Labs; Prometheus® è un marchio registrato di The Linux Foundation; Zabbix® è un marchio registrato di Zabbix LLC; Datadog® è un marchio registrato di Datadog, Inc.; Ceph® è un marchio registrato di Red Hat, Inc.; MinIO® è un marchio registrato di MinIO, Inc.; Mailgun® è un marchio registrato di Mailgun Technologies, Inc.; SendGrid® è un marchio registrato di Twilio Inc.; Postmark® è un marchio registrato di ActiveCampaign, LLC; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Hetzner® è un marchio registrato di Hetzner Online GmbH; OVHcloud® è un marchio registrato di OVH Groupe SAS; Terraform® è un marchio registrato di HashiCorp, Inc.; Ansible® è un marchio registrato di Red Hat, Inc.; cURL® è un marchio registrato di Daniel Stenberg; Facebook®, Inc. detiene i diritti su Facebook®, Messenger® e Instagram®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, con sede legale in Via Flavio Gioia, 6, 62012 Civitanova Marche (MC), Italia e sede operativa in Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Ti sei mai chiesto se il tuo Hosting faccia schifo ?

Scopri subito se il tuo hosting provider ti sta danneggiando con un sito lento degno del 1990 ! Risultato immediato.

Close the CTA
Torna in alto