mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
210 lines
12 KiB
Markdown
210 lines
12 KiB
Markdown
# Spezielle HTTP-Header
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
|
|
|
</details>
|
|
|
|
## Wortlisten & Tools
|
|
|
|
* [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)
|
|
|
|
## Header zum Ändern des Standorts
|
|
|
|
Ändern der **IP-Quelle**:
|
|
|
|
* `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` (Überprüfen Sie hop-by-hop-Header)
|
|
|
|
Ändern des **Standorts**:
|
|
|
|
* `X-Original-URL: /admin/console`
|
|
* `X-Rewrite-URL: /admin/console`
|
|
|
|
## Hop-by-Hop-Header
|
|
|
|
Ein Hop-by-Hop-Header ist ein Header, der von dem Proxy verarbeitet und verwendet werden soll, der die Anfrage gerade bearbeitet, im Gegensatz zu einem End-to-End-Header.
|
|
|
|
* `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 %}
|
|
|
|
## HTTP-Request-Smuggling
|
|
|
|
* `Content-Length: 30`
|
|
* `Transfer-Encoding: chunked`
|
|
|
|
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
|
|
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
|
|
{% endcontent-ref %}
|
|
|
|
## Cache-Header
|
|
|
|
**Server-Cache-Header**:
|
|
|
|
* **`X-Cache`** in der Antwort kann den Wert **`miss`** haben, wenn die Anfrage nicht zwischengespeichert wurde, und den Wert **`hit`**, wenn sie zwischengespeichert ist.
|
|
* **`Cache-Control`** gibt an, ob eine Ressource zwischengespeichert wird und wann die Ressource erneut zwischengespeichert wird: `Cache-Control: public, max-age=1800`
|
|
* **`Vary`** wird häufig in der Antwort verwendet, um **zusätzliche Header** anzugeben, die als **Teil des Cache-Schlüssels** behandelt werden, auch wenn sie normalerweise nicht als Schlüssel verwendet werden.
|
|
* **`Age`** definiert die Zeit in Sekunden, die das Objekt im Proxy-Cache war.
|
|
* **`Server-Timing: cdn-cache; desc=HIT`** gibt auch an, dass eine Ressource zwischengespeichert wurde
|
|
|
|
{% content-ref url="../../pentesting-web/cache-deception.md" %}
|
|
[cache-deception.md](../../pentesting-web/cache-deception.md)
|
|
{% endcontent-ref %}
|
|
|
|
**Lokale Cache-Header**:
|
|
|
|
* `Clear-Site-Data`: Header, um den zu entfernenden Cache anzuzeigen: `Clear-Site-Data: "cache", "cookies"`
|
|
* `Expires`: Enthält das Datum/Uhrzeit, wann die Antwort ablaufen sollte: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
|
|
* `Pragma: no-cache` gleichbedeutend mit `Cache-Control: no-cache`
|
|
* `Warning`: Der allgemeine HTTP-Header **`Warning`** enthält Informationen über mögliche Probleme mit dem Status der Nachricht. Mehrere `Warning`-Header können in einer Antwort erscheinen. `Warning: 110 anderson/1.3.37 "Response is stale"`
|
|
|
|
## Bedingungen
|
|
|
|
* Anfragen mit diesen Headern: **`If-Modified-Since`** und **`If-Unmodified-Since`** werden nur mit Daten beantwortet, wenn der Antwortheader **`Last-Modified`** eine andere Zeit enthält.
|
|
* Bedingte Anfragen mit **`If-Match`** und **`If-None-Match`** verwenden einen Etag-Wert, sodass der Webserver den Inhalt der Antwort sendet, wenn sich die Daten (Etag) geändert haben. Das `Etag` wird aus der HTTP-Antwort entnommen.
|
|
* Der **Etag**-Wert wird normalerweise **basierend auf dem Inhalt** der Antwort berechnet. Zum Beispiel gibt `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` an, dass das `Etag` das **Sha1** von **37 Bytes** ist.
|
|
|
|
## Bereichsanfragen
|
|
|
|
* **`Accept-Ranges`**: Gibt an, ob der Server Bereichsanfragen unterstützt und in welcher Einheit der Bereich angegeben werden kann. `Accept-Ranges: <range-unit>`
|
|
* **`Range`**: Gibt den Teil eines Dokuments an, den der Server zurückgeben soll.
|
|
* **`If-Range`**: Erstellt eine bedingte Bereichsanfrage, die nur erfüllt wird, wenn die angegebene Etag oder das Datum mit der entfernten Ressource übereinstimmt. Wird verwendet, um das Herunterladen von zwei Bereichen aus inkompatiblen Versionen der Ressource zu verhindern.
|
|
* **`Content-Range`**: Gibt an, an welcher Stelle in einer vollständigen Nachricht ein Teil einer Nachricht gehört.
|
|
|
|
## Informationen zum Nachrichteninhalt
|
|
|
|
* **`Content-Length`:** Die Größe der Ressource in Dezimalzahl der Bytes.
|
|
* **`Content-Type`**: Gibt den Medientyp der Ressource an.
|
|
* **`Content-Encoding`**: Wird verwendet, um den Komprimierungsalgorithmus anzugeben.
|
|
* **`Content-Language`**: Beschreibt die menschliche Sprache(n), die für das Publikum vorgesehen sind, sodass ein Benutzer entsprechend seiner eigenen bevorzugten Sprache unterscheiden kann.
|
|
* **`Content-Location`**: Gibt einen alternativen Speicherort für die zurückgegebenen Daten an.
|
|
|
|
Aus Sicht eines Pentests sind diese Informationen normalerweise "nutzlos", aber wenn die Ressource durch eine 401 oder 403 geschützt ist und Sie einen Weg finden können, um diese Informationen zu erhalten, könnte dies interessant sein.\
|
|
Zum Beispiel kann eine Kombination aus **`Range`** und **`Etag`** in einer HEAD-Anfrage den Inhalt der Seite über HEAD-Anfragen preisgeben:
|
|
|
|
* Eine Anfrage mit dem Header `Range: bytes=20-20` und einer Antwort, die `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` enthält, gibt preis, dass das SHA1 des Bytes 20 `ETag: eoGvPlkaxxP4HqHv6
|
|
## Server-Info
|
|
|
|
* `Server: Apache/2.4.1 (Unix)`
|
|
* `X-Powered-By: PHP/5.3.3`
|
|
|
|
## Steuerungen
|
|
|
|
* **`Allow`**: Dieser Header wird verwendet, um die HTTP-Methoden zu kommunizieren, die eine Ressource verarbeiten kann. Zum Beispiel kann er als `Allow: GET, POST, HEAD` angegeben werden, um anzuzeigen, dass die Ressource diese Methoden unterstützt.
|
|
* **`Expect`**: Wird vom Client verwendet, um Erwartungen mitzuteilen, die der Server erfüllen muss, damit die Anfrage erfolgreich verarbeitet werden kann. Ein häufiger Anwendungsfall beinhaltet den `Expect: 100-continue`-Header, der signalisiert, dass der Client beabsichtigt, eine große Datenlast zu senden. Der Client wartet auf eine `100 (Continue)`-Antwort, bevor er mit der Übertragung fortfährt. Dieser Mechanismus hilft dabei, die Netzwerkauslastung zu optimieren, indem er auf die Bestätigung des Servers wartet.
|
|
|
|
## Downloads
|
|
|
|
* Der **`Content-Disposition`**-Header in HTTP-Antworten gibt an, ob eine Datei **inline** (innerhalb der Webseite) angezeigt oder als **Anhang** (heruntergeladen) behandelt werden soll. Zum Beispiel:
|
|
```
|
|
Content-Disposition: attachment; filename="filename.jpg"
|
|
```
|
|
Dies bedeutet, dass die Datei mit dem Namen "filename.jpg" zum Herunterladen und Speichern vorgesehen ist.
|
|
|
|
## Sicherheitsheader
|
|
|
|
### Content Security Policy (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 %}
|
|
|
|
### **Trusted Types**
|
|
|
|
Durch die Durchsetzung von Trusted Types über CSP können Anwendungen vor DOM XSS-Angriffen geschützt werden. Trusted Types stellen sicher, dass nur speziell erstellte Objekte, die den etablierten Sicherheitsrichtlinien entsprechen, in gefährlichen Web-API-Aufrufen verwendet werden können, wodurch der JavaScript-Code standardmäßig abgesichert wird.
|
|
```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**
|
|
|
|
Dieser Header verhindert das MIME-Typ-Sniffing, eine Praxis, die zu XSS-Sicherheitslücken führen könnte. Er stellt sicher, dass Browser die vom Server angegebenen MIME-Typen respektieren.
|
|
```
|
|
X-Content-Type-Options: nosniff
|
|
```
|
|
### **X-Frame-Options**
|
|
|
|
Um Clickjacking zu bekämpfen, beschränkt dieser Header, wie Dokumente in `<frame>`, `<iframe>`, `<embed>` oder `<object>` Tags eingebettet werden können, und empfiehlt, dass alle Dokumente ihre Einbettungsberechtigungen explizit angeben.
|
|
```
|
|
X-Frame-Options: DENY
|
|
```
|
|
### **Cross-Origin Resource Policy (CORP) und Cross-Origin Resource Sharing (CORS)**
|
|
|
|
CORP ist entscheidend, um festzulegen, welche Ressourcen von Websites geladen werden können und um Cross-Site-Leaks zu verhindern. CORS ermöglicht hingegen einen flexibleren Mechanismus für das Teilen von Ressourcen zwischen verschiedenen Ursprüngen und lockert die Same-Origin-Policy unter bestimmten Bedingungen.
|
|
```
|
|
Cross-Origin-Resource-Policy: same-origin
|
|
Access-Control-Allow-Origin: https://example.com
|
|
Access-Control-Allow-Credentials: true
|
|
```
|
|
### **Cross-Origin Embedder Policy (COEP) und Cross-Origin Opener Policy (COOP)**
|
|
|
|
COEP und COOP sind entscheidend, um die Cross-Origin-Isolierung zu ermöglichen und das Risiko von Spectre-ähnlichen Angriffen erheblich zu reduzieren. Sie kontrollieren das Laden von Ressourcen aus anderen Ursprüngen und die Interaktion mit Fenstern aus anderen Ursprüngen.
|
|
```
|
|
Cross-Origin-Embedder-Policy: require-corp
|
|
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
|
```
|
|
### **HTTP Strict Transport Security (HSTS)**
|
|
|
|
Zuletzt ist HSTS eine Sicherheitsfunktion, die Browser dazu zwingt, nur über sichere HTTPS-Verbindungen mit Servern zu kommunizieren und somit die Privatsphäre und Sicherheit zu verbessern.
|
|
```
|
|
Strict-Transport-Security: max-age=3153600
|
|
```
|
|
## Referenzen
|
|
|
|
* [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)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
|
|
|
</details>
|