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 do zmiany lokalizacji
Zmiana źródła 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)
Zmiana lokalizacji:
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.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 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 HTTP 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 za pomocą
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 zwykle 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 zakresu, 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) przeznaczony dla odbiorców, 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ń treś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 może 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 dla określenia, które zasoby mogą być ładowane przez strony internetowe, zmniejszając wycieki między stronami. CORS natomiast umożliwia 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ą kluczowe dla umożliwienia izolacji między-oryginalnej, znacząco zmniejszając ryzyko ataków podobnych do Spectre. Kontrolują one ładowanie zasobów z innych źródeł oraz interakcje z oknami z innych źródeł, odpowiednio.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
Ostatecznie, HSTS to funkcja zabezpieczeń, 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
Zdobądź wiedzę na temat 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 telegram lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.