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

12 KiB

Specjalne nagłówki HTTP

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}

Listy słów i narzędzia

Nagłówki do zmiany lokalizacji

Przepisz IP źródłowe:

  • 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 lokację:

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

Nagłówki hop-by-hop

Nagłówek hop-by-hop to nagłówek, który jest zaprojektowany do przetwarzania i konsumowania przez proxy obsługujące żą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 %}

Smuggling żą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 zostało zapisane w pamięci podręcznej i wartość hit gdy jest zapisane w pamięci podręcznej
  • Podobne zachowanie w nagłówku Cf-Cache-Status
  • Cache-Control wskazuje, czy zasób jest zapisywany w pamięci podręcznej i kiedy będzie następny raz zapisywany w pamięci podręcznej: 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 normalnie nie są kluczowane.
  • Age definiuje czas w sekundach, przez jaki obiekt był w pamięci podręcznej proxy.
  • Server-Timing: cdn-cache; desc=HIT również wskazuje, że zasób był zapisany w pamięci podręcznej

{% 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, które dane w pamięci podręcznej powinny zostać usunięte: Clear-Site-Data: "cache", "cookies"
  • Expires: Zawiera datę/godzinę, 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 statusem 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 używające tych nagłówków: If-Modified-Since i If-Unmodified-Since będą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedzi Last-Modified zawiera inną datę.
  • Warunkowe żądania używające If-Match i If-None-Match używają wartości Etag, aby serwer WWW wysłał zawartość odpowiedzi, jeśli dane (Etag) się zmieniły. Etag jest pobierany 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 37 bajtów.

Żądania zakresu

  • Accept-Ranges: Wskazuje, czy serwer obsługuje żądania zakresu, a 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. Używane do zapobiegania pobieraniu dwóch zakresów z niekompatybilnych wersji zasobu.
  • Content-Range: Wskazuje, gdzie w pełnej wiadomości ciała należy umieścić wiadomość częściową.

Informacje o ciele wiadomości

  • Content-Length: Rozmiar zasobu, w dziesiętnych bajtach.
  • Content-Type: Wskazuje typ mediów zasobu
  • Content-Encoding: Używane do określenia algorytmu kompresji.
  • Content-Language: Opisuje język(languages) przeznaczony dla odbiorców, aby umożliwić użytkownikowi różnicowanie według własnych preferencji językowych.
  • Content-Location: Wskazuje alternatywną lokalizację dla zwróconych danych.

Z punktu widzenia pentestu te informacje są zazwyczaj "bezużyteczne", ale jeśli zasób jest chroniony przez 401 lub 403 i możesz znaleźć jakiś 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 jest używany do komunikowania metod HTTP, które zasób może obsługiwać. 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 mogło zostać pomyślnie przetworzone. Typowym przypadkiem użycia jest nagłówek Expect: 100-continue, który sygnalizuje, że klient zamierza wysłać dużą ilość danych. Klient oczekuje na odpowiedź 100 (Continue) przed kontynuowaniem transmisji. Mechanizm ten pomaga w optymalizacji wykorzystania sieci poprzez oczekiwanie na potwierdzenie serwera.

Pobierania

  • Nagłówek Content-Disposition w odpowiedziach HTTP wskazuje, czy plik powinien być wyświetlany inline (w obrębie strony) 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 bezpieczeństwa treści (CSP)

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

Zaufane typy

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

// 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 sniffingowi typu MIME, praktyce, która może prowadzić do podatności XSS. Zapewnia, że przeglądarki respektują typy MIME określone przez serwer.

X-Content-Type-Options: nosniff

X-Frame-Options

Aby zwalczyć clickjacking, ten nagłówek ogranicza sposób, w jaki dokumenty mogą być osadzane w tagach <frame>, <iframe>, <embed> lub <object>, zalecając, aby wszystkie dokumenty wyraźnie określały swoje uprawnienia do osadzania.

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP) i Cross-Origin Resource Sharing (CORS)

CORP jest kluczowy dla określenia, które zasoby mogą być ładowane przez strony internetowe, łagodząc cross-site leaks. CORS, z drugiej strony, pozwala na bardziej elastyczny mechanizm udostępniania zasobów między różnymi źródłami, łagodząc politykę tego samego źródła w określonych warunkach.

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

Polityka Osadzania Międzydomenowego (COEP) i Polityka Otwierania Międzydomenowego (COOP)

COEP i COOP są niezbędne do umożliwienia izolacji międzydomenowej, znacznie zmniejszając ryzyko ataków podobnych do Spectre. Kontrolują one ładowanie zasobów międzydomenowych oraz interakcję z oknami międzydomenowymi, odpowiednio.

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

HTTP Strict Transport Security (HSTS)

Na koniec, HSTS to funkcja zabezpieczeń, która zmusza przeglądarki do komunikacji z serwerami tylko za pośrednictwem bezpiecznych połączeń HTTPS, co zwiększa prywatność i bezpieczeństwo.

Strict-Transport-Security: max-age=3153600

References

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}