<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia mifumo ya kazi** kwa kutumia zana za **jamii za juu zaidi** ulimwenguni.\
> * Katika **kufyonza cache ya wavuti**, mkaidi husababisha programu kuhifadhi baadhi ya maudhui mabaya kwenye cache, na maudhui haya hutolewa kutoka kwenye cache kwa watumiaji wengine wa programu.
> * Katika **udanganyifu wa cache ya wavuti**, mkaidi husababisha programu kuhifadhi baadhi ya maudhui nyeti yanayomilikiwa na mtumiaji mwingine kwenye cache, na mkaidi kisha anapata maudhui haya kutoka kwenye cache.
Kufyonza cache inalenga kubadilisha cache upande wa mteja ili kulazimisha wateja kupakia rasilimali ambazo si za kawaida, sehemu, au chini ya udhibiti wa mkaidi. Upeo wa athari unategemea umaarufu wa ukurasa ulioathiriwa, kwani jibu lililochafuliwa hutolewa kwa watumiaji wanaotembelea ukurasa wakati wa kufyonza cache.
1.**Ugunduzi wa Vipengele Visivyo na Kichawi**: Hivi ni vipengele ambavyo, ingawa sio lazima kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalorudishwa na seva. Kutambua vipengele hivi ni muhimu kwani vinaweza kutumiwa kudanganya cache.
2.**Kutumia Vipengele Visivyo na Kichawi**: Baada ya kutambua vipengele visivyo na kichawi, hatua inayofuata ni kugundua jinsi ya kutumia vipengele hivi kukiuka majibu ya seva kwa njia inayonufaisha mkaidi.
3.**Kuhakikisha Jibu Lililofyonzwa linahifadhiwa kwenye Cache**: Hatua ya mwisho ni kuhakikisha kwamba jibu lililobadilishwa limewekwa kwenye cache. Kwa njia hii, mtumiaji yeyote anayepata ukurasa ulioathiriwa wakati wa kufyonza cache atapokea jibu lililochafuliwa.
Kawaida, wakati jibu limewekwa kwenye cache kutakuwa na **kichwa kinachoonyesha hivyo**, unaweza kuangalia vichwa vipi unapaswa kutilia maanani katika chapisho hili: [**Vichwa vya Cache vya HTTP**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
Ikiwa unadhani kwamba jibu linawekwa kwenye cache, unaweza kujaribu **kutuma maombi na kichwa kibaya**, ambacho kinapaswa kujibiwa na **msimbo wa hali 400**. Kisha jaribu kupata ombi kawaida na ikiwa **jibu ni msimbo wa hali 400**, unajua kuwa ni dhaifu (na hata unaweza kufanya DoS).\
Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kufanya **nguvu ya lazima ya vipengele na vichwa** ambavyo vinaweza **kubadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kutumia kichwa `X-Forwarded-For` kuonyesha mteja kupakia skripti kutoka hapo:
Baada ya kutambua parameter/header, angalia jinsi inavyo **safishwa** na **wapi** ina **athiri** au inaathiri majibu kutoka kwa header. Je, unaweza kuitumia kwa njia yoyote (kufanya XSS au kupakia msimbo wa JS unaodhibitiwa na wewe? kufanya DoS?...)
Baada ya **kutambua****ukurasa** ambao unaweza kutumiwa vibaya, ni **parameter**/**header** gani ya kutumia na **jinsi** ya **kuitumia**, unahitaji kupata ukurasa uliohifadhiwa. Kulingana na rasilimali unayojaribu kupata kwenye cache hii inaweza kuchukua muda fulani, unaweza kuhitaji kujaribu kwa sekunde kadhaa.\
Header **`X-Cache`** katika majibu inaweza kuwa muhimu sana kwani inaweza kuwa na thamani **`miss`** wakati ombi halijahifadhiwa na thamani **`hit`** wakati inahifadhiwa.\
Header **`Cache-Control`** pia ni muhimu kujua ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena: `Cache-Control: public, max-age=1800`\
Header nyingine ya kuvutia ni **`Vary`**. Header hii mara nyingi hutumiwa kuonyesha headers ziada ambazo hutibiwa kama sehemu ya funguo la cache hata kama kawaida hazina funguo. Kwa hivyo, ikiwa mtumiaji anajua `User-Agent` wa muathiriwa anayelengwa, anaweza kudhuru cache kwa watumiaji wanaotumia `User-Agent` hiyo maalum.\
Unapohifadhi ombi, **kuwa makini na headers unazotumia** kwa sababu baadhi yao zinaweza kutumika kwa njia isiyotarajiwa kama **funguo** na muathiriwa atahitaji kutumia header hiyo hiyo. Daima **jaribu** Cache Poisoning na **vivinjari tofauti** kuhakikisha kuwa inafanya kazi.
Vidakuzi pia vinaweza kurejelewa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia kusababisha XSS kwa mfano, unaweza kufaidika na XSS katika wateja kadhaa wanaopakia jibu la cache lenye nia mbaya.
### Kujaza cache na kufuatilia njia ili kuiba funguo ya API <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
[**Maelezo haya**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) yanafafanua jinsi ilivyowezekana kuiba funguo ya API ya OpenAI na URL kama `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` kwa sababu chochote kinacholingana na `/share/*` kitahifadhiwa bila Cloudflare kawaida kurekebisha URL, ambayo ilifanywa wakati ombi lilipofikia seva ya wavuti.
### Kutumia vichwa vingi kufaidika na udhaifu wa kujaza cache wa wavuti <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Maranyingi utahitaji **kufaidika na pembejeo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **urekebishaji wazi** ikiwa unaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa****seva** ina **rekebisha** maombi yote ya **HTTP** kwenda **HTTPS** na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa urekebishaji. Unaweza kudhibiti ukurasa unapoelekezwa na urekebishaji.
Ikiwa umegundua kuwa kichwa cha **`X-Host`** kinatumika kama **jina la kikoa kusoma rasilimali ya JS** lakini kichwa cha **`Vary`** katika jibu linabainisha **`User-Agent`**. Kisha, unahitaji kupata njia ya kuchukua User-Agent wa muathiriwa na kudhuru cache kwa kutumia user agent huyo:
Jifunze hapa kuhusu jinsi ya kutekeleza [mashambulio ya Kudanganya Cache kwa kudanganya Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
[Skana ya Ufisadi wa Kuhifadhi ya Wavuti](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) inaweza kutumika kiotomatiki kupima ufisadi wa kuhifadhi ya wavuti. Inasaidia njia nyingi tofauti na inaweza kubadilishwa kwa urahisi.
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia kiotomatiki** mchakato wa kazi ulioendeshwa na zana za jamii za **juu zaidi** ulimwenguni.\
ATS ilipeleka kipande ndani ya URL bila kuondoa na ikazalisha ufunguo wa kuhifadhi kwa kutumia tu mwenyeji, njia, na swali (ikipuuza kipande). Kwa hivyo ombi `/#/../?r=javascript:alert(1)` lilipelekwa kwa nyuma kama `/#/../?r=javascript:alert(1)` na ufunguo wa kuhifadhi haukuwa na mzigo ndani yake, tu mwenyeji, njia, na swali.
Kutuma thamani mbaya katika kichwa cha aina ya yaliyomo kulizindua jibu lililohifadhiwa la 405. Ufunguo wa kuhifadhi ulikuwa na kuki hivyo ilikuwa inawezekana kushambulia watumiaji wasio na idhini tu.
GitLab hutumia vikapu vya GCP kuhifadhi yaliyomo ya msingi. **Vikapu vya GCP** vinaiunga mkono **kichwa `x-http-method-override`**. Kwa hivyo ilikuwa inawezekana kutuma kichwa `x-http-method-override: HEAD` na kudanganya kuhifadhi kurudisha mwili wa jibu tupu. Pia inaweza kuunga mkono njia `PURGE`.
Katika maombi ya Ruby on Rails, mara nyingi hutumiwa Rack middleware. Lengo la msimbo wa Rack ni kuchukua thamani ya kichwa cha **`x-forwarded-scheme`** na kuweka kama mpango wa ombi. Wakati kichwa `x-forwarded-scheme: http` kinatumwa, kuna 301 kuelekeza kwa eneo sawa, ikisababisha uwezekano wa Kukataa Huduma (DoS) kwa rasilimali hiyo. Zaidi ya hayo, maombi yanaweza kutambua kichwa cha `X-forwarded-host` na kupeleka watumiaji kwa mwenyeji uliowekwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwenye seva ya mshambuliaji, ikileta hatari ya usalama.
Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kupata ufikiaji wa S3 au Azure Storage Blobs na vichwa vya Uthibitisho visivyo sahihi vilisababisha jibu la 403 lililohifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma zingine za wakala.
Kuhifadhi mara nyingi hujumuisha parameta maalum za GET katika ufunguo wa kuhifadhi. Kwa mfano, Varnish ya Fastly ilihifadhi parameta ya `size` katika maombi. Walakini, ikiwa toleo lililofungwa la parameta (k.m., `siz%65`) pia lilipelekwa na thamani isiyo sahihi, ufunguo wa kuhifadhi ungejengwa kwa kutumia parameta sahihi ya `size`. Walakini, nyuma itaprocess thamani katika parameta iliyofungwa kwa URL. URL-encoding ya parameta ya pili ya `size` ilisababisha kutotumika kwake na kuhifadhi lakini matumizi yake na nyuma. Kutoa thamani ya 0 kwa parameta hii kulileta hitilafu ya Ombi Baya la 400 linaloweza kuhifadhiwa.
Baadhi ya watengenezaji wanazuia maombi na wateja wa mtumiaji wanaofanana na zana za trafiki kubwa kama FFUF au Nuclei kusimamia mzigo wa seva. Kwa kujifurahisha, njia hii inaweza kuleta mapungufu kama vile kudanganya kuhifadhi na DoS.
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) inabainisha wahusika halali katika majina ya vichwa. Vichwa vinavyo wahusika nje ya safu iliyowekwa ya **tchar** inapaswa kuzindua jibu la Ombi Baya la 400. Kwa vitendo, seva mara nyingi hazifuati daima kiwango hiki. Mfano muhimu ni Akamai, ambayo inapeleka vichwa na wahusika wasio halali na kuhifadhi kosa lolote la 400, ikiwa tu kichwa cha `cache-control` hakipo. Mfano wa kutumia uligunduliwa ambapo kutuma kichwa na wahusika wasio halali, kama vile `\`, kungeleta kosa la Ombi Baya la 400 linaloweza kuhifadhiwa.
Kwanza kabisa, kumbuka kwamba **nyongeza** kama vile `.css`, `.js`, `.png` nk kawaida **imepangwa** kuwa **hifadhiwa** katika **hifadhi.** Kwa hivyo, ikiwa unafikia `www.example.com/profile.php/nonexistent.js` hifadhi labda itahifadhi jibu kwa sababu inaona nyongeza ya `.js`. Lakini, ikiwa **programu** inarudia na **maudhui nyeti** ya mtumiaji yaliyohifadhiwa katika _www.example.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine.
Katika mfano huo, inaelezwa kwamba ikiwa unapakia ukurasa usio na maudhui kama _http://www.example.com/home.php/non-existent.css_ maudhui ya _http://www.example.com/home.php_ (**na habari nyeti za mtumiaji**) yatarejeshwa na seva ya kuhifadhi itahifadhi matokeo.\
Kisha, **mshambuliaji** anaweza kupata _http://www.example.com/home.php/non-existent.css_ kwenye kivinjari chao na kuchunguza **habari za siri** za watumiaji waliopata kabla.
Kumbuka kwamba **proxxy ya kuhifadhi** inapaswa kuwa **imepangwa** kuhifadhi faili **kulingana** na **nyongeza** ya faili (_.css_) na sio kulingana na aina ya yaliyomo. Katika mfano _http://www.example.com/home.php/non-existent.css_ itakuwa na aina ya yaliyomo ya `text/html` badala ya aina ya mime ya `text/css` (ambayo inatarajiwa kwa faili ya _.css_).
Jifunze hapa kuhusu jinsi ya kutekeleza [mashambulio ya Ufisadi wa Kuhifadhi kwa kudanganya Ombi la HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
* [**toxicache**](https://github.com/xhzeem/toxicache): Skana ya Golang ya kupata ufisadi wa kuhifadhi ya wavuti katika orodha ya URL na kupima njia nyingi za sindano.
Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia kiotomatiki** mchakato wa kazi ulioendeshwa na zana za jamii za **juu zaidi** ulimwenguni.\
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.