Heyho,
da ich gerade wieder ein bisschen Zeit habe, werde ich euch (natuerlich wieder mit kleinem Source Beispiel) zeigen wie und vorallem wo XSS (Cross-Site Scripting) Luecken sind. Mir ist auch klar das es einige gute XSS Tutorials gibt, aber ich glaub noch kein einzigstes, welches zeigt wie man so eine Luecke “schließt”. Wie man XSS ausnutzt werde ich ein anderes mal zeigen 😉
Jow was ist XSS (Cross-Site Scripting)?
Wie der Name eigentlich schon verraet geht es vorallem um “Scripting” also mit Scripten umgehen, weil bei einer XSS Attacke (gefaehrliche) Scripte ausgefuehrt werden. Damit kann man verschiedene Ziele erreichen, unter anderem ein sehr bekanntes und zwar das “Cookie klauen”. Darauf werd ich aber heute nicht genauer eingehen, sondern XSS –> Fremde Scripte werden ausgefuehrt!
Wie kann es passieren, dass eine Ausgabe zu einer gefaehrlichen XSS Luecke wird?
Ganz einfach, ein Coder moechte gerne eine Suchfunktion erstellen. Dort soll ausgegeben werden “Ihre Suche nach _das_Wort_ ergab X Treffer”. Leicht kann es passieren das der Coder die Ausgabe vom User nicht filtert, d.h. dass alle Usereingaben wieder ausgegeben wird. Ein gefaehrlicher Fehler.
Schauen wir uns das mal an einem Source Beispiel an:
XSS Tutorial
Als xss.php speichern und irgendwo mal hochladen oder local ausfuehren.
So was passiert bei dieser Datei. Die Datei gibt das aus, was in der URL ueber den GET Parameter “text” eingegeben wird.
Also rufen wir sie mal auf 🙂
http://localhost/xss.php?text=Hallo Welt
Wenn wir nun auf Enter klicken/druecken, wird uns auf der Seite “Hallo Welt” angezeigt. Koennt auch jeden beliebigen Text benutzen.
Nun testen wir mal ob man auch Script ausfuehren kann, ganz einfach mit:
in eure URL eingeben:
http://localhost/xss.php?text=
Je nach dem wie lustig ihr drauf seid und wenn magic_quotes (dieses ding mit dem backslashen von ‘ und “) aus sind, koennen wir auch
benutzen 🙂 Oder nen beliebigen anderen Text.
Manchmal kommt es auch vor, dass ein html tag erstmal unterbrochen werden muss. Dann muessen wir es mal mit
">
probieren 😉
Merkt man je nach Erfahrung dann auch von selber.
Um magic_quotes zu umgehen kann man auch String.fromChar() benutzen, ein XSS Befehl wuerde dann so aussehen:
Jedoch wird man das nicht so oft als Anfaenger brauchen, denk ich..
Aufjedenfall ist bei unserem ersten Beispiel nun ein Popup gekommen mit dem Inhalt von 1337 – Da der Alert() Befehl auch 1337 (beim zweiten wars “Hii my name is… ANGERFIIIST!” und beim 3ten “XSS”) beinhaltet hatte. Also wurde unser Script ausgefuehrt was nun bedeutet, dass dort eine XSS Luecke vorhanden ist.
Gefaehrlich wenn sowas passiert. Wie fixx ich nun unseren Bug?
Die Funktion htmlspecialchars() ist hierbei sehr nuetzlich und effektiv (mehr Infos dazu: http://de.php.net/htmlspecialchars), da es Sonderzeichen in HTML – Codes umwandelt. Wie wendet man sie an? Nehmen wir nochmal unser Source Code Beispiel und fuegen dort htmlspecialchars() ein:
XSS Tutorial
So wenn wir nun wieder
oder anderes eingeben, wird uns das ausgegeben:
Das Script wurde NICHT ausgefuehrt, doof gelaufen fuer den Angreifer 😀 Man kann dort nun so viel rummachen wie man will, die XSS Luecke ist gefixxt, dank htmlspecialchars.
So nun noch eine kleine Live Demo, gibt einige Google Dorks. Ich benutz meistens “ihre suche nach ergab treffer”
Live Demo:
http://www.pyroweb.de/ShopArtikel.php?SearchQuery=
So das war das zweite Tutorial meiner Großen Tutorial Reihe, ich hoff vorallem Anfaenger haben hierdurch einiges gelernt.
Beim naechsten Tutorial werd ich euch entweder zeigen wie ne SQL Injection funktioniert, oder noch schnell auf RFI/LFIs eingehen. 🙂