Internet-Gefahr

So funktionieren Cross-Site Scripting & CSRF

Hans-Christian Dirscherl ist Redakteur der PC-Welt.

Ein Beispiel zum Selbst-Ausprobieren von XSS

Sie wollen selbst ausprobieren, wie XSS funktioniert? Kein Problem, Sie benötigen dafür nur einen funktionierenden Webserver und eine einsatzbereite serverseitige Skriptsprache auf Ihrem PC (unter "Webserver" dürfen Sie sich also keine Maschine in einem Rechenzentrum oder bei einem Webhoster vorstellen, sondern ein Programm auf Ihrem PC, mit dem Sie eine Website bereit stellen können. Ein populäres Beispiel für einen Webserver ist der weit verbreitete und zudem kostenlos erhältliche Apache). Am einfachsten kommen Sie zu einem Webserver zu Testzwecken, wenn Sie ein Webserver-Paket wie XAMPP installieren (aktuell für Windows ist XAMPP 1.7.3, unter anderem mit dem Webserver Apache 2.2.14, der Datenbank MySQL 5.1.41, der Skriptsprache PHP 5.3.1, dem browserbasierten MySQL-Verwaltungsfrontend phpMyAdmin 3.2.4 und dem FTP-Server FileZilla 0.9.33).

Wenn Sie mit Windows arbeiten, können Sie sich hier das kostenlose Komplett-Paket von Xampp herunterladen. Installieren Sie Xampp wie auf der Projektseite beschrieben und starten Sie den Dienst Apache (Webserver); PHP (die Skriptsprache, mit der Sie dynamische Elemente und Datenbankverbindungen in die Website integrieren können) steht nach der Installation des Xampp-Paketes ohnehin zur Verfügung.

Sollten Sie mit Linux arbeiten, so ist ja nach Distribution Apache bereits installiert und läuft vielleicht auch schon. Überprüfen Sie das, indem Sie in der Dienste-/Dämonenverwaltung Ihrer Distribution nach Apache, Apache2 oder httpd suchen. Gegebenenfalls ist Apache bereits installiert, muss aber noch gestartet werden. Der dafür erforderliche Befehl ist je nach Distribution unterschiedlich, unter Ubuntu müssen Sie beispielsweise auf der Kommandozeile

sudo /etc/init.d/apache2 start

eintippen.

Ob der Apache läuft bekommen Sie mit einem ganz einfachen Test heraus: Geben Sie in die Adresszeile des Browsers "http://localhost/" ein. Apache sollte mit einer Meldung wie "It works!" antworten. Ob PHP auf Ihrem Rechner funktioniert, bekommen Sie ebenfalls relativ einfach raus: Öffnen Sie einen Texteditor und geben Sie folgenden Text ein:

<?php phpinfo(); ?>

Speichern Sie die Datei als phpinfo.php im Dokumentverzeichnis Ihres Webservers (beim Xampp-Paket heißt es htdocs) und geben Sie dann in die URL-Zeile localhost/phpinfo.php ein. Jetzt sollte eine Website mit Details zur Konfiguration von PHP erscheinen, diese Details brauchen Sie aber nicht weiter zu interessieren, mit einer Ausnahme:

Bei den Einträgen zu "magic_quotes" muss „off“ stehen! Sollte das nicht der Fall sein, so müssen Sie die für Ihren Server zuständige php.ini suchen (deren Speicherort geht aus der phpinfo() hervor) und den Eintrag für magic-quotes von on auf off ändern. Diese Konfigurations-Datei, die das Verhalten von PHP steuert, existiert auf Ihrem PC mehrmals. Bei einer Xampp-Installation finden Sie eine php.ini beispielsweise im Apache/bin-Verzeichnis und im PHP-Verzeichnis. Öffne Sie die Dateien mit einem simplen Texteditor oder einem HTML-Editor, suchen Sie den Eintrag magic_quotes_gpc (das gpc steht übrigens für GET, POST, Cookie) und ersetzen Sie on durch off. Verfahren Sie bei den beiden anderen magic_quotes-Einträgen genauso. Speichern Sie danach die php.ini-Dateien und starten Sie den Webserver mit Hilfe des Xampp-Control-Panels beziehungsweise der passenden Betriebssystembefehle neu, unter Ubuntu Linux beispielsweise:

sudo /etc/init.d/apache2 restart

Erstellen Sie nun mit PHP ein einfaches Eingabe-Formular. Tippen Sie folgenden Quelltext in einen Editor Ihrer Wahl (Vorsicht: der Editor darf keine zusätzlichen Zeichen außer Ihrem Quellcode abspeichern) und speichern Sie die Datei unter einem beliebigen Namen und mit der Endung .php im Dokument-Verzeichnis Ihres Webservers:

<?php
$eingabe = $_POST['eingabe'];
if ($eingabe) echo $eingabe;
else echo "<html><body><form action='xsstest.php' method='POST'><input type='text' name='eingabe'><input type='submit' value='Absenden'></body></html>"; ?>

Starten Sie nun die Datei wieder durch Eingabe in die URL-Zeile Ihres Browsers: localhost/dateiname.php. Jetzt sollten Sie, sofern Ihnen keine Syntaxfehler bei der Eingabe des Quellcodes unterlaufen sind, das Formular sehen. Tippen Sie in das Eingabefeld folgenden Text ein:

<script>alert('XSS-Lücke eiskalt ausgenutzt')</script>

und drücken Sie danach den "Absenden"-Button. Nun sollte bei Ihnen ein Popup aufgehen. Wichtig: Javascript darf im Browser nicht abschaltet sein und es darf kein Popup-Blocker laufen.

Zur Erklärung: Bei diesem Beispiel haben Sie eine Zeile Javascript in ein HTML-Formular eingefügt. Das Formular wird durch ein kleines in der Skriptsprache PHP programmiertes Skript ausgewertet (was auf vielen Websites gängige Praxis ist) und das Ergebnis dann im Browser ausgegeben. Der Browser kann nicht zwischen erwünschten und unerwünschten Inhalten und auch nicht zwischen Programmiercode, der vom Ersteller der Website stammt und zwischen Code, der von einem Angreifer untergeschoben wurde, unterscheiden und liefert das Ergebnis mit dem kleinen Javascript aus.

Zur Startseite