hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

12 KiB

Specjalne nagłówki HTTP

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Listy słów i narzędzia

Nagłówki zmieniające lokalizację

Przepisz źródłowy adres IP:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For (Sprawdź nagłówki hop-by-hop)

Przepisz lokalizację:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

Nagłówki hop-by-hop

Nagłówek hop-by-hop jest nagłówkiem zaprojektowanym do przetwarzania i konsumowania przez aktualny serwer proxy obsługujący żądanie, w przeciwieństwie do nagłówka end-to-end.

  • Connection: close, X-Forwarded-For

{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}

Przemyt żądań HTTP

  • Content-Length: 30
  • Transfer-Encoding: chunked

{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}

Nagłówki pamięci podręcznej

Nagłówki pamięci podręcznej serwera:

  • X-Cache w odpowiedzi może mieć wartość miss, gdy żądanie nie było buforowane, a wartość hit, gdy jest buforowane
  • Podobne zachowanie w nagłówku Cf-Cache-Status
  • Cache-Control wskazuje, czy zasób jest buforowany i kiedy zostanie ponownie buforowany: Cache-Control: public, max-age=1800
  • Vary jest często używane w odpowiedzi do wskazania dodatkowych nagłówków, które są traktowane jako część klucza pamięci podręcznej, nawet jeśli zazwyczaj nie są kluczowane.
  • Age określa czas w sekundach, przez jaki obiekt był w pamięci podręcznej serwera proxy.
  • Server-Timing: cdn-cache; desc=HIT również wskazuje, że zasób był buforowany

{% content-ref url="../../pentesting-web/cache-deception/" %} cache-deception {% endcontent-ref %}

Nagłówki pamięci podręcznej lokalnej:

  • Clear-Site-Data: Nagłówek wskazujący, jakie dane pamięci podręcznej należy usunąć: Clear-Site-Data: "cache", "cookies"
  • Expires: Zawiera datę/czas, kiedy odpowiedź powinna wygasnąć: Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cache to samo co Cache-Control: no-cache
  • Warning: Ogólny nagłówek HTTP Warning zawiera informacje o możliwych problemach ze stanem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówek Warning. Warning: 110 anderson/1.3.37 "Response is stale"

Warunki

  • Żądania korzystające z tych nagłówków: If-Modified-Since i If-Unmodified-Since zostaną udzielone odpowiedzią tylko wtedy, gdy nagłówek odpowiedzi Last-Modified zawiera inną godzinę.
  • Żądania warunkowe korzystające z If-Match i If-None-Match używają wartości Etag, więc serwer WWW wyśle zawartość odpowiedzi, jeśli dane (Etag) zostały zmienione. Wartość Etag jest pobierana z odpowiedzi HTTP.
  • Wartość Etag jest zazwyczaj obliczana na podstawie zawartości odpowiedzi. Na przykład ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" wskazuje, że Etag to Sha1 z 37 bajtów.

Żądania zakresu

  • Accept-Ranges: Wskazuje, czy serwer obsługuje żądania zakresowe, i jeśli tak, w jakiej jednostce zakres może być wyrażony. Accept-Ranges: <range-unit>
  • Range: Wskazuje część dokumentu, którą serwer powinien zwrócić.
  • If-Range: Tworzy warunkowe żądanie zakresu, które jest spełnione tylko wtedy, gdy podany etag lub data pasuje do zdalnego zasobu. Służy do zapobiegania pobieraniu dwóch zakresów z niezgodnej wersji zasobu.
  • Content-Range: Wskazuje, gdzie w pełnej wiadomości ciała częściowa wiadomość należy.

Informacje o treści wiadomości

  • Content-Length: Rozmiar zasobu, w dziesiętnym liczbie bajtów.
  • Content-Type: Wskazuje typ nośnika zasobu
  • Content-Encoding: Używane do określenia algorytmu kompresji.
  • Content-Language: Opisuje język(i) ludzki(e) przeznaczony dla odbiorcy, dzięki czemu użytkownik może różnicować według własnego preferowanego języka.
  • Content-Location: Wskazuje alternatywną lokalizację zwróconych danych.

