12 KiB
Spezielle HTTP-Header
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories einreichen.
Wortlisten & Tools
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers
- https://github.com/rfc-st/humble
Header zum Ändern des Standorts
IP-Quelle umschreiben:
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)
Standort umschreiben:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Hop-by-Hop-Header
Ein Hop-by-Hop-Header ist ein Header, der dazu bestimmt ist, vom Proxy verarbeitet und konsumiert zu werden, der aktuell die Anfrage 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 {% endcontent-ref %}
HTTP-Anforderungsschmuggel
Content-Length: 30
Transfer-Encoding: chunked
{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}
Cache-Header
Server-Cache-Header:
X-Cache
in der Antwort kann den Wertmiss
haben, wenn die Anfrage nicht zwischengespeichert wurde, und den Werthit
, wenn sie zwischengespeichert ist- Ähnliches Verhalten im Header
Cf-Cache-Status
Cache-Control
gibt an, ob eine Ressource zwischengespeichert wird und wann die Ressource wieder zwischengespeichert wird:Cache-Control: public, max-age=1800
Vary
wird oft in der Antwort verwendet, um zusätzliche Header anzugeben, die als Teil des Cache-Schlüssels behandelt werden, auch wenn sie normalerweise nicht schlüsselbasiert sind.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 {% endcontent-ref %}
Lokale Cache-Header:
Clear-Site-Data
: Header, um den zu löschenden Cache anzugeben:Clear-Site-Data: "cache", "cookies"
Expires
: Enthält Datum/Uhrzeit, wann die Antwort ablaufen sollte:Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
gleichbedeutend mitCache-Control: no-cache
Warning
: Der allgemeine HTTP-HeaderWarning
enthält Informationen über mögliche Probleme mit dem Status der Nachricht. Mehr als einWarning
-Header kann in einer Antwort erscheinen.Warning: 110 anderson/1.3.37 "Response is stale"
Bedingungen
- Anfragen mit diesen Headern:
If-Modified-Since
undIf-Unmodified-Since
werden nur mit Daten beantwortet, wenn der Antwort-HeaderLast-Modified
eine andere Zeit enthält. - Bedingte Anfragen mit
If-Match
undIf-None-Match
verwenden einen Etag-Wert, sodass der Webserver den Inhalt der Antwort sendet, wenn sich die Daten (Etag) geändert haben. DerEtag
wird aus der HTTP-Antwort entnommen. - Der Etag-Wert wird normalerweise basierend auf dem Inhalt der Antwort berechnet. Zum Beispiel zeigt
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"
an, dass derEtag
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 der 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, wo in einer vollständigen Nachricht ein Teil der Nachricht gehört.
Informationen zum Nachrichteninhalt
Content-Length
: Die Größe der Ressource, in dezimalen Bytezahlen.Content-Type
: Gibt den Medientyp der Ressource anContent-Encoding
: Wird verwendet, um den Komprimierungsalgorithmus anzugeben.Content-Language
: Beschreibt die für das Publikum vorgesehene menschliche Sprache(n), sodass ein Benutzer entsprechend seiner eigenen bevorzugten Sprache unterscheiden kann.Content-Location
: Gibt einen alternativen Speicherort für die zurückgegebenen Daten an.
Von einem Pentest-Gesichtspunkt aus 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.
Beispielsweise 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, dieETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
enthält, gibt preis, dass das SHA1 des Bytes 20ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
ist
Server Info
Server: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
Steuerungen
Erlauben
: Dieser Header wird verwendet, um die HTTP-Methoden zu kommunizieren, die eine Ressource verarbeiten kann. Zum Beispiel könnte angegeben werdenAllow: GET, POST, HEAD
, was darauf hinweist, dass die Ressource diese Methoden unterstützt.Erwarten
: Wird vom Client genutzt, um Erwartungen zu übermitteln, die der Server erfüllen muss, damit die Anfrage erfolgreich verarbeitet wird. Ein häufiger Anwendungsfall beinhaltet denExpect: 100-continue
Header, der signalisiert, dass der Client beabsichtigt, eine große Datenlast zu senden. Der Client wartet auf eine100 (Continue)
Antwort, bevor er mit der Übertragung fortfährt. Dieser Mechanismus hilft dabei, die Netzwerknutzung zu optimieren, indem auf die Bestätigung des Servers gewartet wird.
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"
Sicherheitsheader
Inhaltsicherheitsrichtlinie (CSP)
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}
Vertrauenswürdige Typen
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.
// 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
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 hingegen ermöglicht einen flexibleren Mechanismus für den Austausch von Ressourcen zwischen verschiedenen Ursprüngen und lockert die Same-Origin-Richtlinie 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 für die Aktivierung der Cross-Origin-Isolierung und reduzieren signifikant das Risiko von Spectre-ähnlichen Angriffen. 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, wodurch die Privatsphäre und Sicherheit verbessert werden.
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
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories einreichen.