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

206 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>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować 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
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* 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) github repos.
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
2024-02-11 01:46:25 +00:00
Zmień **źródło 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
2024-02-11 01:46:25 +00:00
Zmień **lokalizację**:
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
2024-02-11 01:46:25 +00:00
Nagłówek hop-by-hop jest nagłówkiem, który jest przeznaczony do przetwarzania i konsumowania przez aktualnie obsługujący żądanie serwer proxy, 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
2022-06-27 16:53:32 +00:00
## HTTP Request Smuggling
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
2024-02-11 01:46:25 +00:00
* **`X-Cache`** w odpowiedzi może mieć wartość **`miss`**, jeśli żądanie nie było w pamięci podręcznej, i wartość **`hit`**, jeśli jest w pamięci podręcznej
* **`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, aby **wskazać dodatkowe nagłówki**, które są traktowane jako **część klucza pamięci podręcznej**, nawet jeśli normalnie nie są kluczowe.
* **`Age`** definiuje czas w sekundach, przez który obiekt był w pamięci podręcznej serwera pośredniczącego.
* **`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
2024-02-11 01:46:25 +00:00
* `Clear-Site-Data`: Nagłówek wskazujący, jakie dane pamięci podręcznej powinny zostać usunięte: `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 co `Cache-Control: no-cache`
* `Warning`: Ogólny nagłówek HTTP **`Warning`** zawiera informacje o możliwych problemach ze statusem 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
2024-02-11 01:46:25 +00:00
* Żądania korzystające z tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** będą otrzymywać dane tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inną godzinę.
* Żądania warunkowe korzystające z **`If-Match`** i **`If-None-Match`** używają wartości Etag, więc serwer WWW wyśle zawartość odpowiedzi, jeśli dane (Etag) uległy zmianie. 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
2024-02-11 01:46:25 +00:00
* **`Accept-Ranges`**: Wskazuje, czy serwer obsługuje żądania zakresu i 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 niezgodnych wersji zasobu.
* **`Content-Range`**: Wskazuje, gdzie w pełnej wiadomości ciała znajduje się wiadomość częściowa.
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
2024-02-11 01:46:25 +00:00
* **`Content-Length`:** Rozmiar zasobu, w postaci dziesiętnego liczby bajtów.
* **`Content-Type`**: Wskazuje typ multimediów zasobu
* **`Content-Encoding`**: Używane do określenia algorytmu kompresji.
* **`Content-Language`**: Opisuje język(i) ludzki(e) przeznaczony dla odbiorców, umożliwiając użytkownikowi różnicowanie zgodnie z preferowanym przez użytkownika językiem.
*
## 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
2024-02-11 01:46:25 +00:00
* **`Allow`**: Ten nagłówek służy do komunikacji metod HTTP, które zasób może obsłużyć. Na przykład, może być określony jako `Allow: GET, POST, HEAD`, co oznacza, że zasób obsługuje te metody.
* **`Expect`**: Wykorzystywany przez klienta do przekazania oczekiwań, które serwer musi spełnić, aby żądanie zostało pomyślnie przetworzone. Powszechnym przypadkiem użycia jest nagłówek `Expect: 100-continue`, który sygnalizuje, że klient zamierza wysłać dużą ilość danych. Klient oczekuje odpowiedzi `100 (Continue)` przed kontynuacją transmisji. Ten mechanizm pomaga optymalizować wykorzystanie sieci, oczekując potwierdzenia 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
2024-02-11 01:46:25 +00:00
* Nagłówek **`Content-Disposition`** w odpowiedziach HTTP określa, czy plik powinien być wyświetlany **wewnętrznie** (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**
2024-02-11 01:46:25 +00:00
Poprzez wprowadzenie 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 kod JavaScript domyślnie.
```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
2024-02-11 01:46:25 +00:00
Ten nagłówek zapobiega wykrywaniu typu MIME, praktyce, która może prowadzić do podatności XSS. Zapewnia, że przeglądarki będą respektować 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
2024-02-11 01:46:25 +00:00
Aby zwalczyć clickjacking, ten nagłówek ogranicza sposób osadzania dokumentów w znacznikach `<frame>`, `<iframe>`, `<embed>` lub `<object>`, zalecając, aby wszystkie dokumenty jawnie określały swoje uprawnienia do osadzania.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
X-Frame-Options: DENY
```
2024-02-11 01:46:25 +00:00
### **Cross-Origin Resource Policy (CORP) i Cross-Origin Resource Sharing (CORS)**
2021-10-19 22:49:43 +00:00
2024-02-11 01:46:25 +00:00
CORP jest kluczowy dla określenia, które zasoby mogą być ładowane przez strony internetowe, ograniczając wycieki między stronami. CORS z kolei umożliwia bardziej elastyczny mechanizm udostępniania zasobów między różnymi źródłami, rozluźniając politykę samego źródła 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)**
2024-02-11 01:46:25 +00:00
COEP i COOP są niezbędne do włączenia izolacji międzydomenowej, co znacznie redukuje ryzyko ataków podobnych do Spectre. Kontrolują ładowanie zasobów z innych domen oraz interakcję z oknami z innych domen, 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
2024-02-11 01:46:25 +00:00
Ostatnią funkcją HSTS jest zabezpieczenie, które zmusza przeglądarki do komunikowania się tylko przez bezpieczne połączenia HTTPS, co zwiększa 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
```
2024-02-11 01:46:25 +00:00
## Odwołania
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>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować 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
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* 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) github repos.
2022-04-28 16:01:33 +00:00
</details>