Z punktu widzenia testu penetracyjnego te informacje są zazwyczaj "bezużyteczne", ale jeśli zasób jest chroniony przez 401 lub 403 i można znaleźć sposób na uzyskanie tych informacji, może to być interesujące.
Na przykład kombinacja Range i Etag w żądaniu HEAD może ujawnić zawartość strony za pomocą żądań HEAD:

  • Żądanie z nagłówkiem Range: bytes=20-20 i odpowiedzią zawierającą ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" ujawnia, że SHA1 bajtu 20 to ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

Informacje o serwerze

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

Kontrole

  • Allow: Ten nagłówek służy do komunikowania obsługiwanych metod HTTP przez zasób. Na przykład może być określony jako Allow: GET, POST, HEAD, co wskazuje, że zasób obsługuje te metody.
  • Expect: Wykorzystywany przez klienta do przekazywania oczekiwań, które serwer musi spełnić, aby żądanie zostało pomyślnie przetworzone. Powszechne zastosowanie to nagłówek Expect: 100-continue, który sygnalizuje, że klient zamierza wysłać duży ładunek danych. Klient oczekuje odpowiedzi 100 (Continue) przed kontynuacją transmisji. Mechanizm ten pomaga optymalizować wykorzystanie sieci poprzez oczekiwanie na potwierdzenie serwera.

Pobieranie

  • Nagłówek Content-Disposition w odpowiedziach HTTP określa, czy plik powinien być wyświetlany inline (wewnątrz strony internetowej) czy traktowany jako załącznik (pobierany). Na przykład:
Content-Disposition: attachment; filename="filename.jpg"

To oznacza, że plik o nazwie "filename.jpg" ma być pobrany i zapisany.

Nagłówki zabezpieczeń

Polityka zabezpieczeń zawartości (CSP)

{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}

Zaufane typy

Poprzez egzekwowanie Zaufanych Typów za pomocą CSP, aplikacje mogą być chronione przed atakami DOM XSS. Zaufane Typy zapewniają, że tylko specjalnie opracowane obiekty, zgodne z ustalonymi politykami bezpieczeństwa, mogą być używane w niebezpiecznych wywołaniach interfejsu API sieci web, co zabezpiecza domyślnie kod JavaScript.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

Ten nagłówek zapobiega analizowaniu typu MIME, praktyce, która mogłaby prowadzić do podatności na XSS. Zapewnia, że przeglądarki będą szanować typy MIME określone przez serwer.

X-Content-Type-Options: nosniff

X-Frame-Options

Aby zwalczyć clickjacking, ten nagłówek ogranicza sposób osadzania dokumentów w tagach <frame>, <iframe>, <embed> lub <object>, zalecając wszystkim dokumentom określenie swoich uprawnień do osadzania w sposób jawny.

X-Frame-Options: DENY

Polityka zasobów międzydomenowych (CORP) i udostępnianie zasobów międzydomenowych (CORS)

CORP jest kluczowy do określenia, które zasoby mogą być ładowane przez strony internetowe, zmniejszając wycieki między stronami. CORS natomiast pozwala na bardziej elastyczny mechanizm udostępniania zasobów między domenami, łagodząc politykę tej samej domeny w określonych warunkach.

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP) i Cross-Origin Opener Policy (COOP)

COEP i COOP są niezbędne do umożliwienia izolacji między domenami, znacząco zmniejszając ryzyko ataków podobnych do Spectre. Kontrolują one ładowanie zasobów z innych domen oraz interakcje z oknami z innych domen, odpowiednio.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

Ostatecznie, HSTS to funkcja bezpieczeństwa, która zmusza przeglądarki do komunikowania się tylko z serwerami poprzez bezpieczne połączenia HTTPS, zwiększając tym samym prywatność i bezpieczeństwo.

Strict-Transport-Security: max-age=3153600

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: