# XS-Arama/XS-Sızıntıları
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Sıfırdan kahramana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert) ile! HackTricks'ı desteklemenin diğer yolları: * **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu * **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin.** * **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar gönderin.
## Temel Bilgiler XS-Arama, **yan kanal zafiyetlerinden yararlanarak** **çapraz kökenli bilgileri çıkarmak** için kullanılan bir yöntemdir. Bu saldırıda yer alan ana bileşenler şunlardır: * **Zararlı Web**: Bilgilerin çıkarılması amaçlanan hedef web sitesi. * **Saldırganın Web'i**: Saldırgan tarafından oluşturulan zararlı web sitesi, kurbanın ziyaret ettiği ve saldırıyı barındıran site. * **Dahil Etme Yöntemi**: Zararlı Web'i Saldırganın Web'ine dahil etmek için kullanılan teknik (örneğin, window.open, iframe, fetch, href ile HTML etiketi vb.). * **Sızıntı Tekniği**: Dahil etme yöntemi aracılığıyla toplanan bilgilere dayanarak Zararlı Web'in durumu arasındaki farkları ayırt etmek için kullanılan teknikler. * **Durumlar**: Saldırganın ayırt etmeyi amaçladığı Zararlı Web'in iki potansiyel durumu. * **Algılanabilir Farklar**: Saldırganın Zararlı Web'in durumunu çıkarmak için güvendiği gözlemlenebilir farklar. ### Algılanabilir Farklar Zararlı Web'in durumlarını ayırt etmek için birkaç yön incelenebilir: * **Durum Kodu**: **Farklı HTTP yanıt durum kodları** arasındaki ayrımı yapmak, sunucu hataları, istemci hataları veya kimlik doğrulama hataları gibi çapraz kökenli olarak. * **API Kullanımı**: Sayfalar arasında **Web API'lerinin kullanımını** tanımlamak, çapraz kökenli bir sayfanın belirli bir JavaScript Web API'sini kullanıp kullanmadığını ortaya çıkarabilir. * **Yönlendirmeler**: Yalnızca HTTP yönlendirmeler değil, aynı zamanda JavaScript veya HTML tarafından tetiklenen farklı sayfalara yönlendirmeleri tespit etmek. * **Sayfa İçeriği**: HTTP yanıt gövdesinde veya sayfa alt kaynaklarında (örneğin, gömülü çerçevelerin sayısı veya görüntülerdeki boyut farklılıkları gibi) **değişiklikleri gözlemlemek**. * **HTTP Başlığı**: Belirli bir **HTTP yanıt başlığının** varlığını veya değerini belirlemek, X-Frame-Options, Content-Disposition ve Cross-Origin-Resource-Policy gibi başlıkların yanı sıra. * **Zamanlama**: İki durum arasındaki tutarlı zaman farklarını fark etmek. ### Dahil Etme Yöntemleri * **HTML Elemanları**: HTML, tarayıcının bir HTML dışı kaynağı istemesini sağlayan stiller, görüntüler veya betikler gibi **çapraz kökenli kaynakları dahil etmek için çeşitli elemanlar sunar**. Bu amaçla potansiyel HTML elemanlarının derlemesi [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks) adresinde bulunabilir. * **Çerçeveler**: **iframe**, **object** ve **embed** gibi elemanlar, HTML kaynaklarını doğrudan saldırganın sayfasına gömebilir. Sayfanın **çerçeve koruması olmadığında**, JavaScript, çerçevelenmiş kaynağın window nesnesine contentWindow özelliği aracılığıyla erişebilir. * **Açılır Pencereler**: **`window.open`** yöntemi, JavaScript'in SOP'u takip ederek yöntemlere ve özelliklere etkileşimde bulunabileceği yeni bir sekmede veya pencerede bir kaynak açar. Sık ​​kullanılan açılır pencereler, hedef kaynağın çerçeveleme ve çerez kısıtlamalarını atlatır. Ancak modern tarayıcılar açılır pencerelerin oluşturulmasını belirli kullanıcı eylemlerine sınırlar. * **JavaScript İstekleri**: JavaScript, **XMLHttpRequests** veya **Fetch API** kullanarak hedef kaynaklara doğrudan istekler yapılmasına izin verir. Bu yöntemler, HTTP yönlendirmelerini takip etmeyi seçmek gibi isteği üzerinde hassas kontrol sağlar. ### Sızıntı Teknikleri * **Olay İşleyici**: XS-Sızıntılarda klasik bir sızıntı tekniği olan olay işleyicileri olan **onload** ve **onerror**, kaynağın yüklenme başarısı veya başarısızlığı hakkında bilgi sağlar. * **Hata Mesajları**: JavaScript istisnaları veya özel hata sayfaları, hata mesajından doğrudan veya varlığının ve yokluğunun ayrımından bilgi sağlayabilir. * **Global Sınırlar**: Tarayıcının fiziksel sınırları, bellek kapasitesi veya diğer zorunlu tarayıcı sınırları gibi, bir eşiğe ulaşıldığında sızıntı tekniği olarak işlev görebilir. * **Global Durum**: Tarayıcıların **global durumlarıyla** (örneğin, Geçmiş arabirimi) algılanabilir etkileşimler söz konusu olduğunda, söz konusu durumlar sömürülebilir. Örneğin, bir tarayıcının geçmişindeki **giriş sayısı**, çapraz kökenli sayfalar hakkında ipuçları sağlayabilir. * **Performans API'si**: Bu API, mevcut sayfanın **performans detaylarını** sağlar, belge ve yüklenen kaynaklar için ağ zamanlamasını içerir, istenen kaynaklar hakkında çıkarımlar yapmayı mümkün kılar. * **Okunabilir Öznitelikler**: Bazı HTML öznitelikleri **çapraz kökenli okunabilir** ve sızıntı tekniği olarak kullanılabilir. Örneğin, `window.frame.length` özelliği, JavaScript'in çapraz kökenli bir web sayfasındaki çerçeveleri saymasına olanak tanır. ## XSinator Aracı ve Makale XSinator, **makalesinde açıklanan çeşitli bilinen XS-Sızıntılarına karşı tarayıcıları kontrol etmek için otomatik bir araçtır**: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Araça [**https://xsinator.com/**](https://xsinator.com/) adresinden erişebilirsiniz. {% hint style="warning" %} **Dışlanmış XS-Sızıntıları**: Diğer sızıntıları XSinator'da engelleyeceği için **hizmet işçilerine dayanan XS-Sızıntılarını** dışlamak zorunda kaldık. Ayrıca, belirli bir web uygulamasındaki yanlış yapılandırmalar ve hatalara dayanan XS-Sızıntılarını dışlamayı tercih ettik. Örneğin, Cross-Origin Resource Sharing (CORS) yanlış yapılandırmaları, postMessage sızıntıları veya Cross-Site Scripting. Ayrıca, genellikle yavaş, gürültülü ve doğru olmayan zaman tabanlı XS-Sızıntılarını dışladık. {% endhint %}
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## **Zaman Tabanlı Teknikler** Aşağıdaki tekniklerden bazıları, web sayfalarının olası durumlarındaki farklılıkları tespit etmek için süre ölçümünü kullanacak. Bir web tarayıcısında zamanı ölçmenin farklı yolları vardır. **Saatler**: [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API, geliştiricilere yüksek çözünürlüklü zamanlama ölçümleri almasını sağlar.\ Saldırganların zımni saatler oluşturmak için kötüye kullanabileceği önemli sayıda API vardır: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS animasyonları ve diğerleri.\ Daha fazla bilgi için: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Olay İşleyici Teknikleri ### Onload/Onerror * **Dahil Etme Yöntemleri**: Çerçeveler, HTML Öğeleri * **Algılanabilir Fark**: Durum Kodu * **Daha fazla bilgi**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) * **Özet**: Bir kaynağı yüklemeye çalışırken onerror/onload olayları tetiklendiğinde kaynağın başarılı/başarısız bir şekilde yüklendiği durum kodunu belirlemek mümkündür. * **Kod örneği**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="xs-search/cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](xs-search/cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} Kod örneği, **JS'den script nesneleri yüklemeyi deniyor**, ancak **nesneler, stil sayfaları, resimler, sesler** gibi diğer etiketler de kullanılabilir. Ayrıca, etiketi **doğrudan enjekte etmek** ve `onload` ve `onerror` olaylarını etiketin içine (JS'den enjekte etmek yerine) bildirmek de mümkündür. Bu saldırının ayrıca bir script olmayan versiyonu da bulunmaktadır: ```html ``` ### Onload Zamanlama * **Dahil Etme Yöntemleri**: HTML Elemanları * **Algılanabilir Fark**: Zamanlama (Genellikle Sayfa İçeriği, Durum Kodu nedeniyle) * **Daha Fazla Bilgi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Özet:** [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** bir isteğin gerçekleştirilmesi için ne kadar zaman aldığını ölçmek için kullanılabilir. Ancak, [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) gibi diğer saatler de kullanılabilir, bu saatler 50 ms'den fazla süren görevleri tanımlayabilir. * **Kod Örneği**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) başka bir örnek: {% content-ref url="xs-search/performance.now-example.md" %} [performance.now-example.md](xs-search/performance.now-example.md) {% endcontent-ref %} #### Onload Zamanlama + Zorunlu Ağır Görev Bu teknik bir öncekiyle aynıdır, ancak **saldırgan** ayrıca **cevap olumlu veya olumsuz olduğunda** bazı eylemleri **ilgili bir süre alacak şekilde zorlar** ve o süreyi ölçer. {% content-ref url="xs-search/performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](xs-search/performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### unload/beforeunload Zamanlama * **Dahil Etme Yöntemleri**: Çerçeveler * **Algılanabilir Fark**: Zamanlama (Genellikle Sayfa İçeriği, Durum Kodu nedeniyle) * **Daha Fazla Bilgi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Özet:** [SharedArrayBuffer saat](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) bir isteğin gerçekleştirilmesi için ne kadar zaman aldığını ölçmek için kullanılabilir. Diğer saatler de kullanılabilir. * **Kod Örneği**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Bir kaynağın alınması için geçen süre, [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) ve [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event) etkinliklerini kullanarak ölçülebilir. **`beforeunload`** etkinliği tarayıcının yeni bir sayfaya geçmeye hazırlandığı zaman tetiklenirken, **`unload`** etkinliği navigasyon gerçekleştiğinde meydana gelir. Bu iki etkinlik arasındaki zaman farkı, tarayıcının kaynağı almak için harcadığı süreyi belirlemek için hesaplanabilir. ### Kumlanmış Çerçeve Zamanlama + onload * **Dahil Etme Yöntemleri**: Çerçeveler * **Algılanabilir Fark**: Zamanlama (Genellikle Sayfa İçeriği, Durum Kodu nedeniyle) * **Daha Fazla Bilgi**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) * **Özet:** [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API bir isteğin gerçekleştirilmesi için ne kadar zaman aldığını ölçmek için kullanılabilir. Diğer saatler de kullanılabilir. * **Kod Örneği**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/) olmadığında, bir sayfa ve alt kaynaklarının ağ üzerinden yüklenmesi için gereken süre bir saldırgan tarafından ölçülebilir. Bu ölçüm genellikle, bir iframe'in `onload` işleyicisinin, kaynak yükleme ve JavaScript yürütmesinin tamamlanmasından sonra tetiklendiği için mümkündür. Betik yürütmesi tarafından tanıtılan değişkenliği atlamak için bir saldırgan, ` ``` ### #ID + hata + onload * **Dahil Etme Yöntemleri**: Frames * **Algılanabilir Fark**: Sayfa İçeriği * **Daha Fazla Bilgi**: * **Özet**: Sayfa doğru içeriğe erişildiğinde hata almayı sağlayabilir ve herhangi bir içeriğe erişildiğinde doğru şekilde yüklenmesini sağlayabilirseniz, zamanı ölçmeden tüm bilgileri çıkarmak için bir döngü oluşturabilirsiniz. * **Kod Örneği**: Örneğin, **gizli** içeriğe sahip **sayfayı** bir **Iframe** içine **yerleştirebileceğinizi** varsayalım. Kurbanın "_**bayrak**_" içeren dosyayı aramasını sağlayabilirsiniz, bir **Iframe** kullanarak (örneğin CSRF'yi sömürerek). Iframe içinde, _**onload olayının**_ en az bir kez **her zaman** gerçekleştirileceğini biliyorsunuz. Sonra, **URL**'nin içindeki **hash**'in **yalnızca içeriğini değiştirerek** Iframe'nin **URL**'sini değiştirebilirsiniz. Örneğin: 1. **URL1**: www.saldırgan.com/xssearch#deneme1 2. **URL2**: www.saldırgan.com/xssearch#deneme2 İlk URL **başarılı bir şekilde yüklendiğinde**, URL'nin **hash** kısmını **değiştirdiğinizde**, **onload** olayı **tekrar tetiklenmeyecek**. Ancak **sayfa** yüklenirken bir tür **hata** varsa, o zaman **onload** olayı **tekrar tetiklenecektir**. Bu şekilde, **doğru bir şekilde** yüklenen bir sayfa ile erişilen bir sayfa arasında **ayırt edebilirsiniz**. ### Javascript Yürütme * **Dahil Etme Yöntemleri**: Frames * **Algılanabilir Fark**: Sayfa İçeriği * **Daha Fazla Bilgi**: * **Özet:** Eğer **sayfa**, **duyarlı** içeriği **geri döndürüyorsa** veya kullanıcı tarafından **kontrol edilebilecek bir içerik**. Kullanıcı, **geçerli JS kodunu negatif durumda** ayarlayabilir ve her denemeyi **`