Immer wieder erlebe ich es in der täglichen Programmierpraxis, wie einigen OpenSource-Paketen in den Installern bzw. mitgelieferten Setup-Routinen ein verwaistes phpinfo.php-Skript beiliegt, welches die PHP-Funktion phpinfo() aufruft.

Die Intention dieses Skriptes ist einfach, auf diese Weise lässt sich schnell die aktuelle Konfiguration des Webservers und Php-Subsystems für den Programmierer ermitteln.
Eine wunderbare Einladung für Angreifer. Übersieht man so ein Skript, oder vergisst es nach der Installation aus dem Installationsorder der OpenSource-Anwendung zu löschen, kann jeder nach Herzenslust Einblick in die Konfiguration des Servers nehmen und evtl. Schwachstellen allein anhand der Versionsnummer erspähen.
Warum? Ganz einfach, die meiste Software beinhaltet noch nicht erkannte Anwendungsbugs und auch die installierten Module auf dem Server zur Erweiterung des Gesamtsystems bergen oft noch zahlreiche unerkannte Fehler, die erst mit späteren Programmversionen geschlossen werden. Ist der Server nicht auf dem Neuesten Stand der Sicherheitsupdates, ist eine entsprechende Angriffsmöglichkeit gegeben.
Beispiel aus der aktuellen ZenCart-Distribution v1.39d
Archiv: zen-cart-v1.3.9d-full-fileset-06032010.zip
Datei: zc_install/includes/phpinfo.php
--- phpinfo.php ---
<?php
/**
* @package Installer
* @access private
* @copyright Copyright 2003-2005 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version : phpinfo.php 2342 2005-11-13 01:07:55Z drbyte $
*/
phpinfo();
?>
Besser ist es hier als, derlei Informationen gar nicht erst Preis zu geben. Hierzu haben wir ein kleines, sicheres und beinahe selbsterklärendes Skript geschrieben, dass derlei phpinfo.php-Skripte ersetzen sollte:
Einfach den Funktionsaufruf entsprechend abändern und freuen.
--- phpinfo.php ---
<?php
/**
* @package Installer
* @access private
* @copyright Copyright 2003-2005 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version : phpinfo.php 2342 2005-11-13 01:07:55Z drbyte $
*/
include_once dirname(__FILE__).'/phpinfo_s.inc';
// Set first parameter to true for looking up your IP-Adress, or false for verifying..
// Set second parameter to "you.rip.add.res"s
phpinfo_s( true, "89.204.137.98" );
?>
Hier die einzubindende Include-Datei:
--- phpinfo_s.inc ---
/**
* Programm: phpinfo_s()
* Copyright(c) 2010 ALVA IT-Solutions
* Version: 1.0
*/
/******************************
***** DO NOT TOUCH BELOW *****
******************************/
// Check for valid IP-Adress
function phpinfo_s( $p_bLookup, $p_sYourIP) {
if ($_SERVER["HTTPS"]!='on') {
die("For use with https-protocol only!");
}
if (!p_bLookup) {
if ($_SERVER["REMOTE_ADDR"]==$p_sYourIP) {
phpinfo();
} else {
echo "Sorry. Wrong IP-Adress, Dude!";
}
} else {
echo "Your IP: " . $_SERVER["REMOTE_ADDR"];
}
}
?>
Bebilderte Anleitung, die keine Wünsche mehr offen lässt. Noch Fragen?
Hinweis: Die nette Ausschrift gegenüber Angreifern kann natürlich durch dieselbe Ausgabe der IP-Adresse im letzten Else-Zweig der Routine abgeändert werden. Man gibt hiermit keine Informationen Preis, die der Angreifer nicht schon wüsste. Das erleichtert noch einmal die tägliche Programmierpraxis, denn nur der Programmierer sollte schließlich in der Lage sein, seine eigene IP in dem Skript auf dem Server einzutragen, da er über die notwendige Berechtigung zum Login bzw. entsprechende Verzeichnisrechte verfügt. In diesem Fall könnte man sich allerdings auch den Boolean als Parameter für das Loopup sparen, da dann ständig ein Lookup der IP stattfindet, wenn sie nicht der Eigenen entspricht.
Das Skript zum Download:
phpinfo_s v1.0 (ZIP, 757 Byte)