[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **otomatik iş akışları** oluşturun ve otomatikleştirin.\
<summary><strong>Sıfırdan Kahraman Olarak AWS hackleme öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
Bu teknik hakkında derin bir anlayış elde etmek için orijinal raporu [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine) kontrol edin.
Yarış koşullarından faydalanmanın ana engeli, birden fazla isteğin aynı anda işlenmesini sağlamaktır, **işleme süreleri arasında çok az fark olmalıdır - ideal olarak 1 ms'den az**.
* **HTTP/2**: Bir TCP bağlantısı üzerinden iki isteği göndermeyi destekler, ağ gecikmesi etkisini azaltır. Ancak, sunucu tarafındaki değişiklikler nedeniyle iki istek, tutarlı bir yarış koşulu sömürüsü için yeterli olmayabilir.
* **HTTP/1.1 'Son-Byte Senkronizasyonu'**: 20-30 isteğin çoğu kısmını önceden göndermeyi sağlar, küçük bir parçayı tutarak, ardından birlikte gönderilerek sunucuya aynı anda ulaşılmasını sağlar.
**Son-Byte Senkronizasyonu için Hazırlık** şunları içerir:
Tutulan çerçevelerin sonradan gönderilmesi, Wireshark üzerinden tek bir pakette varışlarını sağlamalıdır. Bu yöntem genellikle RC saldırılarıyla ilişkilendirilmeyen statik dosyalara uygulanmaz.
Hedefin mimarisini anlamak önemlidir. Ön uç sunucuları istekleri farklı yönlendirebilir ve zamanlamayı etkileyebilir. Önleyici sunucu tarafı bağlantıısınması, önemsiz istekler aracılığıyla istek zamanlamasını normalize edebilir.
PHP'nin oturum işleyicisi gibi çerçeveler, istekleri oturum bazında seri hale getirebilir ve potansiyel olarak zafiyetleri gizleyebilir. Her istek için farklı oturum belirteçleri kullanmak, bu sorunu atlatmaya yardımcı olabilir.
Bağlantıısınması etkisizse, web sunucularının hız veya kaynak sınırlarını kasıtlı olarak tetikleyerek, sunucu tarafında yarış koşullarına uygun gecikmeyi sağlayan tek paket saldırısını kolaylaştırabilir.
* **Tubo Intruder - HTTP2 tek paket saldırısı (Çeşitli uç noktalar)**: RCE'yi tetiklemek için bir uç noktaya bir istek göndermeniz ve ardından diğer uç noktalara birden fazla istek göndermeniz gerektiğinde, `race-single-packet-attack.py` betiğini aşağıdaki gibi değiştirebilirsiniz:
* Ayrıca, Burp Suite içinde **Repeater** üzerinden yeni '**Paralel olarak grup gönder**' seçeneği ile mevcuttur.
* **Limit aşımı** için grup içine **aynı isteği 50 kez ekleyebilirsiniz**.
* **Bağlantıısınması** için, web sunucusunun statik olmayan bir kısmına bazı**istekler** ekleyebilirsiniz.
* Bir isteği işleme ve diğerine geçme arasındaki süreyi geciktirmek için, 2 alt durum adımında **her iki istek arasına ek istekler ekleyebilirsiniz**.
* **Çoklu uç noktalı** bir RC için, **gizli duruma giden isteği** göndermeye başlayabilir ve ardından **gizli durumu sömüren 50 isteği** hemen gönderebilirsiniz.
Bu, bir eylemi gerçekleştirme sayısını sınırlayan yerlerde ortaya çıkan **zayıflıkların** en temel türüdür. Örneğin, bir web mağazasında aynı indirim kodunu birkaç kez kullanmak gibi. Çok basit bir örnek [**bu raporda**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) veya [**bu hata**](https://hackerone.com/reports/759247)'da bulunabilir.
Karmaşık yarış koşullarını sömürmek genellikle gizli veya **istenmeyen makine alt durumları** ile etkileşim fırsatlarından yararlanmayı içerir. İşte bu konuya nasıl yaklaşılacağı:
* Kritik verileri değiştiren veya etkileşime giren uç noktaları belirleyerek başlayın, örneğin kullanıcı profilleri veya şifre sıfırlama süreçleri. Odaklanılacak noktalar:
* **Depolama**: Sunucu tarafında kalıcı verileri işleyen uç noktaları, istemci tarafında veri işleyenlere göre tercih edin.
* **Eylem**: Varolan verileri değiştiren işlemleri arayın, yeni veri ekleyenlere göre sömürülebilir koşullar yaratma olasılığı daha yüksektir.
* **Anahtarlama**: Başarılı saldırılar genellikle aynı tanımlayıcıya (örneğin, kullanıcı adı veya sıfırlama belirteci) dayalı işlemleri içerir.
2.**İlk Sondajı Yapın**
* Belirlenen uç noktaları yarış koşulu saldırılarıyla test ederek, beklenen sonuçlardan herhangi bir sapma olup olmadığını gözlemleyin. Beklenmeyen yanıtlar veya uygulama davranışındaki değişiklikler, bir zayıflık sinyali olabilir.
3.**Zafiyeti Gösterin**
* Zafiyeti sömürmek için genellikle sadece iki isteğin gerektiği minimum sayıda isteğe odaklanın. Bu adım, hassas zamanlama nedeniyle birden fazla deneme veya otomasyon gerektirebilir.
İsteklerin zamanlamasında hassasiyet, özellikle güvenlik belirteçleri için zaman damgalarının kullanıldığı durumlarda zayıflıkları ortaya çıkarabilir. Örneğin, zaman damgalarına dayalı şifre sıfırlama belirteçleri oluşturmak, aynı anda yapılan istekler için benzer belirteçlere izin verebilir.
* Aynı anda şifre sıfırlama istekleri yapmak için tek paket saldırısı gibi hassas zamanlama kullanın. Benzer belirteçler, bir zayıflık işareti olabilir.
**Ödeme** yapın ve **ödemeniz gerekmeyen** ek bir öğe **ekleyin** nasıl yapılacağını görmek için bu [**PortSwigger Lab'ı**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation)'na bakın.
Fikir, **aynı anda bir e-posta adresini doğrulamak ve farklı bir e-posta adresine değiştirmek** ve platformun yeni değiştirileni doğrulayıp doğrulamadığını bulmaktır.
[**Bu araştırmaya**](https://portswigger.net/research/smashing-the-state-machine) göre, Gitlab bu şekilde bir ele geçirilmeye açıktı çünkü **bir e-postanın e-posta doğrulama belirteçlerini diğer e-postaya gönderebilirdi**.
Eğer bir **veritabanına bilgi eklemek** için **2 farklı yazma işlemi** kullanılıyorsa, **sadece ilk verinin veritabanına yazıldığı küçük bir zaman dilimi** oluşur. Örneğin, bir kullanıcı oluşturulurken **kullanıcı adı** ve **şifre** yazılabilir ve ardından yeni oluşturulan hesabı onaylamak için **belirteç** yazılabilir. Bu, bir hesabı onaylamak için **belirteçin bir süre boş** olabileceği anlamına gelir.
Bu nedenle, bir hesap kaydedin ve hemen hesabı onaylamak için boş bir belirteçle (`token=` veya `token[]=` veya başka bir varyasyon) birkaç istek göndermek, kontrol etmediğiniz bir e-postayı**onaylamanıza** olanak tanıyabilir.
Bunu denemek için [**PortSwigger Lab'ı**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **kontrol edin.**
Birkaç [**OAuth sağlayıcısı**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers) bulunmaktadır. Bu hizmetler, sağlayıcının kaydettiği kullanıcıları doğrulamanıza ve bir uygulama oluşturmanıza izin verir. Bunun için **istemci**, **uygulamanıza sağlayıcının içindeki bazı verilere erişim izni vermesini** isteyecektir.\
Yani, şimdiye kadar sadece google/linkedin/github... ile yapılan ortak bir giriş işlemi, "_Uygulama \<InsertCoolName>, bilgilerinize erişmek istiyor, izin vermek istiyor musunuz?_" şeklinde bir sayfayla karşılaşılır.
**Sorun**, bunu **kabul ettiğinizde** ve kötü niyetli uygulamaya otomatik olarak bir **`authorization_code`** gönderildiğinde ortaya çıkar. Ardından, bu **uygulama, OAUth hizmet sağlayıcısındaki bir Yarış Koşulunu kötüye kullanarak hesabınız için **`authorization_code`**'dan daha fazla AT/RT (_Kimlik Doğrulama Belirteci/Yenileme Belirteci_) oluşturur. Temelde, uygulamanın verilerinize erişim iznini kabul ettiğiniz gerçeğini kötüye kullanarak **birkaç hesap oluşturacaktır**. Sonra, eğer **uygulamanın verilerinize erişim iznini kaldırırsanız bir AT/RT çifti silinecek, ancak diğerleri hala geçerli olacaktır**.
Geçerli bir RT aldıktan sonra, bunu kullanarak birkaç AT/RT oluşturmaya çalışabilir ve **kullanıcı kötü niyetli uygulamanın verilerine erişim iznini iptal etse bile, birkaç RT hala geçerli olacaktır**.
[**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) içinde, **Web Sockets'te de Yarış Koşullarını** kötüye kullanmak için **paralel** olarak websocket mesajları göndermek için bir Java PoC bulabilirsiniz.
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* Özel [**NFT'lerimizden oluşan**](https://opensea.io/collection/the-peass-family) [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) takip edin.
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek sağlayın.
Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\