12 KiB
Raw Blame History

Posebni HTTP zaglavlja

{{#include ../../banners/hacktricks-training.md}}

Liste reči i alati

Zaglavlja za promenu lokacije

Prepiši IP izvor:

  • 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 (Proveri hop-by-hop zaglavlja)

Prepiši lokaciju:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

Hop-by-Hop zaglavlja

Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzumirano od strane proksija koji trenutno obrađuje zahtev, za razliku od zaglavlja end-to-end.

  • Connection: close, X-Forwarded-For

{{#ref}} ../../pentesting-web/abusing-hop-by-hop-headers.md {{#endref}}

HTTP Request Smuggling

  • Content-Length: 30
  • Transfer-Encoding: chunked

{{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}}

Cache zaglavlja

Zaglavlja servera za keširanje:

  • X-Cache u odgovoru može imati vrednost miss kada zahtev nije keširan i vrednost hit kada je keširan
  • Slično ponašanje u zaglavlju Cf-Cache-Status
  • Cache-Control označava da li se resurs kešira i kada će biti sledeći put keširan: Cache-Control: public, max-age=1800
  • Vary se često koristi u odgovoru da označi dodatna zaglavlja koja se tretiraju kao deo keš ključa čak i ako su obično neključevi.
  • Age definiše vreme u sekundama koliko je objekat bio u proksi kešu.
  • Server-Timing: cdn-cache; desc=HIT takođe označava da je resurs keširan

{{#ref}} ../../pentesting-web/cache-deception/ {{#endref}}

Lokalna keš zaglavlja:

  • Clear-Site-Data: Zaglavlje koje označava keš koji treba ukloniti: Clear-Site-Data: "cache", "cookies"
  • Expires: Sadrži datum/vreme kada odgovor treba da istekne: Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cache isto kao Cache-Control: no-cache
  • Warning: Opšte HTTP zaglavlje Warning sadrži informacije o mogućim problemima sa statusom poruke. Više od jednog Warning zaglavlja može se pojaviti u odgovoru. Warning: 110 anderson/1.3.37 "Response is stale"

Uslovi

  • Zahtevi koji koriste ova zaglavlja: If-Modified-Since i If-Unmodified-Since biće odgovoreni sa podacima samo ako zaglavlje odgovora Last-Modified sadrži drugačije vreme.
  • Uslovni zahtevi koristeći If-Match i If-None-Match koriste Etag vrednost tako da web server pošalje sadržaj odgovora ako su podaci (Etag) promenjeni. Etag se uzima iz HTTP odgovora.
  • Vrednost Etag se obično izračunava na osnovu sadržaja odgovora. Na primer, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" označava da je Etag Sha1 od 37 bajtova.

Zahtevi opsega

  • Accept-Ranges: Označava da li server podržava zahteve opsega, i ako da, u kojoj jedinici se opseg može izraziti. Accept-Ranges: <range-unit>
  • Range: Označava deo dokumenta koji server treba da vrati. Na primer, Range:80-100 će vratiti bajtove 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da ukloniš zaglavlje Accept-Encoding iz zahteva.
  • Ovo bi moglo biti korisno za dobijanje odgovora sa proizvoljnim reflektovanim javascript kodom koji bi inače mogao biti eskapiran. Ali da bi se ovo zloupotrebilo, potrebno je injektovati ova zaglavlja u zahtev.
  • If-Range: Kreira uslovni zahtev opsega koji se ispunjava samo ako dati etag ili datum odgovara udaljenom resursu. Koristi se da se spreči preuzimanje dva opsega iz nekompatibilnih verzija resursa.
  • Content-Range: Označava gde u punom telu poruke pripada delimična poruka.

Informacije o telu poruke

  • Content-Length: Veličina resursa, u decimalnom broju bajtova.
  • Content-Type: Označava medijski tip resursa
  • Content-Encoding: Koristi se za specifikaciju algoritma kompresije.
  • Content-Language: Opisuje ljudski jezik(e) namenjene publici, tako da omogućava korisniku da razlikuje prema vlastitom preferiranom jeziku.
  • Content-Location: Označava alternativnu lokaciju za vraćene podatke.

Iz perspektive pentesta, ove informacije su obično "beskorisne", ali ako je resurs zaštićen sa 401 ili 403 i možeš pronaći neki način da dobiješ ove informacije, to bi moglo biti zanimljivo.
Na primer, kombinacija Range i Etag u HEAD zahtevu može otkriti sadržaj stranice putem HEAD zahteva:

  • Zahtev sa zaglavljem Range: bytes=20-20 i sa odgovorom koji sadrži ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" otkriva da je SHA1 bajta 20 ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

Informacije o serveru

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

Kontrole

  • Allow: Ovo zaglavlje se koristi za komunikaciju HTTP metoda koje resurs može obraditi. Na primer, može biti specificirano kao Allow: GET, POST, HEAD, što označava da resurs podržava ove metode.
  • Expect: Koristi se od strane klijenta da prenese očekivanja koja server treba da ispuni kako bi zahtev bio uspešno obrađen. Uobičajena upotreba uključuje zaglavlje Expect: 100-continue, koje signalizira da klijent namerava da pošalje veliki paket podataka. Klijent traži 100 (Continue) odgovor pre nego što nastavi sa prenosom. Ovaj mehanizam pomaže u optimizaciji korišćenja mreže čekajući potvrdu servera.

Preuzimanja

  • Zaglavlje Content-Disposition u HTTP odgovorima usmerava da li bi datoteka trebala biti prikazana inline (unutar veb stranice) ili tretirana kao prilog (preuzeta). Na primer:
Content-Disposition: attachment; filename="filename.jpg"

Ovo znači da je datoteka pod nazivom "filename.jpg" namenjena preuzimanju i čuvanju.

Bezbednosni zaglavlja

Politika bezbednosti sadržaja (CSP)

{{#ref}} ../../pentesting-web/content-security-policy-csp-bypass/ {{#endref}}

Poverljivi tipovi

Sprovodeći Poverljive tipove putem CSP-a, aplikacije se mogu zaštititi od DOM XSS napada. Poverljivi tipovi osiguravaju da se samo posebno izrađeni objekti, u skladu sa uspostavljenim bezbednosnim politikama, mogu koristiti u opasnim pozivima web API-ja, čime se podrazumevano osigurava JavaScript kod.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// 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

Ova zaglavlja sprečavaju MIME tip sniffing, praksu koja može dovesti do XSS ranjivosti. Osigurava da pregledači poštuju MIME tipove koje je odredio server.

X-Content-Type-Options: nosniff

X-Frame-Options

Da bi se borili protiv clickjacking-a, ovaj header ograničava kako se dokumenti mogu ugraditi u <frame>, <iframe>, <embed>, ili <object> tagove, preporučujući svim dokumentima da 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 koje resurse mogu učitati veb sajtovi, smanjujući cross-site leak-ove. CORS, s druge strane, omogućava fleksibilniji mehanizam deljenja resursa između različitih izvora, opuštajući politiku istog izvora 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) and Cross-Origin Opener Policy (COOP)

COEP i COOP su ključni za omogućavanje izolacije između različitih izvora, značajno smanjujući rizik od napada sličnih Spectre-u. Oni kontrolišu učitavanje resursa iz drugih izvora i interakciju sa prozorima iz drugih izvora, redom.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

Na kraju, HSTS je bezbednosna funkcija koja prisiljava pretraživače da komuniciraju sa serverima samo preko sigurnih HTTPS veza, čime se poboljšava privatnost i bezbednost.

Strict-Transport-Security: max-age=3153600

Header Name Casing Bypass

HTTP/1.1 definiše imena polja zaglavlja kao neosetljiva na velika i mala slova (RFC 9110 §5.1). Ipak, veoma je uobičajeno pronaći prilagođeni middleware, sigurnosne filtre ili poslovnu logiku koja upoređuje doslovno ime zaglavlja koje je primljeno bez prethodne normalizacije velikih i malih slova (npr. header.equals("CamelExecCommandExecutable")). Ako se te provere vrše osetljivo na velika i mala slova, napadač može da ih zaobiđe jednostavno slanjem istog zaglavlja sa drugačijom kapitalizacijom.

Tipične situacije u kojima se ova greška pojavljuje:

  • Prilagođene liste dozvoljenih/zakonitih koje pokušavaju da blokiraju "opasna" interna zaglavlja pre nego što zahtev stigne do osetljive komponente.
  • Interna implementacija reverznih proxy pseudo-zaglavlja (npr. X-Forwarded-For sanitizacija).
  • Okviri koji izlažu upravljačke / debag endpointe i oslanjaju se na imena zaglavlja za autentifikaciju ili izbor komandi.

Abusing the bypass

  1. Identifikujte zaglavlje koje se filtrira ili validira na serverskoj strani (na primer, čitanjem izvornog koda, dokumentacije ili poruka o grešci).
  2. Pošaljite isto zaglavlje sa drugačijom kapitalizacijom (mešovita ili velika slova). Pošto HTTP stekovi obično kanonizuju zaglavlja samo nakon što je korisnički kod izvršen, ranjiva provera može biti preskočena.
  3. Ako donja komponenta tretira zaglavlja na način koji nije osetljiv na velika i mala slova (većina to radi), prihvatiće vrednost koju kontroliše napadač.

Example: Apache Camel exec RCE (CVE-2025-27636)

U ranjivim verzijama Apache Camel Command Center rute pokušavaju da blokiraju nepouzdane zahteve uklanjanjem zaglavlja CamelExecCommandExecutable i CamelExecCommandArgs. Upoređivanje je izvršeno sa equals(), tako da su samo tačno mala imena uklonjena.

# 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 dolaze do exec komponente nefiltrirana, što rezultira daljinskim izvršavanjem komandi sa privilegijama Camel procesa.

Detekcija i ublažavanje

  • Normalizujte sva imena zaglavlja na jedan oblik (obično mala slova) pre nego što izvršite poređenja dozvola/odbijanja.
  • Odbacite sumnjive duplikate: ako su prisutni i Header: i HeAdEr:, tretirajte to kao anomaliju.
  • Koristite pozitivnu dozvoljenu listu koja se primenjuje posle kanonizacije.
  • Zaštitite upravljačke krajnje tačke autentifikacijom i mrežnom segmentacijom.

Reference

{{#include ../../banners/hacktricks-training.md}}