12 KiB
Specjalne nagłówki HTTP
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud 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 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 coCache-Control: no-cache
Warning
: Ogólny nagłówek HTTPWarning
zawiera informacje o możliwych problemach ze stanem 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 korzystające z tych nagłówków:
If-Modified-Since
iIf-Unmodified-Since
zostaną udzielone odpowiedzią tylko wtedy, gdy nagłówek odpowiedziLast-Modified
zawiera inną godzinę. - Żądania warunkowe korzystające z
If-Match
iIf-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, żeEtag
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 zasobuContent-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 toETag: 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 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 zostało pomyślnie przetworzone. Powszechne zastosowanie to nagłówekExpect: 100-continue
, który sygnalizuje, że klient zamierza wysłać duży ładunek danych. Klient oczekuje odpowiedzi100 (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, '<').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 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
- 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
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.