URL farklılıkları ile Cache Zehirleme

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Bu, cache zehirleme saldırıları gerçekleştirmek için önerilen tekniklerin bir özetidir cache proxy'leri ve web sunucuları arasındaki farklılıklardan faydalanarak.

note

Bu saldırının amacı, cache sunucusunun statik bir kaynağın yüklendiğini düşünmesini sağlamak ve böylece onu önbelleğe alırken, cache sunucusu önbellek anahtarı olarak yolun bir kısmını depolar, ancak web sunucusu başka bir yolu çözümleyerek yanıt verir. Web sunucusu, dinamik bir sayfa yükleyecek gerçek yolu çözecektir (bu, kullanıcı hakkında hassas bilgiler depolayabilir, XSS gibi kötü niyetli bir yük içerebilir veya örneğin saldırganın web sitesinden bir JS dosyası yüklemek için yönlendirme yapabilir).

Ayırıcılar

URL ayırıcıları, çerçeve ve sunucuya göre değişir, isteklerin nasıl yönlendirildiğini ve yanıtların nasıl işlendiğini etkiler. Bazı yaygın köken ayırıcıları şunlardır:

  • Noktalı virgül: Spring'de matris değişkenleri için kullanılır (örneğin, /hello;var=a/world;var1=b;var2=c/hello/world).
  • Nokta: Ruby on Rails'de yanıt formatını belirtir (örneğin, /MyAccount.css/MyAccount).
  • Null Byte: OpenLiteSpeed'de yolları keser (örneğin, /MyAccount%00aaa/MyAccount).
  • Yeni satır baytı: Nginx'de URL bileşenlerini ayırır (örneğin, /users/MyAccount%0aaaa/account/MyAccount).

Bu süreçten sonra diğer özel ayırıcılar bulunabilir:

  • Adım 1: Önbelleğe alınamayan istekleri tanımlayın ve bunları potansiyel ayırıcılarla nasıl işlendiğini izlemek için kullanın.
  • Adım 2: Yollara rastgele ekler ekleyin ve bir karakterin ayırıcı olarak işlev görüp görmediğini belirlemek için sunucunun yanıtını karşılaştırın.
  • Adım 3: Yanıtın değişip değişmediğini görmek için rastgele ekin önüne potansiyel ayırıcılar ekleyin, bu ayırıcı kullanımını gösterir.

Normalizasyon & Kodlamalar

  • Amaç: Hem cache hem de köken sunucularındaki URL ayrıştırıcıları, uç nokta eşlemesi ve önbellek anahtarları için yolları çıkarmak üzere URL'leri normalize eder.
  • Süreç: Yol ayırıcılarını tanımlar, karakterleri çözerek ve nokta segmentlerini kaldırarak yolu çıkarır ve normalize eder.

Kodlamalar

Farklı HTTP sunucuları ve proxy'leri, Nginx, Node ve CloudFront gibi, ayırıcıları farklı şekilde çözer, bu da CDNs ve köken sunucuları arasında tutarsızlıklara yol açar. Örneğin, web sunucusu bu dönüşümü gerçekleştirirse /myAccount%3Fparam/myAccount?param ancak cache sunucusu anahtar olarak yolu /myAccount%3Fparam olarak tutarsa, bir tutarsızlık vardır.

Bu tutarsızlıkları kontrol etmenin bir yolu, yolu herhangi bir kodlama olmadan yükledikten sonra farklı karakterleri URL kodlaması ile istekler göndermek ve kodlanmış yol yanıtının önbellek yanıtından gelip gelmediğini kontrol etmektir.

Nokta segmenti

Noktaların dahil olduğu yol normalizasyonu, cache zehirleme saldırıları için de oldukça ilginçtir. Örneğin, /static/../home/index veya /aaa..\home/index, bazı cache sunucuları bu yolları kendileri anahtar olarak önbelleğe alırken, diğerleri yolu çözebilir ve /home/index'i önbellek anahtarı olarak kullanabilir.
Daha önce olduğu gibi, bu tür istekler göndermek ve yanıtın önbellekten toplanıp toplanmadığını kontrol etmek, /home/index'e verilen yanıtın bu yollar istendiğinde gönderilen yanıt olup olmadığını belirlemeye yardımcı olur.

Statik Kaynaklar

Birçok cache sunucusu, bir yanıt statik olarak tanımlandığında her zaman önbelleğe alır. Bu, şu nedenlerden olabilir:

  • Uzantı: Cloudflare, aşağıdaki uzantılara sahip dosyaları her zaman önbelleğe alır: 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
  • Dinamik bir yanıtı önbelleğe almak için bir ayırıcı ve statik bir uzantı kullanarak zorlamak mümkündür; örneğin, /home$image.png isteği /home$image.png'i önbelleğe alacak ve köken sunucusu /home ile yanıt verecektir.
  • İyi bilinen statik dizinler: Aşağıdaki dizinler statik dosyalar içerir ve bu nedenle yanıtlarının önbelleğe alınması gerekir: /static, /assets, /wp-content, /media, /templates, /public, /shared
  • Bir ayırıcı, statik bir dizin ve noktalar kullanarak dinamik bir yanıtı önbelleğe almak mümkündür; örneğin, /home/..%2fstatic/something /static/something'i önbelleğe alacak ve yanıt /home olacaktır.
  • Statik dizinler + noktalar: /static/..%2Fhome veya /static/..%5Chome isteği olduğu gibi önbelleğe alınabilir, ancak yanıt /home olabilir.
  • Statik dosyalar: Bazı özel dosyalar her zaman önbelleğe alınır, örneğin /robots.txt, /favicon.ico ve /index.html. Bu, /home/..%2Frobots.txt gibi kötüye kullanılabilir; burada önbellek /robots.txt'i depolayabilir ve köken sunucusu /home'a yanıt verebilir.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin