it-swarm.com.de

Reflektiertes XSS-Skript, das die URL durchläuft, wie es funktioniert und unter welchen Voraussetzungen es funktioniert?

Um mehr über die Sicherheit zu erfahren, habe ich auf meinem lokalen Host die einfachste Website eingerichtet, die aus einer HTML-Seite besteht, die von einem Apache-Server bereitgestellt wird. Ich habe zuerst versucht, das JS-Skript anzuhängen, das am Ende einer URL ausgeführt wird:
/index.html?message=<script>alert('XSS');</script>

Browser codiert es zu:

/index.html?message=%3Cscript%3Ealert(%27XSS%27);%3C/script%3E

Mein Verständnis der Funktionsweise dieser Art von Angriffsvektor ist, dass der Angreifer eine ähnliche URL an das Opfer sendet -> das Opfer klickt darauf -> das Skript wird ausgeführt (nicht sicher, wann es genau ausgeführt werden soll?)

Fragen:

  1. Warum wird es nicht ausgeführt?
  2. Wie kann es ausgeführt werden?
  3. Was sind die Voraussetzungen für einen solchen Angriff - vielleicht reicht es nicht aus, nur eine einfache Webseite zu haben?
  4. Wann sollte dieses Skript ausgeführt werden? Nachdem das DOM geladen wurde?

Eine allgemeine Erklärung, wie dies funktionieren sollte, wäre ebenfalls sehr willkommen. Vielen Dank!

XSS-Angriffe basieren auf der Tatsache, dass Eingaben in den Browser des Endbenutzers ausgegeben werden. Der häufigste Angriff ist im Grunde eine PHP Site, die enthält

<?php
echo $_GET["message"];
?>

Sie würden dieser URL dann einen Parameter übergeben, der den Javascript-Code enthält. Wenn Sie dies einrichten möchten, erstellen Sie eine something.php - Datei auf Ihrem Webserver, geben Sie den obigen Code ein und greifen Sie dann in Ihrem Browser auf http://your-server/something.php?message=<script>alert('XSS');</script> zu. Es sollte dann ein Popup mit XSS angezeigt werden.

In einer statischen HTML-Seite ist dies nicht möglich, da nur Inhalte basierend auf dem statischen HTML-Code des Servers generiert werden. XSS benötigt vom Benutzer bereitgestellten Code. Der Ausschluss ist, wenn der HTML-Code einen anfälligen Javascript-Code lädt, der vom Benutzer bereitgestellte Eingaben ermöglicht.

Der Hauptpunkt von XSS ist, dass ein Angreifer SEINEN Code in IHRE Website aufnehmen möchte, ohne den Webserver tatsächlich zu hacken. Dies ist nur mit serverseitigen Programmiersprachen möglich, die etwas ausgeben, was der Angreifer zuvor auf den Server gestellt hat.

Grundsätzlich möchte der Hacker, dass der HTML-Code für den Browser so aussieht

<html><body>Foo<script>alert('XSS');</script></body></html>

anstatt

<html><body>Foo</body></html>

Denken Sie zum Beispiel an ein Forum oder an Kommentare zu einem Artikel. Der Benutzer sollte seine Anmerkungen hinterlassen dürfen. Der Server muss dies speichern und anderen Benutzern denselben Kommentar präsentieren. Wenn der Kommentar selbst Javascript-Code enthält und das Serverprogramm dies nicht abschwächt, gibt es denselben Code als Teil des Kommentarblocks aus.

Wenn dies in den Browser geladen wird, ist dies nicht einfach zu beantworten. Dies hängt davon ab, wo der Code des Hackers im Seitenkörper oder in den anschließend geladenen Javascript-Dateien enthalten ist. Wenn es als Javascript-Tag im Haupt-HTML enthalten ist, wird es nach Abschluss des DOM-Ladevorgangs geladen. Insbesondere wie bereits erwähnt, kann die XSS-Sicherheitsanfälligkeit auch in einer Javascript-Datei auftreten (die Benutzereingaben, z. B. eine URL, aufnimmt und lädt). In diesem Fall kann nicht gesagt werden, wann genau der Code ausgeführt wird. Sie können diesen Javascript-Code an eine Schaltfläche, ein Textfeld onblur () -Ereignis oder einen Timer binden.

BEARBEITEN:

Wenn Sie sich mit dem Javascript-Angriff befassen, geben Sie Folgendes in Ihre Serverdatei ein

<html><body>
<script type="text/javascript">
    var queryDict = {};
    location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]});
    document.write(decodeURIComponent(queryDict["message"]));
</script>
</body></html>

In den ersten beiden Zeilen werden grundsätzlich alle GET-Parameter in ein Array aufgeteilt (entnommen aus hier ). Die dritte Zeile gibt dies dann einfach in die HTML-Seite aus. Dies kann natürlich auch durch eine andere DOM-Manipulation aus dem ausgeführten Code erfolgen.

5
Spacy