Cache Poisoning via URL discrepancies

Support HackTricks

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).

Delimiters

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.

Normalization & Encodings

  • 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.

Encodings

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.

Dot segment

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.

Static Resources

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.

Support HackTricks

Last updated