Web Application Security in der Praxis, Teil 2

Schutz vor Cross-Site Scripting sowie Local and Remote File Inclusion

18.02.2011 | Autor / Redakteur: Martin Dombrowski / Stephan Augsten

GET-Parameterübergabe des Strings ‚<script>alert(„Alarm“)</script>‘. Es öffnet sich nun ein Popup mit der Meldung „Alarm“. Dies beweist die Existenz der XSS-Schwachstelle.
GET-Parameterübergabe des Strings ‚<script>alert(„Alarm“)</script>‘. Es öffnet sich nun ein Popup mit der Meldung „Alarm“. Dies beweist die Existenz der XSS-Schwachstelle.

Local und Remote File Inclusions

File Inclusions sind neben XSS weitere Schwachstellen in Webanwendungen, die es ermöglichen fremde Skripte oder Codes in das eigentliche Skript einzubinden. Sie entstehen durch unsaubere Programmierung. Es kann generell zwischen Local und Remote File Inclusions unterschieden.

  • Local File Inclusions (LFI) ermöglichen dem Angreifer lokal gespeicherte Dateien auf dem Webserver in das eigentliche Skript einzubinden. Für einen Angreifer potentiell interessante Dateien sind unter anderem Konfigurationsdateien, Schadcode oder Dateien die sensible Informationen enthalten.
  • Bei Remote File Inclusions (RFI) werden durch den Angreifer im Gegensatz zu LFI externe Skripte in das eigentliche Skript eingebunden. Dies geschieht zum Beispiel mit Hilfe von Funktionen wie include() oder require(). Im Folgenden ein kurzes Beispiel für ein verwundbares Skript für eine LFI:

<?php
if (isset($_GET[„page“]) && !empty($_GET[„page“])) {
$page = $_GET[„page“];
include $page.“.php“;
}
else
include „main.php“;
?>

Wird über den GET-Parameter Page ein Wert übergeben, so wird dieser eingebunden (http://localhost/index.php?page=user). Ist die Webanwendung verwundbar, so findet an dieser Stelle keine Überprüfung des übergebenen Parameters statt. An dieser Stelle kann nun ein Angreifer jegliche Dateien übergeben (include), wie zum Beispiel die „/etc/passwd“: http://localhost/index.php?page=../../../../../../etc/passwd

Eine Möglichkeit zur Behebung einer solchen LFI wäre die Nutzung einer Whitelist. Hierbei erstellt man ein Array mit den gewollten Seiten. Wird bei der GET-Übergabe des Page-Parameters ein vom Array abweichender String angegeben, so wird dieser durch die main.php ersetzt.

<?php
$pages = array(„main“, „user“, „guestbook“);
if (isset($_GET[„page“]) && !empty($_GET[„page“]))
$page = $_GET[„page“];
else
$page = „main“;
if (in_array($page, $pages) && file_exists($page.“.php“))
include $page.“.php“;
else
inlcude „main.php“;
?>

Bei einer RFI wird anstelle einer lokalen Datei eine Datei auf einem fremden Server geladen und durch das Skript ausgeführt. Ein recht oft angewandtes Beispiel ist hierbei eine sogenannte PHP-Shell. Durch dieses PHP-Skript kann der Angreifer unter anderem Shell-Befehle absetzen.

Inhalt

Inhalt des Artikels:

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 2049815 / Mobile- und Web-Apps)