Spesiale HTTP koppe
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Woordlyste & Gereedskap
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Koppe om Ligging te Verander
Herschryf IP bron:
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
(Kontroleer hop-by-hop koppe)
Herschryf ligging:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Hop-by-Hop koppe
'n Hop-by-hop kop is 'n kop wat ontwerp is om verwerk en verbruik te word deur die proxy wat tans die versoek hanteer, in teenstelling met 'n eind-tot-eind kop.
Connection: close, X-Forwarded-For
{{#ref}} ../../pentesting-web/abusing-hop-by-hop-headers.md {{#endref}}
HTTP Versoek Smuggling
Content-Length: 30
Transfer-Encoding: chunked
{{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}}
Cache Koppe
Bediener Cache Koppe:
X-Cache
in die antwoord mag die waardemiss
hê wanneer die versoek nie in die cache was nie en die waardehit
wanneer dit in die cache is- Soortgelyke gedrag in die kop
Cf-Cache-Status
Cache-Control
dui aan of 'n hulpbron in die cache gestoor word en wanneer die volgende keer die hulpbron weer in die cache gestoor sal word:Cache-Control: public, max-age=1800
Vary
word dikwels in die antwoord gebruik om addisionele koppe aan te dui wat as deel van die cache sleutel behandel word, selfs al is hulle normaalweg nie gesleutel nie.Age
definieer die tye in sekondes wat die objek in die proxy cache was.Server-Timing: cdn-cache; desc=HIT
dui ook aan dat 'n hulpbron in die cache was
{{#ref}} ../../pentesting-web/cache-deception/ {{#endref}}
Plaaslike Cache koppe:
Clear-Site-Data
: Kop om aan te dui watter cache verwyder moet word:Clear-Site-Data: "cache", "cookies"
Expires
: Bevat datum/tyd wanneer die antwoord moet verval:Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
dieselfde asCache-Control: no-cache
Warning
: DieWarning
algemene HTTP kop bevat inligting oor moontlike probleme met die status van die boodskap. Meer as eenWarning
kop mag in 'n antwoord verskyn.Warning: 110 anderson/1.3.37 "Response is stale"
Voorwaardes
- Versoeke wat hierdie koppe gebruik:
If-Modified-Since
enIf-Unmodified-Since
sal met data geantwoord word slegs as die antwoord kopLast-Modified
'n ander tyd bevat. - Voorwaardelike versoeke wat
If-Match
enIf-None-Match
gebruik, gebruik 'n Etag waarde sodat die webbediener die inhoud van die antwoord sal stuur as die data (Etag) verander het. DieEtag
word uit die HTTP antwoord geneem. - Die Etag waarde word gewoonlik bereken op grond van die inhoud van die antwoord. Byvoorbeeld,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"
dui aan dat dieEtag
die Sha1 van 37 bytes is.
Bereik versoeke
Accept-Ranges
: Dui aan of die bediener bereik versoeke ondersteun, en indien wel, in watter eenheid die bereik uitgedruk kan word.Accept-Ranges: <range-unit>
Range
: Dui die deel van 'n dokument aan wat die bediener moet teruggee. Byvoorbeeld,Range:80-100
sal die bytes 80 tot 100 van die oorspronklike antwoord met 'n statuskode van 206 Partial Content teruggee. Onthou ook om dieAccept-Encoding
kop uit die versoek te verwyder.- Dit kan nuttig wees om 'n antwoord met arbitrêre weerkaatste javascript kode te kry wat andersins ontsnap kon word. Maar om dit te misbruik, moet jy hierdie koppe in die versoek inspuit.
If-Range
: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawe van die hulpbron afgelaai word.Content-Range
: Dui aan waar in 'n volle liggaam boodskap 'n gedeeltelike boodskap behoort.
Boodskap liggaam inligting
Content-Length
: Die grootte van die hulpbron, in desimale getal van bytes.Content-Type
: Dui die media tipe van die hulpbron aanContent-Encoding
: Gebruik om die kompressie algoritme aan te dui.Content-Language
: Beskryf die menslike taal/tale wat bedoel is vir die gehoor, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal.Content-Location
: Dui 'n alternatiewe ligging aan vir die teruggegee data.
Vanuit 'n pentest oogpunt is hierdie inligting gewoonlik "nutteloos", maar as die hulpbron beskerm word deur 'n 401 of 403 en jy 'n manier kan vind om hierdie inligting te kry, kan dit interessant wees.
Byvoorbeeld, 'n kombinasie van Range
en Etag
in 'n HEAD versoek kan die inhoud van die bladsy via HEAD versoeke lek:
- 'n versoek met die kop
Range: bytes=20-20
en met 'n antwoord watETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
bevat, lek dat die SHA1 van die byte 20ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
is
Bediener Inligting
Server: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
Beheer
Allow
: Hierdie kop word gebruik om die HTTP metodes te kommunikeer wat 'n hulpbron kan hanteer. Byvoorbeeld, dit kan gespesifiseer word asAllow: GET, POST, HEAD
, wat aandui dat die hulpbron hierdie metodes ondersteun.Expect
: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels dieExpect: 100-continue
kop, wat aandui dat die kliënt van plan is om 'n groot data payload te stuur. Die kliënt soek 'n100 (Continue)
antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag.
Aflaaie
- Die
Content-Disposition
kop in HTTP antwoorde dui aan of 'n lêer inline (binne die webblad) vertoon moet word of as 'n aanhegting (afgelaai) behandel moet word. Byvoorbeeld:
Content-Disposition: attachment; filename="filename.jpg"
Dit beteken die lêer met die naam "filename.jpg" is bedoel om afgelaai en gestoor te word.
Sekuriteitskoppe
Inhoud Sekuriteitsbeleid (CSP)
{{#ref}} ../../pentesting-web/content-security-policy-csp-bypass/ {{#endref}}
Vertroude Tipes
Deur Vertroude Tipes deur CSP af te dwing, kan toepassings teen DOM XSS-aanvalle beskerm word. Vertroude Tipes verseker dat slegs spesifiek saamgestelde voorwerpe, wat voldoen aan gevestigde sekuriteitsbeleide, in gevaarlike web API-oproepe gebruik kan word, wat JavaScript-kode standaard beveilig.
// 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
Hierdie kop voorkom MIME-tipe sniffing, 'n praktyk wat kan lei tot XSS kwesbaarhede. Dit verseker dat blaaiers die MIME-tipes wat deur die bediener gespesifiseer is, respekteer.
X-Content-Type-Options: nosniff
X-Frame-Options
Om clickjacking te bekamp, beperk hierdie kop hoe dokumente in <frame>
, <iframe>
, <embed>
, of <object>
etikette ingebed kan word, en beveel aan dat alle dokumente hul inbedingsregte eksplisiet spesifiseer.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) en Cross-Origin Resource Sharing (CORS)
CORP is belangrik om te spesifiseer watter hulpbronne deur webwerwe gelaai kan word, wat kruis-web lekkasies verminder. CORS, aan die ander kant, stel 'n meer buigsame kruis-oorsprong hulpbron deelmekanisem in, wat die self-oorsprong beleid onder sekere omstandighede ontspan.
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Cross-Origin Embedder Policy (COEP) en Cross-Origin Opener Policy (COOP)
COEP en COOP is noodsaaklik vir die inskakeling van kruis-oorsprong isolasie, wat die risiko van Spectre-agtige aanvalle aansienlik verminder. Hulle beheer die laai van kruis-oorsprong hulpbronne en die interaksie met kruis-oorsprong vensters, onderskeidelik.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
Laastens is HSTS 'n sekuriteitskenmerk wat blaaiers dwing om slegs oor veilige HTTPS-verbindinge met bedieners te kommunikeer, wat privaatheid en sekuriteit verbeter.
Strict-Transport-Security: max-age=3153600
Header Naam Kas Bypass
HTTP/1.1 definieer header veld-names as kas-ongevoelig (RFC 9110 §5.1). Nietemin, dit is baie algemeen om aangepaste middleware, sekuriteitsfilters, of besigheidslogika te vind wat die letterlike header naam ontvang sonder om die kas eers te normaliseer (bv. header.equals("CamelExecCommandExecutable")
). As daardie kontroles kas-gevoelig uitgevoer word, kan 'n aanvaller dit eenvoudig omseil deur dieselfde header met 'n ander kapitalisering te stuur.
Tipiese situasies waar hierdie fout voorkom:
- Aangepaste toelaat/ontken lyste wat probeer om “gevaarlike” interne headers te blokkeer voordat die versoek 'n sensitiewe komponent bereik.
- In-huis implementasies van omgekeerde-proxy pseudo-headers (bv.
X-Forwarded-For
sanitasie). - Raamwerke wat bestuur / foutopsporing eindpunte blootstel en staatmaak op header name vir outentisering of opdragkeuse.
Misbruik van die bypass
- Identifiseer 'n header wat gefilter of gevalideer word aan die bediener-kant (byvoorbeeld, deur bronkode, dokumentasie, of foutboodskappe te lees).
- Stuur die dieselfde header met 'n ander kas (gemengde-kas of hoofletters). Omdat HTTP stakke gewoonlik headers slegs nadat gebruikerskode uitgevoer is, kan die kwesbare kontrole oorgeslaan word.
- As die downstream komponent headers op 'n kas-ongevoelige manier hanteer (meeste doen), sal dit die aanvaller-beheerde waarde aanvaar.
Voorbeeld: Apache Camel exec
RCE (CVE-2025-27636)
In kwesbare weergawes van Apache Camel probeer die Command Center roetes om onbetroubare versoeke te blokkeer deur die headers CamelExecCommandExecutable
en CamelExecCommandArgs
te verwyder. Die vergelyking is gedoen met equals()
sodat slegs die presiese kleinletters name verwyder is.
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"
Die koppe bereik die exec
komponent ongefilterd, wat lei tot afstandsopdraguitvoering met die voorregte van die Camel-proses.
Opsporing & Versagting
- Normaliseer alle kopnaam na 'n enkele geval (gewoonlik kleinletters) voor jy toelaat/ontken vergelykings uitvoer.
- Verwerp verdagte duplikate: as beide
Header:
enHeAdEr:
teenwoordig is, behandel dit as 'n anomalie. - Gebruik 'n positiewe toelaatlys wat na kanonisering afgedwing word.
- Beskerm bestuurs eindpunte met outentisering en netwerksegmentasie.
Verwysings
- CVE-2025-27636 – RCE in Apache Camel via header casing bypass (OffSec blog)
- 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
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.