详情
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*******************************************************
# WEBSECURITY DOCUMENTATION #
# -------------------------------------- #
# XSS - Cross Site Scripting #
# -------------------------------------- #
# #
# #
# written by fred777 [fred777.de] #
# #
******************************************************
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --[0x00]-- Intro --[0x01]-- Searching Vulnerabilities
[1] POST Parameter
[2] GET Parameter --[0x02]-- Exploiting
[1] Simple XSS
[2] Close Tags
[3] Event Handler
[4] Javascript Verweis
[5] Javascript Code Injection --[0x03]-- XSS Tipps und Tricks
[1] Badwords
[2] String.fromCharCode
[3] Obfuscation --[0x04]-- Countermeasures and more:
[1] Vuln Script
[2] Schließen der Lücke --[0x05]-- Finito ********************************************************
################################################## --[0x00]-- Intro Willkommen zu meinem Paper über Cross Site Scripting. Ich werde hier erklären
was XSS überhaupt ist und wie es entsteht. Cross Site Scripting Bugs entstehen dadurch, wenn z.B. in PHP übergebene
Parameter nicht auf spezifische Eingaben hin gefiltert werden. So kann wie
schon gesagt Javascript-Code ausgeführt werden, was bis zum XSS Wurm hin
schädlich für den User sein kann. Auf die Parameter und zu einem Beispielscript werde
ich später kommen. Es ist allerdings nicht schlecht sich schonmal mit PHP auseinandergesetzt
zu haben. ######################################################################## --[0x01]-- Searching Vulnerabilities Als erstes brauchen wir mal eine Lücke um besser verstehen zu können,
die findet ihr entweder selber oder ihr benutzt einen Scanner.
Da es bei XSS erstmal nicht um PHP Funktionen geht sondern um übergebene
Variablen, suchen wir also eine Stelle in einem Script wo der User Zugriff hat und
eigenen Text einführen kann. Ganz typisch dafür ist die Suchfunktion bei vielen
Webseiten. Natürlich ist dies theoretisch in allen Eingabebereichen möglich... -------------------------------------------------------
[1] POST Parameter
------------------------------------------------------- POST-Parameter: Wir haben also eine Seite gefunden welche mittels des $_POST Parameters
nach Eingaben sucht. D.h. es wird nichts über die URL übergeben, wir sehen
nur die Reaktion des Scripts auf unsere Anfrage.
Wir geben ein normalen Buchstaben ein "a" und finden einige Ergebnisse
Soweit so gut, jetzt schauen wir mal wie es im Quelltext aussieht, und ob unsere Eingabe
da vorhanden ist, wir finden unser a letztendlich hier: Die Suche nach a lieferte 2 Ergebnisse.
Nicht immer muss unsere Eingabe direkt erscheinen, öfters auch im Quelltext versteckt,
es bietet sich also an, ein ungewöhnliches Wort zu übergeben und nach diesem dann zu suchen: -------------------------------------------------------
[2] GET Parameter
------------------------------------------------------- GET-Parameter: Selbstverständlich kann so eine Übergabe von Werten genauso gut auch mittels des GET-Parameters stattfinden.
Über den Cookie natürlich theoretisch auch, allerdings ist das eher selten. Ihr sucht einfach Stellen wo ein Parameter in der URL übergeben wird, oft auch nach dem Eingeben des
Suchtextes. Bsp:
www.seite.de/index.php?id=4
www.seite.de/index.php?cat=lalala Haben wir derartige Parameter gefunden, können wir zum nächsten Schritt übergehen und
schauen wie wir dies ausnutzen könnten. ######################################################################## --[0x02]-- Exploiting -------------------------------------------------------
[1] Simple XSS
------------------------------------------------------- Greifen wir das obige Beispiel gerade mal auf: Die Suche nach a lieferte 2 Ergebnisse.
Würden die Eingaben nicht gefiltert werden, könnten wir auch HTML injizieren: Suche nach:fred
Nun sollte fred groß erscheinen und der Quelltext valid sein: Die Suche nach
fred
lieferte 0 Ergebnisse. Mit HTML lassen sich zwar schöne Spielereichen durchführen, doch Javascript ist
effizienter, als Beispiel ein einfaches Script: Suche: Ein Popup wird aufbloppen, jeder kann sich denken, dass ein Popup lange nicht
alles ist was Javascript ermöglicht.. -------------------------------------------------------
[2] Close Tags
------------------------------------------------------- Nicht immer erscheint die Eingabe so, dass eine simple HTML Injection möglich ist,
oft muss man noch Feinarbeiten machen, desöfteren erscheint die Eingabe nämlich
direkt im Input-Tag: Hier würde eine obige Injection nicht stimmen, deshalb muss der Tag erst geschlossen
werden mit "> und gegebenenfalls der Rest mit Comments weggefiltert: ">