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
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
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
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.