Vichwa Maalum vya HTTP
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Orodha za maneno & Zana
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Vichwa vya Kubadilisha Eneo
Andika upya chanzo cha IP:
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(Angalia hop-by-hop headers)
Andika upya eneo:
X-Original-URL: /admin/consoleX-Rewrite-URL: /admin/console
Hop-by-Hop headers
Hop-by-hop header ni kichwa kilichoundwa kushughulikiwa na proxy inayoshughulikia ombi kwa sasa, tofauti na end-to-end header ambayo huwasilishwa hadi mwisho.
Connection: close, X-Forwarded-For
HTTP Request Smuggling
Content-Length: 30Transfer-Encoding: chunked
HTTP Request Smuggling / HTTP Desync Attack
The Expect header
Inawezekana kwa mteja kutuma kichwa Expect: 100-continue na kisha server kujibu na HTTP/1.1 100 Continue ili kumruhusu mteja kuendelea kutuma body ya ombi. Hata hivyo, baadhi ya proxies hawapendi kichwa hiki.
Matokeo ya kuvutia ya Expect: 100-continue:
- Kutuma ombi la HEAD lenye body, server ikaona kuwa HEAD haina body na ikaendelea kuweka connection wazi hadi ilipoisha muda.
- Servers nyingine zilituma data zisizo za kawaida: data nasibu zilizosomwa kutoka socket katika response, vifuniko vya siri au hata ikaruhusu kuzuia front-end kuondoa thamani za vichwa.
- Pia ilisababisha desync ya
0.CLkwa sababu backend iliweza kujibu na 400 badala ya 100, lakini proxy front-end ilikuwa tayari kutuma body ya ombi la awali, hivyo ililituma na backend ikaliona kama ombi jipya. - Kutuma utofauti wa
Expect: y 100-continuepia ilisababisha desync ya0.CL. - Hitilafu sawa ambapo backend ilijibu na 404 ilizalisha desync ya
CL.0kwa sababu ombi mbaya ulionyeshaContent-Length, hivyo backend ilituma ombi mbaya +Content-Lengthbytes za ombi lijalo (la mshitakiwa), hii ilisababisha desync kwa mstari wa mezani: backend ilituma response ya 404 kwa ombi mbaya + response za ombi la mshitakiwa, lakini front-end ilidhani ombi 1 tu lilitumwa, hivyo response ya pili ilisafirishwa kwa mshitakiwa mwingine na kadhalika…
Kwa info zaidi kuhusu HTTP Request Smuggling angalia:
HTTP Request Smuggling / HTTP Desync Attack
Cache Headers
Server Cache Headers:
X-Cachekatika response inaweza kuwa na thamanimisswakati ombi halikuhifadhiwa na thamanihitwakati limehifadhiwa- Tabia sawa katika kichwa
Cf-Cache-Status Cache-Controlinaonyesha ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena:Cache-Control: public, max-age=1800Varykawaida hutumika katika response kuonyesha vichwa vya ziada vinavyotendewa kama sehemu ya key ya cache hata kama kawaida havijumuishwi.Ageinaelezea sekunde ambazo kitu kimekuwa katika cache ya proxy.Server-Timing: cdn-cache; desc=HITpia inaonyesha kuwa rasilimali ilihifadhiwa
Cache Poisoning and Cache Deception
Local Cache headers:
Clear-Site-Data: Kichwa cha kuonyesha cache ambayo inapaswa kuondolewa:Clear-Site-Data: "cache", "cookies"Expires: Inabeba tarehe/muda ambapo response inapaswa kuisha:Expires: Wed, 21 Oct 2015 07:28:00 GMTPragma: no-cachesawa naCache-Control: no-cacheWarning: Kichwa cha jumla cha HTTP kinachobeba taarifa kuhusu matatizo yanayoweza kuwepo na status ya ujumbe. Kunaweza kuonekana zaidi ya kichwa kimoja chaWarningkatika response.Warning: 110 anderson/1.3.37 "Response is stale"
Conditionals
- Mombi zinazotumia vichwa hivi:
If-Modified-SincenaIf-Unmodified-Sincezitatolewa data tu ikiwa response headerLast-Modifiedina wakati tofauti. - Mombi ya masharti yanayotumia
If-MatchnaIf-None-Matchhutumia thamani ya Etag hivyo web server itatuma maudhui ya response ikiwa data (Etag) imebadilika.Etaghupatikana kutoka kwenye HTTP response. - Thamani ya Etag kawaida huhesabiwa kwa msingi wa maudhui ya response. Kwa mfano,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"inaonyesha kwambaEtagni Sha1 ya bytes 37.
Range requests
Accept-Ranges: Inaonyesha kama server inasaidia range requests, na ikiwa ndiyo ni kwa unit gani range inaweza kuelezwa.Accept-Ranges: <range-unit>Range: Inaonyesha sehemu ya hati ambayo server inapaswa kurudisha. Kwa mfano,Range:80-100itarudisha bytes 80 hadi 100 za response asilia kwa status code 206 Partial Content. Pia kumbuka kuondoa kichwaAccept-Encodingkutoka kwa ombi.- Hii inaweza kuwa muhimu kupata response yenye javascript iliyoreflect inayoweza kuepukwa vinginevyo. Lakini kuibiashara hii ungetakiwa kuingiza vichwa hivi kwenye ombi.
If-Range: Inaunda ombi la range la masharti ambalo linafanywa tu ikiwa etag au tarehe iliyotolewa inalingana na rasilimali ya mbali. Inatumika kuzuia kupakua ranges mbili kutoka kwa toleo lisilolingana la rasilimali.Content-Range: Inaonyesha wapi katika ujumbe kamili wa body ujumbe wa sehemu unafaa.
Message body information
Content-Length: Ukubwa wa rasilimali, kwa namba ya desimali ya bytes.Content-Type: Inaonyesha aina ya media ya rasilimaliContent-Encoding: Inatumika kubainisha algorithm ya compression.Content-Language: Inaelezea lugha(za) za binadamu zinazokusudiwa kwa watazamaji, ili kumruhusu mtumiaji kutofautisha kulingana na lugha anayoipendelea.Content-Location: Inaonyesha eneo mbadala kwa data iliyorudishwa.
Kwa mtazamo wa pentest taarifa hizi kwa kawaida ni “zinazotumika kidogo”, lakini ikiwa rasilimali imekingwa na 401 au 403 na unaweza kupata njia yoyote ya kupata taarifa hizi, hii inaweza kuwa ya kuvutia.
Kwa mfano, mchanganyiko wa Range na Etag katika ombi la HEAD unaweza leak maudhui ya ukurasa kupitia HEAD requests:
- Ombi lenye kichwa
Range: bytes=20-20na response yenyeETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"inaleak kuwa SHA1 ya byte 20 niETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
Server Info
Server: Apache/2.4.1 (Unix)X-Powered-By: PHP/5.3.3
Udhibiti
Allow: Kichwa hiki hutumika kuwasilisha njia za HTTP ambazo rasilimali inaweza kushughulikia. Kwa mfano, inaweza kubainishwa kamaAllow: GET, POST, HEAD, ikionyesha kuwa rasilimali inasaidia njia hizi.Expect: Inatumika na mteja kuonyesha matarajio ambayo server inapaswa kuyakidhi ili ombi kushughulikiwa kwa mafanikio. Mfano wa kawaida niExpect: 100-continue, ambayo inaashiria kuwa mteja anakusudia kutuma payload kubwa. Mteja anatazamia majibu ya100 (Continue)kabla ya kuendelea na uhamisho. Mekanizimu hii husaidia kuimarisha matumizi ya mtandao kwa kusubiri uthibitisho wa server.
Upakuaji
- Kichwa cha
Content-Dispositionkatika HTTP responses kinaelekeza kama faili inapaswa kuonyeshwa inline (ndani ya ukurasa wa wavuti) au kutendewa kama attachment (kupakuliwa). Kwa mfano:
Content-Disposition: attachment; filename="filename.jpg"
Hii inamaanisha faili iliyoitwa “filename.jpg” inakusudiwa kupakuliwa na kuhifadhiwa.
Vichwa vya Usalama
Content Security Policy (CSP)
Content Security Policy (CSP) Bypass
Trusted Types
Kwa kuhakikisha Trusted Types kupitia CSP, programu zinaweza kulindwa dhidi ya mashambulizi ya DOM XSS. Trusted Types zinahakikisha kwamba vitu vilivyotengenezwa mahsusi tu, vinavyokubaliana na sera za usalama zilizowekwa, vinaweza kutumika katika miito hatarishi ya API za wavuti, na hivyo kulinda JavaScript kwa chaguo-msingi.
// 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
Kichwa hiki kinazuia uchunguzi wa aina za MIME, tabia ambayo inaweza kusababisha udhaifu wa XSS. Kinahakikisha kwamba vivinjari vinaheshimu aina za MIME zilizobainishwa na seva.
X-Content-Type-Options: nosniff
X-Frame-Options
Kupambana na clickjacking, header hii inaleta vizuizi juu ya jinsi nyaraka zinaweza kuingizwa katika <frame>, <iframe>, <embed>, au <object> tags, ikipendekeza nyaraka zote zibainishe wazi ruhusa zao za uingizaji.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) na Cross-Origin Resource Sharing (CORS)
CORP ni muhimu kwa kutaja ni rasilimali gani zinaweza kupakiwa na tovuti, hivyo kupunguza cross-site leaks. CORS, kwa upande mwingine, inaruhusu utaratibu wenye utele zaidi wa kushiriki rasilimali za cross-origin, ukiruhusu kupunguza vikwazo vya same-origin policy chini ya masharti fulani.
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 na COOP ni muhimu kwa kuwezesha isolation ya cross-origin, na kupunguza kwa kiasi kikubwa hatari ya mashambulizi yanayofanana na Spectre. Zinadhibiti upakiaji wa rasilimali za cross-origin na mwingiliano na madirisha ya cross-origin, mtawalia.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
Mwishowe, HSTS ni kipengele cha usalama kinachowalazimisha vivinjari kuwasiliana na seva tu kupitia muunganisho salama wa HTTPS, hivyo kuboresha faragha na usalama.
Strict-Transport-Security: max-age=3153600
Permissions-Policy (formerly Feature-Policy)
Permissions-Policy inawaruhusu watengenezaji wa wavuti kwa njia chaguo-chagu kuamilisha, kuzima, au kubadilisha tabia ya vipengele fulani vya kivinjari na APIs ndani ya nyaraka. Ni mrithi wa header ya Feature-Policy, ambayo sasa imekatishwa. Header hii husaidia kupunguza eneo la mashambulizi kwa kuzuia ufikiaji wa vipengele vyenye nguvu vinavyoweza kutumiwa vibaya.
Permissions-Policy: geolocation=(), camera=(), microphone=()
Maagizo ya kawaida:
| Directive | Maelezo |
|---|---|
accelerometer | Inadhibiti ufikiaji wa sensori ya Accelerometer |
camera | Inadhibiti ufikiaji wa vifaa vya pembejeo za video (webcam) |
geolocation | Inadhibiti ufikiaji wa Geolocation API |
gyroscope | Inadhibiti ufikiaji wa sensori ya Gyroscope |
magnetometer | Inadhibiti ufikiaji wa sensori ya Magnetometer |
microphone | Inadhibiti ufikiaji wa vifaa vya pembejeo za sauti |
payment | Inadhibiti ufikiaji wa Payment Request API |
usb | Inadhibiti ufikiaji wa WebUSB API |
fullscreen | Inadhibiti ufikiaji wa Fullscreen API |
autoplay | Inadhibiti kama vyombo vya habari vinaweza kucheza moja kwa moja |
clipboard-read | Inadhibiti ufikiaji wa kusoma yaliyopo kwenye clipboard |
clipboard-write | Inadhibiti ufikiaji wa kuandika kwenye clipboard |
Thamani za sintaksia:
()- Inazima kipengele kabisa(self)- Inaruhusu kipengele kwa chanzo sawa pekee*- Inaruhusu kipengele kwa vyanzo vyote(self "https://example.com")- Inaruhusu kwa chanzo sawa na domeini iliyotajwa
Mipangilio ya mfano:
# 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")
Kwa mtazamo wa usalama, header za Permissions-Policy zinazokosekana au zinazoruhusu kila kitu zinaweza kumruhusu mshambuliaji (kwa mfano, kupitia XSS au iframes zilizowekwa) kutumia vibaya vipengele vyenye nguvu vya kivinjari. Daima punguza vipengele kwa kiwango cha chini kinachohitajika kwa programu yako.
Header Name Casing Bypass
HTTP/1.1 inaeleza majina ya field za header kama hayazingatii makubwa/dogo ya herufi (RFC 9110 §5.1). Walakini, ni kawaida sana kukuta middleware maalum, vichujio vya usalama, au loji ya biashara zinazolinganishwa jina la header kama ilivyopokelewa bila kusawazisha kesi kwanza (kwa mfano, header.equals("CamelExecCommandExecutable")). Ikiwa ukaguzi huo unafanywa kwa kuzingatia kesi, mshambuliaji anaweza kuupitisha kwa kutuma header ile ile kwa utofauti wa herufi.
Typical situations where this mistake appears:
- Custom allow/deny lists that try to block “dangerous” internal headers before the request reaches a sensitive component.
- In-house implementations of reverse-proxy pseudo-headers (e.g.
X-Forwarded-Forsanitisation). - Frameworks that expose management / debug endpoints and rely on header names for authentication or command selection.
Abusing the bypass
- Tambua header ambayo inasafishwa au kuthibitishwa upande wa server (kwa mfano, kwa kusoma msimbo wa chanzo, nyaraka, au ujumbe wa makosa).
- Tuma header ile ile kwa casing tofauti (mchanganyiko wa herufi au zote herufi kubwa). Kwa sababu stack za HTTP kwa kawaida husawazisha headers tu baada msimbo wa mtumiaji umeendeshwa, ukaguzi uliowekwa hatarini unaweza kupitishwa.
- Ikiwa sehemu ya downstream inashughulikia headers bila kuzingatia herufi kubwa/dogo (wengi hufanya hivyo), itakubali thamani inayodhibitiwa na mshambuliaji.
Mfano: Apache Camel exec RCE (CVE-2025-27636)
Katika matoleo yaliyoathirika ya Apache Camel njia za Command Center zinajaribu kuzuia maombi yasiyo ya kuaminika kwa kuondoa headers CamelExecCommandExecutable na CamelExecCommandArgs. Ulinganisho ulifanywa kwa kutumia equals() hivyo majina hasa ya herufi ndogo pekee yaliondolewa.
# 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: /"
Headers zinawafikia sehemu ya exec bila kuchujwa, na kusababisha remote command execution kwa kutumia vibali vya Camel process.
Utambuzi & Uzuiaji
- Sanifisha majina yote ya header kuwa katika aina moja ya herufi (kawaida lowercase) kabla ya kufanya kulinganisha kwa allow/deny.
- Kataa nakala zinazoshukiwa: ikiwa
Header:naHeAdEr:zipo pamoja, zitachukuliwa kama anomalia. - Tumia allow-list chanya inayotekelezwa baada ya canonicalisation.
- Linda management endpoints kwa authentication na network segmentation.
Marejeo
- 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
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


