Cache Poisoning via URL discrepancies
Last updated
Last updated
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)
Hii ni muhtasari wa mbinu zilizopendekezwa katika chapisho https://portswigger.net/research/gotta-cache-em-all ili kutekeleza mashambulizi ya cache poisoning kwa kutumia tofauti kati ya cache proxies na seva za wavuti.
Lengo la shambulizi hili ni kufanya seva ya cache ifikirie kuwa rasilimali ya statiki inachukuliwa ili iweze kuikumbuka wakati seva ya cache inahifadhi kama ufunguo wa cache sehemu ya njia lakini seva ya wavuti inajibu kwa kutatua njia nyingine. Seva ya wavuti itatatua njia halisi ambayo itakuwa ikipakia ukurasa wa dynamic (ambayo inaweza kuhifadhi taarifa nyeti kuhusu mtumiaji, mzigo mbaya kama XSS au kuelekeza ili kupakia faili ya JS kutoka tovuti ya washambuliaji kwa mfano).
URL delimiters hutofautiana kwa mfumo na seva, ikihusisha jinsi maombi yanavyopangwa na majibu yanavyoshughulikiwa. Baadhi ya delimiters za asili za kawaida ni:
Semicolon: Inatumika katika Spring kwa mabadiliko ya matrix (mfano: /hello;var=a/world;var1=b;var2=c
→ /hello/world
).
Dot: Inaelekeza muundo wa majibu katika Ruby on Rails (mfano: /MyAccount.css
→ /MyAccount
)
Null Byte: Inakata njia katika OpenLiteSpeed (mfano: /MyAccount%00aaa
→ /MyAccount
).
Newline Byte: Inatenganisha vipengele vya URL katika Nginx (mfano: /users/MyAccount%0aaaa
→ /account/MyAccount
).
Delimiters maalum zinaweza kupatikana kufuatia mchakato huu:
Hatua ya 1: Tambua maombi yasiyoweza kuhifadhiwa kwenye cache na uyatumie kufuatilia jinsi URLs zenye delimiters zinazowezekana zinavyoshughulikiwa.
Hatua ya 2: Ongeza viambatisho vya nasibu kwenye njia na linganisha jibu la seva ili kubaini ikiwa herufi inafanya kazi kama delimiter.
Hatua ya 3: Ingiza delimiters zinazowezekana kabla ya viambatisho vya nasibu ili kuona ikiwa jibu linabadilika, ikionyesha matumizi ya delimiter.
Madhumuni: Wapangaji wa URL katika seva za cache na asili huweka URLs sawa ili kutoa njia za ramani za mwisho na funguo za cache.
Mchakato: Inatambua delimiters za njia, inatoa na kuweka sawa njia kwa kutafsiri herufi na kuondoa sehemu za dot.
Seva tofauti za HTTP na proxies kama Nginx, Node, na CloudFront zinatafsiri delimiters kwa njia tofauti, na kusababisha kutokuelewana kati ya CDNs na seva za asili ambazo zinaweza kutumika. Kwa mfano, ikiwa seva ya wavuti inafanya mabadiliko haya /myAccount%3Fparam
→ /myAccount?param
lakini seva ya cache inahifadhi kama ufunguo njia /myAccount%3Fparam
, kuna kutokuelewana.
Njia moja ya kuangalia kutokuelewana hizi ni kutuma maombi ya URL kwa kuandika herufi tofauti baada ya kupakia njia bila uandishi wowote na kuangalia ikiwa jibu la njia iliyotafsiriwa lilitoka kwenye jibu la cache.
Kuweka sawa kwa njia ambapo dots zinahusika pia ni ya kuvutia sana kwa mashambulizi ya cache poisoning. Kwa mfano, /static/../home/index
au /aaa..\home/index
, baadhi ya seva za cache zitakumbuka hizi njia kama funguo wakati nyingine zinaweza kutatua njia na kutumia /home/index
kama funguo ya cache.
Kama ilivyokuwa awali, kutuma maombi haya ya aina na kuangalia ikiwa jibu lilipatikana kutoka kwenye cache husaidia kubaini ikiwa jibu kwa /home/index
ni jibu lililotumwa wakati njia hizo zinapohitajika.
Seva kadhaa za cache zitakumbuka kila wakati jibu ikiwa inatambuliwa kama statiki. Hii inaweza kuwa kwa sababu:
Kiambatisho: Cloudflare kila wakati itakumbuka faili zenye viambatisho vifuatavyo: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
Inawezekana kulazimisha cache kuhifadhi jibu la dynamic kwa kutumia delimiter na kiambatisho cha statiki kama ombi kwa /home$image.png
itakumbuka /home$image.png
na seva ya asili itajibu na /home
Mikoa ya statiki inayojulikana: Mikoa ifuatayo ina faili za statiki na kwa hivyo jibu lao linapaswa kuhifadhiwa: /static, /assets, /wp-content, /media, /templates, /public, /shared
Inawezekana kulazimisha cache kuhifadhi jibu la dynamic kwa kutumia delimiter, mkoa wa statiki na dots kama: /home/..%2fstatic/something
itakumbuka /static/something
na jibu litakuwa /home
Mikoa ya statiki + dots: Ombi kwa /static/..%2Fhome
au kwa /static/..%5Chome
linaweza kuhifadhiwa kama lilivyo lakini jibu linaweza kuwa /home
Faili za statiki: Faili maalum fulani kila wakati huhifadhiwa kama /robots.txt
, /favicon.ico
, na /index.html
. Ambazo zinaweza kutumika kama /home/..%2Frobots.txt
ambapo cache inaweza kuhifadhi /robots.txt
na seva ya asili inajibu kwa /home
.
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)