9.0 KiB
Specijalni HTTP zaglavlja
{{#include ../../banners/hacktricks-training.md}}
Liste reči 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 IP izvor:
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 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: 30Transfer-Encoding: chunked
{{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}}
Cache zaglavlja
Zaglavlja keš servera:
X-Cacheu odgovoru može imati vrednostmisskada zahtev nije keširan i vrednosthitkada je keširan- Slična ponašanja u zaglavlju
Cf-Cache-Status Cache-Controloznačava da li se resurs kešira i kada će biti sledeći put keširan:Cache-Control: public, max-age=1800Varyse često koristi u odgovoru da označi dodatna zaglavlja koja se tretiraju kao deo keš ključa čak i ako su obično bez ključa.Agedefiniše vreme u sekundama koliko je objekat bio u kešu proksija.Server-Timing: cdn-cache; desc=HITtakođe označava da je resurs keširan
{{#ref}} ../../pentesting-web/cache-deception/ {{#endref}}
Zaglavlja lokalnog keša:
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 GMTPragma: no-cacheisto kaoCache-Control: no-cacheWarning: Opšte HTTP zaglavljeWarningsadrži informacije o mogućim problemima sa statusom poruke. Može se pojaviti više od jednogWarningzaglavlja u odgovoru.Warning: 110 anderson/1.3.37 "Response is stale"
Uslovi
- Zahtevi koji koriste ova zaglavlja:
If-Modified-SinceiIf-Unmodified-Sincebiće odgovoreni sa podacima samo ako zaglavlje odgovora**Last-Modified** sadrži drugačije vreme. - Uslovni zahtevi koristeći
If-MatchiIf-None-Matchkoriste Etag vrednost 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"označava da jeEtagSha1 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.If-Range: Stvara 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 resursaContent-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 401 ili 403 i možete pronaći neki način da dobijete 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-20i odgovorom koji sadržiETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"otkriva 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 za komunikaciju HTTP metoda koje resurs može obraditi. Na primer, može biti specificirano kaoAllow: 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 zaglavljeExpect: 100-continue, koje signalizira da klijent namerava da pošalje veliki paket podataka. Klijent traži100 (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-Dispositionu 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 Headeri
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, '<').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
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 prava na ugradnju.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) i 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) i 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
Reference
- 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
{{#include ../../banners/hacktricks-training.md}}