hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md
2024-02-11 01:46:25 +00:00

12 KiB

Specjalne nagłówki HTTP

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

Inne sposoby wsparcia HackTricks:

Listy słów i narzędzia

Nagłówki do zmiany lokalizacji

Zmień źródło 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)

Zmień lokalizację:

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

Nagłówki hop-by-hop

Nagłówek hop-by-hop jest nagłówkiem, który jest przeznaczony do przetwarzania i konsumowania przez aktualnie obsługujący żądanie serwer proxy, 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 %}

HTTP Request Smuggling

  • 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, jeśli żądanie nie było w pamięci podręcznej, i wartość hit, jeśli jest w pamięci podręcznej
  • 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, aby wskazać dodatkowe nagłówki, które są traktowane jako część klucza pamięci podręcznej, nawet jeśli normalnie nie są kluczowe.
  • Age definiuje czas w sekundach, przez który obiekt był w pamięci podręcznej serwera pośredniczącego.
  • Server-Timing: cdn-cache; desc=HIT również wskazuje, że zasób był buforowany

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

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

  • Clear-Site-Data: Nagłówek wskazujący, jakie dane pamięci podręcznej powinny zostać usunięte: 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 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 korzystające z tych nagłówków: If-Modified-Since i If-Unmodified-Since będą otrzymywać dane 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) uległy zmianie. Wartość Etag jest pobierana z odpowiedzi HTTP.
  • Wartość Etag jest zwykle 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 zakresu i 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 niezgodnych wersji zasobu.
  • Content-Range: Wskazuje, gdzie w pełnej wiadomości ciała znajduje się wiadomość częściowa.

Informacje o treści wiadomości

  • Content-Length: Rozmiar zasobu, w postaci dziesiętnego liczby bajtów.
  • Content-Type: Wskazuje typ multimediów zasobu
  • Content-Encoding: Używane do określenia algorytmu kompresji.
  • Content-Language: Opisuje język(i) ludzki(e) przeznaczony dla odbiorców, umożliwiając użytkownikowi różnicowanie zgodnie z preferowanym przez użytkownika językiem.

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 komunikacji metod HTTP, które zasób może obsłużyć. Na przykład, może być określony jako Allow: GET, POST, HEAD, co oznacza, że zasób obsługuje te metody.
  • Expect: Wykorzystywany przez klienta do przekazania oczekiwań, które serwer musi spełnić, aby żądanie zostało pomyślnie przetworzone. Powszechnym przypadkiem użycia jest nagłówek Expect: 100-continue, który sygnalizuje, że klient zamierza wysłać dużą ilość danych. Klient oczekuje odpowiedzi 100 (Continue) przed kontynuacją transmisji. Ten mechanizm pomaga optymalizować wykorzystanie sieci, oczekując potwierdzenia serwera.

Pobieranie

  • Nagłówek Content-Disposition w odpowiedziach HTTP określa, czy plik powinien być wyświetlany wewnętrznie (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ń treści (CSP)

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

Zaufane typy

Poprzez wprowadzenie 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 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 wykrywaniu typu MIME, praktyce, która może prowadzić do podatności XSS. Zapewnia, że przeglądarki będą respektować 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 znacznikach <frame>, <iframe>, <embed> lub <object>, zalecając, aby wszystkie dokumenty jawnie 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, ograniczając wycieki między stronami. CORS z kolei umożliwia bardziej elastyczny mechanizm udostępniania zasobów między różnymi źródłami, rozluźniając politykę 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

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

COEP i COOP są niezbędne do włączenia izolacji międzydomenowej, co znacznie redukuje ryzyko ataków podobnych do Spectre. Kontrolują ładowanie zasobów z innych domen oraz interakcję 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)

Ostatnią funkcją HSTS jest zabezpieczenie, które zmusza przeglądarki do komunikowania się tylko przez bezpieczne połączenia HTTPS, co zwiększa prywatność i bezpieczeństwo.

Strict-Transport-Security: max-age=3153600

Odwołania

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

Inne sposoby wsparcia HackTricks: