Willkommen zu meinem XSS Tutorial für Anfänger
In diesem Tutorial moechte ich euch zeigen, wie ihr solche Lücken findet/diese ausnutzt, und auch mit etwas schwierigeren Sachen zurecht kommt(z.b wenn bestimmte zeichen gefiltert werden)
Wie ensteht so eine Lücke?:
So eine Lücke ensteht, wenn man z.b in einer Sucheingabe etwas eingibt, diese schickt den text dann weiter, und lässt ihn z.b auf der search.php als text wieder ausgeben(UNGEFILTERT)
also steht unser Text, den wir eingegeben haben ungefiltert im Quelltext:
Hier ein kleines Beispiel:
<html>
<head><title>Tut</title></head>
<body>
<?php
echo "Ihr Suchwort: ".$_GET***91;'text'***93;;
?>
</body>
</html>
So… Es wird also der GET-Parameter: text mit echo auf die seite geschrieben.
Im Endeffekt sieht es dann so aus, wenn ihr eine eingabe tätigt(z.b wir geben padrino ein):
Ihr Suchwort: padrino
Da unser eingegebener text(padrino) mit in den Quelltext genommen wird, können wir mit script Tags z.b eine ausgabe tätigen…
z.b ich gebe als suchwort folgendes ein: <script>alert(‚XSS TuT‘)</script>
Dann wird im Quelltext folgendes angezeigt werden:
Ihr Suchwort: <script>alert('XSS TuT')</script>
Da, der Browser sieht dass script tags davor/dahinter stehen, merkt es, dass es ein javascript code ist, und führt ihn nun aus.
Hier noch ein Beispiel für, wenn der Text in einer Textbox wiedergegeben wird, und evt. einpaar zeichen gefiltert werden.
<html>
<head><title>Tut</title></head>
<body>
<?php
$eingabetext = $_GET***91;'text'***93;;
$eingabetext = str_replace("<","",$eingabetext);
$eingabetext = str_replace(">","",$eingabetext);
$eingabetext = str_replace("/","",$eingabetext);
?>
<input type="text" name="ergebniss" value="<?php echo $eingabetext; ?>"></body>
</html>
Hier werden nun folgende 3 Zeichen gefiltert(<,>,/) das heisst wir können hier nichts mit den standard script Tags anfangen.
Aber zum Test lassen wir uns einen normalen Text mal ausgeben, für dieses Beispiel nehme ich wieder das Wort(padrino)
In der Ausgabe(Im Quelltext) erscheint es nun so:
<input type="text" name="ergebniss" value="padrino">
Was man hier tun könnte ist, mit anführungszeichen dem Quelltext vorgaukeln, dass da wo wir die anführungzeichen eingegeben haben, die value endet z.b so
(Beispiel Text ist jetzt: “ abc test)
Die Ausgabe sieht nun wie folgt aus:
<input type="text" name="ergebniss" value="" abc test">
Um unseren nutzen aus der ganzen Sache zu ziehen, können wir in der textbox einfach ein event hinzufuegen: onmouseover z.b, und dies mit einem javascript verknüpfen.
(Beispiel Text ist jetzt: “ onmouseover=“alert(‚XSS Tutorial‘) )
Die Ausgabe sieht jetzt so aus:
<input type="text" name="ergebniss" value="" onmouseover="alert('XSS Tutorial')">
Und schon haben wir in die Textbox ein event hinzugefuegt, welches nun ausgeführt wird, sobald wir mit der Maus über die textbox fahren.
Was kann man damit nun erreichen?
Mit einer solchen XSS-Lücke wie oben angegeben, könnte man z.b das cookie ausgeben lassen, und mit einem script speichern lassen(sodass man das cookie des opfers hat)
Wenn es z.b ein Gaestebuch ist, und dort eine XSS-Lücke offen ist, dann ist es meistens sinnvoll, wenn man eine weiterleitung, einen iframe, oder einfach wieder nur den cookie ausgeben lasst.
Der Vorteil bei einer XSS-Luecke in einem Gaestebuch (Persistance XSS) ist, dass dieser code permanent auf der Seite zu sehen ist, und jeder user der die Seite aufruft, diesen sieht.
Der Nachteil bei einer XSS-Luecke wie ganz oben im Beispiel (Normale XSS) ist, dass man diesen meist als Link an leute verschicken muss, und bei dem aufruf dieses Links der Code ausgeführt wird.
Wie kann ich mich gegen solche Angriffe schuetzen?
Um euch selbst gegen XSS-Attacken zu schuetzen solltet ihr bevor ihr eine variable ausgeben lasst diese mit htmlspecialchars() filtern lassen.
Beispiel:
<?php
$suchtext = $_GET***91;'text'***93;;
$suchtext = htmlspecialchars($suchtext);
echo $suchtext;
?>
Nun wird alles gefiltert, und ein XSS-Angriff sollte ausgeschlossen sein
Ich hoffe euch hat das Tutorial gefallen/geholfen, wenn ihr noch fragen habt, dann stellt diese einfach im Thread, oder schreibt mir eine PM
Feedback: Erwünscht
Link zum Tutorial auf dem FTP:
Tut
Weiteres Hilfreiches Kommando(Wie htmlspecialchars):
htmlentities()
Greetz Padrino