[**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 **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
<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 görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
Bu teknik hakkında derinlemesine 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ürelerinde çok az fark olması gerekmektedir - 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 saldı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.
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. Önemsiz istekler aracılığıyla önceden sunucu tarafı bağlantıısınması yaparak, istek zamanlamasını normalize edebilirsiniz.
PHP'nin oturum işleyicisi gibi çerçeveler, istekleri oturum bazında seri hale getirebilir ve zafiyetleri gizleyebilir. Her istek için farklı oturum belirteçleri kullanmak, bu sorunu atlatmanıza 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ırabilirsiniz.
* **Tubo Intruder - HTTP2 tek paket saldırısı (1 uç nokta)**: İsteği **Turbo intruder**'a gönderebilirsiniz (`Uzantılar` -> `Turbo Intruder` -> `Turbo Intruder'a Gönder`), istekte **`%s`** için kaba kuvvet yapmak istediğiniz değeri değiştirebilirsiniz, örneğin `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` ve ardından açılır menüden **`examples/race-single-packer-attack.py`**'yi seçebilirsiniz:
* **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:
* **Bağlantıısınması** için, web sunucusunun statik olmayan bir kısmına bazı**istekler** ekleyebilirsiniz **grubun başına**.
* Bir isteği işleme ve diğerine geçme arasındaki süreyi **geciktirmek** için, her iki istek arasına **ekstra istekler ekleyebilirsiniz**.
* **Çoklu uç noktalı** bir RC için, **gizli duruma giden isteği** göndermeye başlayabilir ve ardından hemen ardından **gizli durumu sömüren 50 istek** gönderebilirsiniz.
* **Otomatik python betiği**: Bu betiğin amacı, bir kullanıcının e-posta adresini sürekli olarak doğrulayarak değiştirmektir, yeni e-posta adresinin doğrulama belirteci son e-postaya ulaşana kadar (çünkü kodda bir e-postayı değiştirmenin mümkün olduğu ancak e-postayı gösteren değişkenin zaten ilk e-postayla doldurulduğu bir RC görüldü).\
Alınan e-postalarda "objetivo" kelimesi bulunduğunda, değiştirilen e-postanın doğrulama belirtecini aldığımızı biliriz ve saldırıyı sonlandırırız.
* **Sızdıran:** **İsteği****Sızdıran**'a gönderin, **İşlem menüsü içindeki****iş parçacığı sayısını 30** olarak ayarlayın ve yük olarak **Boş yükleri** seçin ve **30** oluşturun.
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. Ç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) bulunabilir.
Karmaşık yarış koşullarını sömürmek genellikle gizli veya **istenmeyen makine alt durumlarıyla** etkileşim fırsatlarını değerlendirmeyi içerir. İşte bu konuya nasıl yaklaşılacağı:
* Kullanıcı profilleri veya şifre sıfırlama süreçleri gibi kritik verileri değiştiren veya etkileşime giren uç noktaları belirleyerek başlayın. Odaklanılacak noktalar:
* **Depolama**: Sunucu tarafında kalıcı verileri işleyen uç noktaları, istemci tarafında veri işleyenlere göre daha tercih edin.
* Belirlenen uç noktaları yarış koşulu saldırılarıyla test ederek beklenen sonuçlardan sapmaları gözlemleyin. Beklenmeyen yanıtlar veya uygulama davranışındaki değişiklikler bir zayıflığı işaret edebilir.
* Zafiyeti sömürmek için genellikle sadece iki isteğin gerektiği minimum sayıya indirin. Bu adım, hassas zamanlama nedeniyle birden fazla deneme veya otomasyon gerektirebilir.
İsteklerdeki zamanlama hassasiyeti, ö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.
**Ödeme** yapın ve **ödemeye gerek olmayan** bir ekstra öğe **ekleyebileceğiniz** bir mağazada 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) kontrol edin.
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çirmeye açıktı çünkü **bir e-postanın e-posta doğrulama belirtecinin diğer e-postaya gönderilebileceğini** gösterebilir.
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 süre için **bir hesabı onaylamak için belirtecin boş olduğu** anlamına gelir.
Bu nedenle, **bir hesap kaydı oluşturun 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ı**onaylamaya** izin verebilir.
Bunu denemek için [**PortSwigger Lab'ı**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **ziyaret 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 vermesine izin vermelidir**.\
Yani, şimdiye kadar sadece google/linkedin/github... ile yapılan ortak bir girişte olduğu gibi bir sayfada "_Uygulama \<InsertCoolName>, bilgilerinize erişmek istiyor, izin vermek istiyor musunuz?_" şeklinde bir sayfayla karşılaşırsınız.
**Sorun**, **bunu kabul ettiğinizde** ve kötü niyetli uygulamaya otomatik olarak bir **`authorization_code`** gönderildiğinde ortaya çıkar. Ardından, bu **uygulama, `authorization_code` içindeki Yarış Koşulunu kötüye kullanarak hesabınız için birden fazla AT/RT** (_Kimlik Doğrulama Belirteci/Yenileme Belirteci_) oluşturmak için **OAuth hizmet sağlayıcısında Yarış Koşulunu kötüye kullanır**. Temelde, uygulamanın verilerinize erişim iznini kabul ettiğiniz gerçeğini kötüye kullanacaktır ve **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, **birkaç AT/RT oluşturmak için bunu kötüye kullanabilirsiniz** 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!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin.
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.\