___ __ _ _ _ _ ____ _____ ______ _______ ________ _____ / /| | / / | | | | | | | | / __| | ___| / ____| |__ __| / _____ \ | __ \ / / | | / / | | | | | | | | ___ | |__ | |___ | | | | | | | | | |__| | / / | | / / | | | | | | | | |___| \___ \ | ___| | | | | | | | | | ___/ / / | | / / | |___| | | |__ | |__ __| | | |___ | |____ | | | |____| | | \ \ /_/ |_|/_/ |_______| |____| |____| |____/ |_____| \______| |_| \________/ |_|\_\ . i n f o _______________________________________________________________________________________________________ | Paper: XSS (Cross-Site Scripting) | | Autor: Penguin | | www.null-sector.info | |_______________________________________________________________________________________________________| [0x1] ................ Grundlagen 0x11 ................ Was ist eine XSS-Lücke? 0x12 ................ Wie gefährlich ist eine XSS-Lücke? 0x13 ................ Wie findet man XSS-Lücken? [0x2] ................ Ausnutzen 0x21 ................ Wie kann ich eine XSS-Lücke Ausnutzen? [0x3] ................ Verhindern und Patchen 0x31 ................ Wie kann ich eine XSS-Lücke vorbeugen? 0x32 ................ Wie verhindere/patche ich eine XSS-Lücke? -=[0x11]=- ......................................................................... -=[0x11]=- . Was ist eine XSS-Lücke? . -=[0x11]=- ......................................................................... -=[0x11]=- Eine XSS-Lücke ist eine Sicherheitslücke, die es ermöglicht, HTML-Code (Auch JavaScript) über einen Manipulierten Link auszuführen! Wenn nun jemand einen Link anklickt, der manipuliert ist wird der Code der im Link vorhanden ist ausgeführt. -=[0x12]=- ......................................................................... -=[0x12]=- . Wie gefährlich ist eine XSS-Lücke? . -=[0x12]=- ......................................................................... -=[0x12]=- Eine XSS kann im normalfall nicht sonderlich viel Schaden anrichten. Allerdings sobald der Administrator einer Webseite auf der eine XSS-Lücke offen ist nicht viel im Hirn hat, oder man den Link geschickt verstecken kann, kann eine XSS großen Schaden anrichten. Mit einer XSS kann man z.B. den Cookie des Administrators sobald er auf den Link geklickt hat "stealen". Mithilfe dieses Cookies und z.B. Tamper Data kann man seinen eigenen Cookie mit dem des Adminstrators ersetzen. Nun kann man das Adminpanel aufrufen und sich nach Lust und Laune austoben. -=[0x13]=- ......................................................................... -=[0x13]=- . Wie findet man XSS-Lücken? . -=[0x13]=- ......................................................................... -=[0x13]=- XSS-Lücken kann man an den verschiedensten Stellen finden. Meine Favoriten sind allerdings Suchfunktionen. Überall wo ein Text an ein PHP-Script gesendet werden kann, der auch wieder Ausgegeben wird kann man eine XSS finden. In meinem Beispiel benutze ich jetzt hier eine einfache Suchfunktion. Nehmen wir an, der HTML-Code der Suchtextbox sieht so aus: <input name="suche" size="40" value="" /> Nun wenn wir den Text "><h1>XSS</h1><!-- suchen sollte der Quellcode wenn unser gesendeter Text nicht gefiltert wird so aussehen: <input name="suche" size="40" value=""><h1>XSS</h1><!--" /> So, nun haben wir erfolgreich HTML-Code in eine Webseite über einen Manipulierten Link injiziert. Dass dies nur Sinnvoll ist, wenn unser Text über eine GET-Request übergeben wird brauche ich nicht zu sagen. Also, eine XSS findet man nur durch ausprobieren. -=[0x21]=- ......................................................................... -=[0x21]=- . Wie kann ich eine XSS-Lücke Ausnutzen? . -=[0x21]=- ......................................................................... -=[0x21]=- Es gibt Meiner Meinung nach 2 Arten der Ausnutzung, über welche es sich lohnt zu schreiben. 1. Session / Cookie stealing Diese Methode ermöglicht euch, falls der ihr den Administrator einer Webseite dazu bekommt euren Manipulierten Link anzuklicken, Zugang zum Adminpanel der Webseite zu bekommen. Der Mechanismus ist relativ Simpel, ihr manipuliert einen Link so, dass JavaScript Code ausgeführt wird, der den Cookie des Opfers an ein bestimmtes PHP-Script sendet. Wenn man nun seinen eigenen Cookie mit dem des Opfers ersetz hat man volle Kontrolle über den Account des Opfers. 2. ExploitKits Diese Methode interessiert mich eher weniger, allerdings kann sie mit dem nötigen Kleingeld einen hohen Erfolg versprechen. Ihr braucht als aller erstes mal ein ExploitKit, welches man per iframe einbinden kann. Nun manipuliert ihr wieder einen Link, so dass der HTML-Code des iframes ausgeführt wird. Wenn das Opfer nun für euer ExploitKit anfällige Software installiert hat, wird eure load.exe auf dem PC des Opfers ausgeführt. -=[0x31]=- ......................................................................... -=[0x31]=- . Wie kann ich eine XSS-Lücke vorbeugen? . -=[0x31]=- ......................................................................... -=[0x31]=- Das ist eine gute Frage, wie ich man dem Paper schon entnehmen konnte können XSS-Lücken überall entstehen wo Text des Users ausgegeben wird. Einfach überhaupt kein Text ausgeben, den ein User an ein PHP-Script sendet, oder immer daran denken diese Ausgaben zu Filtern. Mehr zum Filtern im nächsten Abschnitt. -=[0x32]=- ......................................................................... -=[0x32]=- . Wie verhindere/patche ich eine XSS-Lücke? . -=[0x32]=- ......................................................................... -=[0x32]=- Eine XSS zu verhindern oder zu patchen ist kein großer Akt. PHP bietet von Haus aus schon 2 Funktionen dazu. 1. htmlspecialchars() Diese Funktion ersetz <,>,',",& mit den HTML-Codes dafür. Man benutzt diese Funktion so: $newString = htmlspecialchars($getString); $getString ist die Zeichenkette, die man vom Browser bekommt. $newString ist der String, der alle Zeichen die ein Script für XSS ersetzt. PHP-Dokumentation zu der Funktion: http://php.net/manual/de/function.htmlspecialchars.php 2. htmlentities Die Funktion ist komplett identisch zu htmlspecialchars(), allerdings wandelt htmlentities() wirklich alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um. PHP-Dokumentation zu der Funktion: http://php.net/manual/de/function.htmlentities.php