phpBuddy

Folge phpBuddy.eu auf Twitter

Ab sofort können alle Twitter-Begeisterte sich auch über die Aktivitäten von phpBuddy.eu auf Twitter informieren. Ich werde dort in unregelmäßigen Abständen über neue Artikel, Tutorials, Kurztipps, lesenswerte Forumeinträge oder schlicht interessante PHP Funktionen informieren.

Sie sind hier: Startseite File Inclusion
Gefährliches include und require
Beitragsseiten
Gefährliches include und require
Angriffsarten
Gegenmaßnahmen
Fazit und Download
Alle Seiten

File Inclusion: Gefährliches include() und require()

Eine der am häufigsten anzutreffende Schwachstelle in Webseiten, die von Anfängerhand (aber nicht ausschließlich) erstellt wurden, ist das sogenannte File Inclusion oder auch Remote File Inclusion. Letzteres ist auch bekannt als Remote Command Execution. Darunter versteht man das Einbinden von Dateien über das lokale Dateisystem des Webservers oder das Einschleusen von Schadcode von einem entfernten Server. Beide Varianten haben ein enormes Schadenspotential.

Während das Einbinden von lokalen Dateien meistens darauf abzielt geheime Informationen, z.B. Passwörter oder Zugangsdaten zum Server, auszulesen und zu stehlen, ist das Einschleusen von Code von externen Servern meistens darauf ausgerichtet, direkt Attacken gegen den Server durchzuführen. Durch das Einbinden von externem Code wird dieser als Teil einer Webseite ausgeführt. Der Angreifer hat somit die gleichen Möglichkeiten, die auch der Webseitenbetreiber mit seinen eigenen Scripts hat!
Es wäre dem Angreifer also möglich z.B. illegale Inhalte (illegale Software, Kinderpornografie, extremistisches Material, usw.) aus dem Internet auf den kompromittierten Server nachzuladen und so wiederum zu verbreiten. Haftbar ist in so einem Fall immer der Betreiber der Webseite und das kann sehr teuer werden, deswegen sollte man diese Gefahr auf keinen Fall unterschätzen!

Diese File Inclusion Attacken sind möglich, wenn der Programmierer nur sehr schlecht oder gar nicht die aufgerufene Adresse überprüft und blind darauf vertraut, dass ein Sitebesucher auch nur das an unseren Server übermittelt, das auch in einem Linktext steht - sprich, die von uns erstellten Links anklickt. Schauen wir uns mal ein stark vereinfachtes Beispiel einer dynamischen Seite an, wie man sie unzählige Mal im Internet findet und wie sie jeder von uns kennt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>phpBuddy.eu - Einfaches Anwendungsbeispiel</title>
</head>
<body>
 
<?php
// Aufgerufene Seite von angeklicktem Link, z.B. rezepte.php, einbinden.
include( $_GET['seite'] );
?>
 
<p>
<a href="index.php?seite=startseite.php">Startseite</a>
<a href="index.php?seite=rezepte.php">Rezepte</a>
<a href="index.php?seite=kontakt.php">Kontakt</a>
</p>
 
</body>
</html>

Wir haben 3 Links auf unserer Seite und wenn nun jemand unsere Seite besucht und einen Link anklickt, wird die angeforderte Seite per include()-Befehl in unsere Seite eingebunden. Wir verlassen uns also darauf, dass ein Sitebesucher nur die Werte per URL-Request übermittelt, die wir in unseren Links vorgeben. Und genau hier liegt das gewaltige Problem: der übermittelte Wert wird nicht überprüft und das eröffnet einem Angreifer wortwörtlich Tür und Tor, damit er auf unserem Server tun und lassen kann, was er möchte!

Manchmal sitzen Anfänger dem Irrglauben auf, dass wenn sie statt des kompletten Dateiname nur den ersten Teil (in unserem Beispiel z.B. rezepte statt rezepte.php) per URL übertragen und dann das .php manuell anfügen, dies ein Schutz gegen Angriffe wäre. Denn dadurch würde ja ggfs. eine Datei mit doppelter Endung erzeugt werden, was zwangsläufig zu einem "Datei nicht gefunden"-Fehler führen müsste. Dem ist nicht so! Schauen wir uns nun einmal einige konkrete Angriffe an und auch, was wir dagegen tun können.

Hinweis!
Die hier vorgestellten Angriffe sollen keine Anleitung sein um fremde Webseiten zu attackieren. Die folgenden Beispiele dienen lediglich zur Aufklärung und als Anschauung.