hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

212 lines
12 KiB
Markdown
Raw Normal View History

2024-02-11 01:46:25 +00:00
# Specjalne nagłówki HTTP
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-02-03 12:22:53 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 01:46:25 +00:00
## Listy słów i narzędzia
2021-09-19 15:52:48 +00:00
* [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers)
* [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
2021-09-19 15:52:48 +00:00
2024-02-11 01:46:25 +00:00
## Nagłówki do zmiany lokalizacji
2021-09-19 15:19:00 +00:00
Zmiana **źródła IP**:
2021-09-19 15:19:00 +00:00
2022-04-05 22:24:52 +00:00
* `X-Originating-IP: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `X-Forwarded-For: 127.0.0.1`
2022-04-19 22:38:50 +00:00
* `X-Forwarded: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Forwarded-For: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Forwarded-Host: 127.0.0.1`
2022-04-05 22:24:52 +00:00
* `X-Remote-IP: 127.0.0.1`
2021-09-19 15:19:00 +00:00
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Client-IP: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
2021-09-20 13:06:32 +00:00
* `Via: 1.0 fred, 1.1 127.0.0.1`
2024-02-11 01:46:25 +00:00
* `Connection: close, X-Forwarded-For` (Sprawdź nagłówki hop-by-hop)
2021-09-19 15:19:00 +00:00
Zmiana **lokalizacji**:
2021-09-19 15:19:00 +00:00
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
2024-02-11 01:46:25 +00:00
## Nagłówki hop-by-hop
2021-09-19 15:19:00 +00:00
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.
2021-09-19 15:19:00 +00:00
* `Connection: close, X-Forwarded-For`
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
## Przemyt żądań HTTP
2021-09-19 15:19:00 +00:00
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
2021-11-05 20:59:42 +00:00
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
2024-02-11 01:46:25 +00:00
## Nagłówki pamięci podręcznej
2021-09-19 15:52:48 +00:00
2024-02-11 01:46:25 +00:00
**Nagłówki pamięci podręcznej serwera**:
2021-09-20 13:06:32 +00:00
* **`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`**
2024-02-11 01:46:25 +00:00
* **`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.
2024-02-11 01:46:25 +00:00
* **`Server-Timing: cdn-cache; desc=HIT`** również wskazuje, że zasób był buforowany
2021-09-19 15:52:48 +00:00
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
2021-09-19 15:52:48 +00:00
2024-02-11 01:46:25 +00:00
**Nagłówki pamięci podręcznej lokalnej**:
2021-09-20 13:06:32 +00:00
* `Clear-Site-Data`: Nagłówek wskazujący, jakie dane pamięci podręcznej należy usunąć: `Clear-Site-Data: "cache", "cookies"`
2024-02-11 01:46:25 +00:00
* `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 zawiera informacje o możliwych problemach ze stanem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówek `Warning`. `Warning: 110 anderson/1.3.37 "Response is stale"`
2021-09-20 13:06:32 +00:00
2024-02-11 01:46:25 +00:00
## Warunki
2021-09-19 15:19:00 +00:00
* Żądania korzystające z tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** zostaną udzielone odpowiedzią tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inną godzinę.
* Żądania warunkowe za pomocą **`If-Match`** i **`If-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, że `Etag` to **Sha1** z **37 bajtów**.
2021-09-19 19:55:40 +00:00
2024-02-11 01:46:25 +00:00
## Żądania zakresu
2021-09-19 19:55:40 +00:00
* **`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>`
2024-02-11 01:46:25 +00:00
* **`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.
2021-09-19 19:55:40 +00:00
2024-02-11 01:46:25 +00:00
## Informacje o treści wiadomości
2021-09-19 19:55:40 +00:00
* **`Content-Length`:** Rozmiar zasobu, w dziesiętnym liczbie bajtów.
* **`Content-Type`**: Wskazuje typ nośnika zasobu
2024-02-11 01:46:25 +00:00
* **`Content-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 to `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
2024-02-11 01:46:25 +00:00
## Informacje o serwerze
2021-09-20 13:06:32 +00:00
* `Server: Apache/2.4.1 (Unix)`
* `X-Powered-By: PHP/5.3.3`
2024-02-11 01:46:25 +00:00
## Kontrole
2021-09-20 13:06:32 +00:00
* **`Allow`**: Ten nagłówek służy do komunikowania obsługiwanych metod HTTP przez zasób. Na przykład może być określony jako `Allow: 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łówek `Expect: 100-continue`, który sygnalizuje, że klient zamierza wysłać duży ładunek danych. Klient oczekuje odpowiedzi `100 (Continue)` przed kontynuacją transmisji. Mechanizm ten pomaga optymalizować wykorzystanie sieci poprzez oczekiwanie na potwierdzenie serwera.
2021-09-20 13:06:32 +00:00
2024-02-11 01:46:25 +00:00
## Pobieranie
2021-09-20 13:06:32 +00:00
* 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:
2024-02-08 21:36:15 +00:00
```
Content-Disposition: attachment; filename="filename.jpg"
```
2024-02-11 01:46:25 +00:00
To oznacza, że plik o nazwie "filename.jpg" ma być pobrany i zapisany.
2021-09-20 13:06:32 +00:00
2024-02-11 01:46:25 +00:00
## Nagłówki zabezpieczeń
2024-02-11 01:46:25 +00:00
### Polityka zabezpieczeń treści (CSP) <a href="#csp" id="csp"></a>
2022-04-19 22:38:50 +00:00
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/)
{% endcontent-ref %}
2024-02-11 01:46:25 +00:00
### **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.
```javascript
2021-10-19 22:49:43 +00:00
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
2024-02-11 01:46:25 +00:00
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
2021-10-19 22:49:43 +00:00
}
```
```javascript
2024-02-08 21:36:15 +00:00
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
2021-10-19 22:49:43 +00:00
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
2024-02-08 21:36:15 +00:00
el.innerHTML = escaped; // Results in safe assignment.
2021-10-19 22:49:43 +00:00
```
2024-02-08 21:36:15 +00:00
### **X-Content-Type-Options**
2021-10-19 22:49:43 +00:00
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.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
X-Content-Type-Options: nosniff
```
2024-02-08 21:36:15 +00:00
### **X-Frame-Options**
2021-10-19 22:49:43 +00:00
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.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
X-Frame-Options: DENY
```
### **Polityka zasobów międzydomenowych (CORP) i udostępnianie zasobów międzydomenowych (CORS)**
2021-10-19 22:49:43 +00:00
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.
2021-10-19 22:49:43 +00:00
```
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
2024-02-11 01:46:25 +00:00
### **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.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
Cross-Origin-Embedder-Policy: require-corp
2024-02-08 21:36:15 +00:00
Cross-Origin-Opener-Policy: same-origin-allow-popups
2021-10-19 22:49:43 +00:00
```
2024-02-08 21:36:15 +00:00
### **HTTP Strict Transport Security (HSTS)**
2021-10-19 22:49:43 +00:00
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.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
Strict-Transport-Security: max-age=3153600
```
## Odnośniki
2021-09-19 19:55:40 +00:00
2024-02-08 21:36:15 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
2021-09-19 19:55:40 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
2021-10-19 22:49:43 +00:00
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
2024-02-08 21:36:15 +00:00
* [https://web.dev/articles/security-headers](https://web.dev/articles/security-headers)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-02-03 12:22:53 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
2022-04-28 16:01:33 +00:00
</details>