Vollständige Erklärung der PHP-Schwachstellen (8) – HTTP-Antwortaufteilung

黄舟
Freigeben: 2023-03-03 21:00:01
Original
1517 Leute haben es durchsucht

Format der HTTP-Anfrage

1) Informationen anfordern: Beispiel: „Get /index.php HTTP/1.1“, Datei index.php anfordern

2) Header: Beispiel: „Host: localhost“, Angabe der Serveradresse

3) Leerzeile

4) Informationstext

Sowohl „Informationen anfordern“ als auch „Header“ müssen Zeilenumbruchzeichen verwenden ( CRLF) Am Ende darf eine Leerzeile nur Zeilenumbrüche und keine anderen Leerzeichen enthalten.

Das folgende Beispiel sendet eine HTTP-Anfrage an den Server www.yhsafe.com

GET /index.php HTTP/1.1↙ //Informationen anfordern

Host:www. yhsafe.com ↙ //Kopfzeile

↙ //Die Leerzeile

↙ Symbol stellt die Eingabetaste dar. Nach der Leerzeile müssen Sie eine Leertaste drücken Senden Sie eine HTTP-Anfrage. Von den HTTP-Anfrageheadern ist nur der Host-Header erforderlich, und die restlichen HTTP-Header werden basierend auf dem Inhalt der HTTP-Anfrage bestimmt.

HTTP-Anfragemethode

1) GET: Antwort anfordern

2) HEAD: Die gleiche Antwort wie GET, nur der Antwortheader ist erforderlich

3) POST: Daten zur Verarbeitung an den Server senden, die Daten sind im HTTP-Nachrichtentext enthalten

4) PUT: Dateien hochladen

5) DELETE: Dateien löschen

6) TRACE: Empfangene Anfragen verfolgen

7) OPTIONEN: Vom Server unterstützte HTTP-Anfragemethoden zurückgeben

8) CONNECT: HTTP-Anfrageverbindungen in transparentes TCP/IP umwandeln Kanal

HTTP-Antwortformat

Nachdem der Server die vom Client gestellte HTTP-Anfrage verarbeitet hat, sendet er die folgende Antwort.

1) Die erste Zeile ist der Statuscode

2) Die zweite Zeile beginnt mit anderen Informationen

Der Statuscode enthält eine Zahl, die den Status identifiziert, und ein Wort, das beschreibt den Status. Beispiel:

HTTP/1.1 200 OK

200 ist eine Zahl, die den Status identifiziert, und OK ist ein Wort, das den Status beschreibt. Dieser Statuscode zeigt an, dass die Anfrage erfolgreich ist.

Beispiele für HTTP-Anfragen und -Antworten

Öffnen Sie cmd und geben Sie telnet ein, geben Sie open www.00aq.com 80 ein

Öffnen Sie die Verbindung und geben Sie

GET ein /index .php HTTP/1.1↙

Host:www.00aq.com↙

Vollständige Erklärung der PHP-Schwachstellen (8) – HTTP-Antwortaufteilung

HTTP-Antwort-Header zurückgeben

Vollständige Erklärung der PHP-Schwachstellen (8) – HTTP-Antwortaufteilung

Zurückgegebener Homepage-Inhalt

Mit PHP HTTP-Anfragen senden

Die Header-Funktion kann zum Senden von HTTP verwendet werden Anfragen Und der Antwortheader

Funktionsprototyp

void header(string string [, bool replacement [, int http_response_code]])

string ist der String des HTTP-Headers

Wenn „replace“ TRUE ist, bedeutet dies, dass der vorherige ähnliche Header durch den aktuellen Header ersetzt wird. Wenn „replace“ FALSE ist, bedeutet dies, dass mehrere ähnliche Header verwendet werden.

http_response_code Wird verwendet erzwingen, dass der HTTP-Antwortcode den Wert von http_response_code verwendet

Beispiel:

// Internet-Socket-Verbindung öffnen
$fp = fsockopen(www.00aq.com, 80); > // HTTP-Anforderungsheader schreiben
fputs($fp, "GET / HTTP/1.1rn");
fputs($fp, "Host: www.00aq.comrnrn"); Antwortzeichenfolge
$http_response = "";
while (!feof($fp))
{
// 256-Bit-HTTP-Antwortzeichenfolge lesen
$http_response fp, );
}
// Internet-Socket-Verbindung schließen
fclose($fp);
// HTTP-Antwortinformationen anzeigen
echo nl2br(htmlentities($http_response) ; , wodurch die Der Zielbenutzer verwendet eine Anforderung, um zwei Antworten zu generieren. Die erste Antwort ist die Antwort des Servers und die zweite ist die vom Angreifer entworfene Antwort. Dieser Angriff erfolgt, weil das WEB-Programm Benutzerdaten im HTTP-Antwortheader platziert und diese Benutzerdaten vom Angreifer sorgfältig entworfen wurden.

Zu den Funktionen, die unter der HTTP-Antwortaufteilung leiden können, gehören:

header(); setrawcookie();Vollständige Erklärung der PHP-Schwachstellen (8) – HTTP-Antwortaufteilung
HTTP-Antwortaufteilung Kommt normalerweise vor in:

Location-Header: schreibt die Daten des Benutzers in die umgeleitete URL-Adresse

Set-Cookie-Header: schreibt die Daten des Benutzers in Cookies

Beispiel:

header("Location: " . $_GET['page']);

Request

GET /location.php? page=http://www.00aq.com HTTP/1.1↙

Host: localhost↙



Return

HTTP/1.1 302 Gefunden

Datum: Mi, 13. Januar 2010 03:44:24 GMT

Server: Apache/2.2.8 (Win32) PHP/5.2.6

X-Powered-By: PHP /5.2.6

Standort: http://www.00aq.com

Inhaltslänge: 0

Keep-Alive: Timeout=5, max=100

Verbindung: Keep-Alive

Content-Type: text/html

Greifen Sie auf den Link unten zu, ein Anmeldefenster wird direkt angezeigt

http:// localhost/location.php?page=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%20158% 0d%0a%0d%0aAccount%20Password%20

wird in eine lesbare Zeichenfolge umgewandelt:

Content-Type: text/html

HTTP/1.1 200 OK

Inhaltstyp: Text/HTML

Inhaltslänge: 158


Konto
Passwort

Ein HTTP Anfrage generierte zwei Antworten

Präventionsmethode:

1) Ersetzen Sie das CRLF-Neuzeilenzeichen

header("Location: " . strtr($_GET[' page'], array ("r"=>"", "n"=>"")));
?>

2) Verwenden Sie die neueste Version von PHP

In der neuesten PHP-Version sind Zeilenumbrüche in HTTP-Headern nicht mehr zulässig

HTTP-Antwortheader ausblendenVollständige Erklärung der PHP-Schwachstellen (8) – HTTP-Antwortaufteilung

httpd. conf in Apache, Option ServerTokens = Prod, ServerSignature = Off

php.ini in PHP, Option Exposé_php = Off

Das Obige ist die vollständige Lösung für PHP-Schwachstellen (8)-HTTP Als Antwort Für den Inhalt der Aufteilung beachten Sie bitte die chinesische PHP-Website (www.php.cn), um weitere verwandte Inhalte zu erhalten!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage