mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-01 08:59:30 +00:00
214 lines
12 KiB
Markdown
214 lines
12 KiB
Markdown
# Specjalne nagłówki HTTP
|
|
|
|
{% hint style="success" %}
|
|
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Wsparcie dla HackTricks</summary>
|
|
|
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## Listy słów i narzędzia
|
|
|
|
* [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)
|
|
|
|
## 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`
|
|
|
|
{% 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 %}
|
|
|
|
## Smuggling żądań HTTP
|
|
|
|
* `Content-Length: 30`
|
|
* `Transfer-Encoding: chunked`
|
|
|
|
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
|
|
[http-request-smuggling](../../pentesting-web/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 zostało zapisane w pamięci podręcznej i wartość **`hit`** gdy jest zapisane w pamięci podręcznej
|
|
* Podobne zachowanie w nagłówku **`Cf-Cache-Status`**
|
|
* **`Cache-Control`** wskazuje, czy zasób jest zapisywany w pamięci podręcznej i kiedy będzie następny raz zapisywany w pamięci podręcznej: `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ł zapisany w pamięci podręcznej
|
|
|
|
{% content-ref url="../../pentesting-web/cache-deception/" %}
|
|
[cache-deception](../../pentesting-web/cache-deception/)
|
|
{% endcontent-ref %}
|
|
|
|
**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 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"`
|
|
|
|
## Warunki
|
|
|
|
* Żądania używające tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** będą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inną datę.
|
|
* Warunkowe żądania używające **`If-Match`** i **`If-None-Match`** używają wartości 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, że `Etag` 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ć.
|
|
* **`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 zasobu
|
|
* **`Content-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 pentestu 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 to `ETag: 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 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 mogło zostać pomyślnie przetworzone. Typowym przypadkiem użycia jest nagłówek `Expect: 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) <a href="#csp" id="csp"></a>
|
|
|
|
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %}
|
|
[content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/)
|
|
{% endcontent-ref %}
|
|
|
|
### **Zaufane typy**
|
|
|
|
Wymuszając Zaufane Typy za pomocą CSP, aplikacje mogą być chronione przed atakami XSS w DOM. Zaufane Typy zapewniają, że tylko specjalnie przygotowane obiekty, zgodne z ustalonymi politykami bezpieczeństwa, mogą być używane w niebezpiecznych wywołaniach API w sieci, co zabezpiecza kod JavaScript domyślnie.
|
|
```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, '>');
|
|
});
|
|
}
|
|
```
|
|
|
|
```javascript
|
|
// 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 cross-site leaks. CORS, z drugiej strony, pozwala na bardziej elastyczny mechanizm udostępniania zasobów między różnymi źródłami, łagodząc politykę tego samego źródła 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)**
|
|
|
|
Na koniec, 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
|
|
```
|
|
## References
|
|
|
|
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
|
|
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
|
|
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
|
|
* [https://web.dev/articles/security-headers](https://web.dev/articles/security-headers)
|
|
|
|
{% hint style="success" %}
|
|
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Wsparcie dla HackTricks</summary>
|
|
|
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
|
|
|
</details>
|
|
{% endhint %}
|