Posebna HTTP zaglavlja
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Wordlists i alati
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Zaglavlja za promenu lokacije
Prepiši izvor IP-a:
X-Originating-IP: 127.0.0.1X-Forwarded-For: 127.0.0.1X-Forwarded: 127.0.0.1Forwarded-For: 127.0.0.1X-Forwarded-Host: 127.0.0.1X-Remote-IP: 127.0.0.1X-Remote-Addr: 127.0.0.1X-ProxyUser-Ip: 127.0.0.1X-Original-URL: 127.0.0.1Client-IP: 127.0.0.1X-Client-IP: 127.0.0.1X-Host: 127.0.0.1True-Client-IP: 127.0.0.1Cluster-Client-IP: 127.0.0.1Via: 1.0 fred, 1.1 127.0.0.1Connection: close, X-Forwarded-For(Proveri hop-by-hop zaglavlja)
Prepiši lokaciju:
X-Original-URL: /admin/consoleX-Rewrite-URL: /admin/console
Hop-by-Hop headers
Hop-by-hop zaglavlje je zaglavlje koje treba da bude obrađeno i potrošeno od strane proxyja koji trenutno rukuje zahtevom, za razliku od end-to-end zaglavlja.
Connection: close, X-Forwarded-For
HTTP Request Smuggling
Content-Length: 30Transfer-Encoding: chunked
HTTP Request Smuggling / HTTP Desync Attack
Zaglavlje Expect
Klijent može poslati zaglavlje Expect: 100-continue, nakon čega server može odgovoriti sa HTTP/1.1 100 Continue kako bi klijent nastavio sa slanjem tela zahteva. Međutim, neki proxyji ne vole ovo zaglavlje.
Zanimljivi efekti Expect: 100-continue:
- Slanje HEAD zahteva sa telom — server nije uzeo u obzir da HEAD zahtevi obično nemaju telo i ostavio je konekciju otvorenom dok nije istekla.
- Neki serveri su u odgovoru slali čudne podatke: nasumične bajtove pročitane iz socket-a, tajne ključeve ili čak su dozvoljavali da front-end ne ukloni određene vrednosti zaglavlja.
- Takođe je izazvalo
0.CLdesinhronizaciju kada backend odgovori sa 400 umesto 100, ali frontend proxy je bio spreman da pošalje telo inicijalnog zahteva, pa ga pošalje i backend ga tumači kao novi zahtev. - Varijanta
Expect: y 100-continuetakođe je izazvala0.CLdesinhronizaciju. - Slična greška gde je backend odgovorio sa 404 generisala je
CL.0desinhronizaciju zato što zlonamerni zahtev navodiContent-Length, pa backend pošalje zlonamerni zahtev +Content-Lengthbajtova sledećeg zahteva (žrtve). Ovo desinhronizuje red: backend šalje 404 odgovor za zlonamerni zahtev + odgovor za zahtev žrtve, dok frontend misli da je poslat samo jedan zahtev, pa drugi odgovor preusmeri na drugog korisnika i tako dalje…
Za više informacija o HTTP Request Smuggling pogledaj:
HTTP Request Smuggling / HTTP Desync Attack
Cache zaglavlja
Server Cache Headers:
X-Cacheu odgovoru može imati vrednostmisskada zahtev nije bio u kešu i vrednosthitkada jeste keširan- Sličan prikaz u zaglavlju
Cf-Cache-Status Cache-Controlpokazuje da li se resurs kešira i kada će biti sledeće keširanje:Cache-Control: public, max-age=1800Varyse često koristi u odgovoru da naznači dodatna zaglavlja koja se tretiraju kao deo cache ključa, čak i ako obično nisu uključena u ključ.Agedefiniše vreme u sekundama koliko je objekat bio u proxy kešu.Server-Timing: cdn-cache; desc=HITtakođe ukazuje da je resurs bio keširan
Cache Poisoning and Cache Deception
Local Cache zaglavlja:
Clear-Site-Data: Zaglavlje koje označava keševe koji treba da budu obrisani:Clear-Site-Data: "cache", "cookies"Expires: Sadrži datum/vreme kada odgovor treba da istekne:Expires: Wed, 21 Oct 2015 07:28:00 GMTPragma: no-cacheisto kaoCache-Control: no-cacheWarning: Generalno HTTP zaglavlje koje sadrži informacije o mogućim problemima sa statusom poruke. Više od jednogWarningzaglavlja može se pojaviti u odgovoru.Warning: 110 anderson/1.3.37 "Response is stale"
Uslovni zahtevi
- Zahtevi koristeći zaglavlja
If-Modified-SinceiIf-Unmodified-Sincebiće odgovoreni podacima samo ako odgovor sadrži drugačije vreme u zaglavljuLast-Modified. - Uslovni zahtevi koristeći
If-MatchiIf-None-Matchkoriste vrednost Etag tako da web server pošalje sadržaj odgovora ako su podaci (Etag) promenjeni.Etagse uzima iz HTTP odgovora. - Vrednost Etag se obično izračunava na osnovu sadržaja odgovora. Na primer,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"znači da jeEtagSha1 za 37 bajtova.
Range zahtevi
Accept-Ranges: Označava da li server podržava range zahteve i u kojoj jedinici se raspon izražava.Accept-Ranges: <range-unit>Range: Označava deo dokumenta koji server treba da vrati. Na primer,Range:80-100će vratiti bajtove od 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da uklonišAccept-Encodingzaglavlje iz zahteva.- Ovo može biti korisno da se dobije odgovor sa proizvoljnim reflektovanim javascript kodom koji bi inače bio escapovan. Ali da bi se zloupotrebilo ovo, potrebno je ubaciti ova zaglavlja u zahtev.
If-Range: Kreira uslovni range zahtev koji se ispunjava samo ako dati etag ili datum odgovara udaljenom resursu. Koristi se da se spreči preuzimanje dva raspona iz inkompatibilnih verzija resursa.Content-Range: Označava gde u potpunom telu poruke delimična poruka pripada.
Informacije o telu poruke
Content-Length: Veličina resursa, u dekadnom broju bajtova.Content-Type: Označava medija tip resursaContent-Encoding: Koristi se za specificiranje algoritma kompresije.Content-Language: Opisuje ljudski jezik(ove) za publiku, kako bi korisnik mogao da razlikuje prema sopstvenim preferencijama jezika.Content-Location: Označava alternativnu lokaciju za vraćene podatke.
Sa stanovišta pentest-a ove informacije su obično “neupotrebljive”, ali ako je resurs zaštićen sa 401 ili 403 i možete naći neki način da dobijete ove info, to može biti zanimljivo.
Na primer, kombinacija Range i Etag u HEAD zahtevu može leak sadržaj stranice putem HEAD zahteva:
- Zahtev sa zaglavljem
Range: bytes=20-20i odgovorom koji sadržiETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"leak-uje da je SHA1 bajta 20ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
Informacije o serveru
Server: Apache/2.4.1 (Unix)X-Powered-By: PHP/5.3.3
Kontrole
Allow: Ovo zaglavlje se koristi da saopšti HTTP metode koje resurs može da obrađuje. Na primer, može bitiAllow: GET, POST, HEAD, što znači da resurs podržava te metode.Expect: Koristi se od strane klijenta da izrazi očekivanja koja server treba da ispuni da bi zahtev bio uspešno obrađen. Uobičajen primer jeExpect: 100-continuezaglavlje, koje signalizira da klijent namerava da pošalje veliki payload podataka. Klijent očekuje100 (Continue)pre nego što nastavi sa slanjem. Ovaj mehanizam pomaže u optimizaciji mrežnog saobraćaja tako što čeka potvrdu servera.
Preuzimanja
Content-Dispositionzaglavlje u HTTP odgovorima određuje da li fajl treba da se prikaže inline (unutar web stranice) ili da bude tretiran kao attachment (preuzet). Na primer:
Content-Disposition: attachment; filename="filename.jpg"
Ovo znači da je fajl nazvan “filename.jpg” predviđen za preuzimanje i čuvanje.
Sigurnosna zaglavlja
Content Security Policy (CSP)
Content Security Policy (CSP) Bypass
Trusted Types
Primenom Trusted Types kroz CSP, aplikacije mogu biti zaštićene od DOM XSS napada. Trusted Types obezbeđuju da samo posebno pripremljeni objekti, usklađeni sa uspostavljenim sigurnosnim politikama, mogu biti korišćeni u opasnim web API pozivima, čime se JavaScript kod podrazumevano štiti.
// 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
Ovaj header sprečava MIME type sniffing, praksu koja može dovesti do XSS ranjivosti. On osigurava da pregledači poštuju MIME type-ove koje specificira server.
X-Content-Type-Options: nosniff
X-Frame-Options
Da bi se suzbio clickjacking, ovaj header ograničava na koji način se dokumenti mogu ugrađivati u <frame>, <iframe>, <embed> ili <object> tagove, preporučujući da svi dokumenti eksplicitno navedu svoja dopuštenja za ugradnju.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)
CORP je ključan za određivanje koji resursi mogu biti učitani od strane veb sajtova, smanjujući cross-site leaks. CORS, s druge strane, omogućava fleksibilniji cross-origin resource sharing mehanizam, opuštajući same-origin policy pod određenim uslovima.
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Cross-Origin Embedder Policy (COEP) i Cross-Origin Opener Policy (COOP)
COEP i COOP su neophodni za omogućavanje cross-origin izolacije, što značajno smanjuje rizik od Spectre-like napada. COEP kontroliše učitavanje cross-origin resursa, a COOP kontroliše interakciju sa cross-origin prozorima.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
Na kraju, HSTS je sigurnosna funkcija koja primorava pretraživače da komuniciraju sa serverima samo preko sigurnih HTTPS konekcija, čime se poboljšava privatnost i bezbednost.
Strict-Transport-Security: max-age=3153600
Permissions-Policy (formerly Feature-Policy)
Permissions-Policy omogućava web programerima da selektivno omoguće, onemoguće ili izmene ponašanje određenih funkcionalnosti pregledača i API-ja unutar dokumenta. To je naslednik sada zastarelog Feature-Policy zaglavlja. Ovo zaglavlje pomaže da se smanji površina napada ograničavanjem pristupa moćnim funkcijama koje bi mogle biti zloupotrebljene.
Permissions-Policy: geolocation=(), camera=(), microphone=()
Uobičajene direktive:
| Directive | Opis |
|---|---|
accelerometer | Kontroliše pristup senzoru akcelerometra |
camera | Kontroliše pristup uređajima za video ulaz (webcam) |
geolocation | Kontroliše pristup Geolocation API |
gyroscope | Kontroliše pristup senzoru žiroskopa |
magnetometer | Kontroliše pristup senzoru magnetometra |
microphone | Kontroliše pristup uređajima za audio ulaz |
payment | Kontroliše pristup Payment Request API |
usb | Kontroliše pristup WebUSB API |
fullscreen | Kontroliše pristup Fullscreen API |
autoplay | Kontroliše da li mediji mogu automatski da se reprodukuju |
clipboard-read | Kontroliše pristup čitanju sadržaja clipboard-a |
clipboard-write | Kontroliše pristup pisanju u clipboard |
Vrednosti sintakse:
()- Onemogućava funkciju u potpunosti(self)- Dozvoljava funkciju samo za isti origin*- Dozvoljava funkciju za sve origin-e(self "https://example.com")- Dozvoljava za isti origin i navedenu domenu
Primer konfiguracija:
# Restrictive policy - disable most features
Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=(), usb=()
# Allow camera only from same origin
Permissions-Policy: camera=(self)
# Allow geolocation for same origin and a trusted partner
Permissions-Policy: geolocation=(self "https://maps.example.com")
Sa bezbednosne tačke gledišta, nedostajući ili previše permisivni Permissions-Policy headeri mogu omogućiti napadačima (npr. putem XSS ili ugrađenih iframe-ova) da zloupotrebe moćne funkcije browsera. Uvek ograničite funkcionalnosti na minimum neophodan za vašu aplikaciju.
Zaobilaženje provere velikih/malih slova u imenima headera
HTTP/1.1 definiše nazive header polja kao neosetljive na velika/mala slova (RFC 9110 §5.1). Ipak, vrlo je često naći custom middleware, security filtere, ili poslovnu logiku koja poredi literalno primljeno ime headera bez prethodne normalizacije pisma (npr. header.equals("CamelExecCommandExecutable")). Ako se te provere obavljaju osetljivo na velika/mala slova, napadač ih može zaobići jednostavnim slanjem istog headera sa drugačijom kapitalizacijom.
Tipične situacije gde se ova greška pojavljuje:
- Prilagođene liste dozvoljenih/odbijenih koje pokušavaju da blokiraju “opasne” interne headere pre nego što zahtev stigne do osetljive komponente.
- Interna implementacija reverse-proxy pseudo-headera (npr.
X-Forwarded-Forsanitizacija). - Framework-i koji izlažu management / debug endpoint-e i oslanjaju se na imena headera za autentifikaciju ili izbor komandi.
Zloupotreba zaobilaženja
- Identifikujte header koji se filtrira ili validira na serverskoj strani (na primer, čitanjem izvornog koda, dokumentacije, ili poruka o greškama).
- Pošaljite isti header sa drugačijom kapitalizacijom (mešovito ili velikim slovima). Pošto HTTP stack-ovi obično normalizuju headere tek posle izvršavanja korisničkog koda, ranjiva provera može biti preskočena.
- Ako downstream komponenta tretira headere neosetljivo na velika/mala slova (većina ih to radi), prihvatiće vrednost pod kontrolom napadača.
Example: Apache Camel exec RCE (CVE-2025-27636)
U ranjivim verzijama Apache Camel, Command Center rute pokušavaju da blokiraju nepouzdane zahteve uklanjanjem header-a CamelExecCommandExecutable i CamelExecCommandArgs. Poređenje je rađeno pomoću equals() pa su uklanjana samo imena sa tačnom kapitalizacijom.
# 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: /"
Zaglavlja dopiru do exec komponente nefiltrirano, što rezultira remote command execution sa privilegijama Camel procesa.
Otkrivanje i ublažavanje
- Normalizujte sva imena headera u jedan oblik (obično lowercase) pre izvršavanja allow/deny poređenja.
- Odbacite sumnjive duplikate: ako su prisutni i
Header:iHeAdEr:, tretirajte to kao anomaliju. - Koristite pozitivnu listu dozvoljenih (allow-list) koja se primenjuje nakon kanonizacije.
- Zaštitite upravljačke endpoint-e autentifikacijom i mrežnom segmentacijom.
References
- 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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

