10 KiB
Specjalne nagłówki HTTP
{{#include ../../banners/hacktricks-training.md}}
Listy słów i narzędzia
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Nagłówki do zmiany lokalizacji
Przepisz adres IP:
X-Originating-IP: 127.0.0.1X-Forwarded-For: 127.0.0.1X-Forwarded: 127.0.0.1Forwarded-For: 127.0.0.1X-Forwarded-Host: 127.0.0.1X-Remote-IP: 127.0.0.1X-Remote-Addr: 127.0.0.1X-ProxyUser-Ip: 127.0.0.1X-Original-URL: 127.0.0.1Client-IP: 127.0.0.1X-Client-IP: 127.0.0.1X-Host: 127.0.0.1True-Client-IP: 127.0.0.1Cluster-Client-IP: 127.0.0.1Via: 1.0 fred, 1.1 127.0.0.1Connection: close, X-Forwarded-For(Sprawdź nagłówki hop-by-hop)
Przepisz lokację:
X-Original-URL: /admin/consoleX-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
{{#ref}} ../../pentesting-web/abusing-hop-by-hop-headers.md {{#endref}}
Przemycanie żądań HTTP
Content-Length: 30Transfer-Encoding: chunked
{{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}}
Nagłówki pamięci podręcznej
Nagłówki pamięci podręcznej serwera:
X-Cachew odpowiedzi może mieć wartośćmissgdy żądanie nie zostało zapisane w pamięci podręcznej i wartośćhitgdy jest zapisane- Podobne zachowanie w nagłówku
Cf-Cache-Status Cache-Controlwskazuje, czy zasób jest zapisywany w pamięci podręcznej i kiedy będzie następny raz zapisywany:Cache-Control: public, max-age=1800Varyjest 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.Agedefiniuje czas w sekundach, przez jaki obiekt był w pamięci podręcznej proxy.Server-Timing: cdn-cache; desc=HITrównież wskazuje, że zasób był zapisany w pamięci podręcznej
{{#ref}} ../../pentesting-web/cache-deception/ {{#endref}}
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 GMTPragma: no-cacheto samo coCache-Control: no-cacheWarning: Ogólny nagłówek HTTPWarningzawiera informacje o możliwych problemach ze statusem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówekWarning.Warning: 110 anderson/1.3.37 "Response is stale"
Warunki
- Żądania używające tych nagłówków:
If-Modified-SinceiIf-Unmodified-Sincebędą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedziLast-Modifiedzawiera inny czas. - Warunkowe żądania używające
If-MatchiIf-None-Matchwykorzystują wartość Etag, aby serwer WWW wysłał zawartość odpowiedzi, jeśli dane (Etag) się zmieniły.Etagjest pobierany z odpowiedzi HTTP. - Wartość Etag jest zazwyczaj obliczana na podstawie zawartości odpowiedzi. Na przykład,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"wskazuje, żeEtagto 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ć. Na przykład,Range:80-100zwróci bajty od 80 do 100 oryginalnej odpowiedzi z kodem statusu 206 Partial Content. Pamiętaj również, aby usunąć nagłówekAccept-Encodingz żądania.- Może to być przydatne do uzyskania odpowiedzi z dowolnym odzwierciedlonym kodem JavaScript, który w przeciwnym razie mógłby być zablokowany. Aby to wykorzystać, musisz wstrzyknąć te nagłówki w żądaniu.
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 zasobuContent-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 pentestów 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 ujawniać zawartość strony za pomocą żądań HEAD:
- Żądanie z nagłówkiem
Range: bytes=20-20i odpowiedzią zawierającąETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"ujawnia, że SHA1 bajtu 20 toETag: 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 jakoAllow: 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łówekExpect: 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-Dispositionw 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)
{{#ref}} ../../pentesting-web/content-security-policy-csp-bypass/ {{#endref}}
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 webowych, 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, '<').replace(/>/g, '>');
});
}
// 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 wycieki między witrynami. 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 pochodzenia 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)
Ostatnio, 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
Odniesienia
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
{{#include ../../banners/hacktricks-training.md}}