Tumia [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition) kujenga na **kutumia workflows** kwa urahisi zinazotumia zana za jamii ya **juu zaidi** duniani.\
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Ili kupata uelewa wa kina wa mbinu hii, angalia ripoti ya asili kwenye [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
Kizuizi kikuu katika kutumia mashindano ya hali ni kuhakikisha kuwa maombi mengi yanashughulikiwa wakati huo huo, na **tofauti ndogo sana katika nyakati zao za usindikaji—ideally, chini ya 1ms**.
* **HTTP/2**: Inasaidia kutuma maombi mawili kupitia muunganisho mmoja wa TCP, kupunguza athari ya mtikisiko wa mtandao. Hata hivyo, kutokana na tofauti za upande wa seva, maombi mawili hayatoshi kwa kudukua mashindano kwa njia thabiti.
* **HTTP/1.1 'Ushirikiano wa Herufi ya Mwisho'**: Inawezesha kutuma sehemu kubwa ya maombi 20-30, ikizuia kipande kidogo, ambacho kisha hutumwa pamoja, kufikia kuwasili kwa wakati mmoja kwenye seva.
Kutuma kwa fremu zilizozuiliwa baadaye inapaswa kusababisha kuwasili kwao kwenye pakiti moja, inayoweza kuthibitishwa kupitia Wireshark. Mbinu hii haitumiki kwa faili za tuli, ambazo kawaida hazihusiki katika mashambulizi ya RC.
Kuelewa miundo ya lengo ni muhimu. Seva za mbele zinaweza kupeleka maombi kwa njia tofauti, zikiathiri wakati. Kuchemsha muunganisho wa upande wa seva mapema, kupitia maombi yasiyo na maana, kunaweza kawaidaisha wakati wa maombi.
Mifumo kama kushughulikia kwa kikao cha PHP inaserializa maombi kwa kikao, ikificha mara nyingi udhaifu. Kutumia vitambulisho tofauti vya kikao kwa kila ombi kunaweza kuzunguka tatizo hili.
Ikiwa kuchemsha muunganisho hakufanikiwa, kusababisha kwa makusudi kucheleweshwa kwa vikwazo vya kiwango au rasilmali vya seva za wavuti kupitia mafuriko ya maombi bandia kunaweza kurahisisha shambulio la pakiti moja kwa kusababisha kucheleweshwa kwa upande wa seva yanayofaa mashindano.
* **Tubo Intruder - shambulio la pakiti moja la HTTP2 (kituo 1)**: Unaweza kutuma ombi kwa **Turbo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), unaweza kubadilisha katika ombi thamani unayotaka kudungua kwa **`%s`** kama katika `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` na kisha chagua **`examples/race-single-packer-attack.py`** kutoka kwenye menyu ya kunjua:
* **Tubo Intruder - Shambulio la pakiti moja la HTTP2 (Vipengele vingi)**: Kwa hali ambapo unahitaji kutuma ombi kwa kipande 1 na kisha vingine kwa vipande vingine ili kuzindua RCE, unaweza kubadilisha script ya `race-single-packet-attack.py` na kitu kama:
* Kwa **kuchelewesha** mchakato **kati ya** kusindika **ombi moja na nyingine** katika hatua 2 za substates, unaweza **kuongeza maombi ya ziada kati ya** maombi yote mawili.
* Kwa **RC yenye vituo vingi**, unaweza kuanza kutuma **ombi** linaloenda kwenye hali iliyofichwa** na kisha **maombi 50** mara baada ya hapo ambayo **yanatumia hali iliyofichwa**.
* **Skripti ya python iliyotuimishwa**: Lengo la skripti hii ni kubadilisha barua pepe ya mtumiaji wakati ikithibitisha mara kwa mara hadi ishara ya uthibitisho wa barua pepe mpya inapofika kwenye barua pepe ya mwisho (hii ni kwa sababu katika nambari ilikuwa inaona RC ambapo ilikuwa inawezekana kurekebisha barua pepe lakini uthibitisho ulitumwa kwa ile ya zamani kwa sababu kipengele kinachoonyesha barua pepe tayari kilikuwa kimejazwa na ya kwanza).\
Wakati neno "objetivo" linapatikana katika barua pepe zilizopokelewa tunajua tumepokea ishara ya uthibitisho wa barua pepe iliyobadilishwa na tunamaliza shambulizi.
* **Mvamizi**: Tuma **ombi** kwa **Mvamizi**, weka **idadi ya nyuzi** kuwa **30** ndani ya menyu ya **Chaguo** na, chagua mizigo ya **Mizigo tupu** na uzalishe **30.**
Hii ni aina ya msingi kabisa ya hali ya mbio ambapo **mapungufu** yanayoonekana mahali ambapo **kikomo cha idadi ya mara unaweza kufanya kitendo**. Kama kutumia nambari ile ile ya punguzo katika duka la wavuti mara kadhaa. Mfano rahisi sana unaweza kupatikana katika [**ripoti hii**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) au katika [**kosa hili**](https://hackerone.com/reports/759247)**.**
Kuendeleza hali ngumu za mbio mara nyingi kunahusisha kutumia fursa fupi za kuingiliana na hali za siri au **hali za mashine zisizotarajiwa**. Hivi ndivyo unavyoweza kukabiliana na hili:
* Anza kwa kubainisha vituo vya mwisho vinavyobadilisha au kuingiliana na data muhimu, kama vile maelezo ya mtumiaji au michakato ya kurejesha nywila. Jikite katika:
* **Kitendo**: Tafuta shughuli zinazobadilisha data iliyopo, ambazo zina uwezekano mkubwa wa kujenga hali zinazoweza kudukuliwa ikilinganishwa na zile zinazoongeza data mpya.
* **Ufunguo**: Mashambulizi mafanikio kawaida hujumuisha shughuli zinazotegemea kitambulisho kimoja, kama vile jina la mtumiaji au ishara ya kurejesha.
* Jaribu vituo vilivyobainishwa na mashambulio ya hali ya mbio, ukitazama mabadiliko yoyote kutoka kwa matokeo yanayotarajiwa. Majibu yasiyotarajiwa au mabadiliko katika tabia ya programu yanaweza kuashiria mapungufu.
3.**Onyesha Mapungufu**
* Punguza shambulio hadi idadi ndogo ya maombi inayohitajika kudukua mapungufu, mara nyingi ni mawili tu. Hatua hii inaweza kuhitaji majaribio mengi au uendeshaji wa moja kwa moja kutokana na wakati sahihi unaohusika.
Uakisi katika kutuma maombi kwa wakati unaweza kufunua mapungufu, hasa wakati mbinu za kutabirika kama vile alama za wakati hutumiwa kwa ishara za usalama. Kwa mfano, kutengeneza alama za kurejesha nywila kulingana na alama za wakati kunaweza kuruhusu alama sawa kwa maombi yanayofanyika wakati mmoja.
Angalia hii [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) kuona jinsi ya **kulipa** katika duka na **kuongeza** bidhaa ya ziada ambayo **hutahitaji kulipa**.
Wazo ni **kuthibitisha anwani ya barua pepe na kuibadilisha kuwa tofauti wakati huo huo** ili kugundua ikiwa jukwaa linathibitisha ile mpya iliyobadilishwa.
Kulingana na [**utafiti huu**](https://portswigger.net/research/smashing-the-state-machine) Gitlab ilikuwa na kasoro ya kuchukuliwa kwa njia hii kwa sababu inaweza **kutuma** ishara ya **uthibitisho wa barua pepe ya barua pepe moja kwenda kwa barua pepe nyingine**.
Ikiwa **kuandika tofauti 2** hutumiwa **kuongeza****taarifa** ndani ya **hifadhidata**, kuna sehemu ndogo ya wakati ambapo **data ya kwanza tu imeandikwa** ndani ya hifadhidata. Kwa mfano, wakati wa kuunda mtumiaji **jina la mtumiaji** na **nywila** inaweza **kuandikwa** na **kisha ishara** ya kuthibitisha akaunti mpya iliyoundwa inaandikwa. Hii inamaanisha kwamba kwa muda mfupi **ishara ya kuthibitisha akaunti ni tupu**.
Hivyo **kujiandikisha akaunti na kutuma maombi kadhaa na ishara tupu** (`ishara=` au `ishara[]=` au mabadiliko mengine yoyote) kuthibitisha akaunti mara moja inaweza kuruhusu kuthibitisha akaunti ambapo haukudhibiti barua pepe.
Kuna [**watoa huduma wa OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers) kadhaa. Huduma hizi zitaruhusu uunda programu na kuthibitisha watumiaji ambao mtoa huduma amesajili. Ili kufanya hivyo, **mteja** atahitaji **kuidhinisha programu yako** ili kupata baadhi ya data yao ndani ya **mtoa huduma wa OAuth**.\
Kwa hivyo, mpaka hapa ni kama kuingia kawaida na google/linkedin/github... ambapo unaulizwa kwenye ukurasa unasema: "_Programu \<InsertCoolName> inataka kupata taarifa zako, unataka kuruhusu?_"
**Tatizo** linatokea unapopokea na kutuma **`authorization_code`** kiotomatiki kwa programu ya madhara. Kisha, programu hii **inatumia Hali ya Mashindano katika mtoa huduma wa OAuth** kuzalisha AT/RT zaidi ya moja (_Authentication Token/Refresh Token_) kutoka kwa **`authorization_code`** kwa akaunti yako. Kimsingi, itatumia ukweli kwamba umekubali programu kupata data yako ili **kuunda akaunti kadhaa**. Kisha, ikiwa **utaacha kuruhusu programu kupata data yako jozi moja ya AT/RT itafutwa, lakini zingine zitabaki halali**.
Baada ya **kupata RT halali** unaweza kujaribu **kuitumia vibaya kuzalisha AT/RT kadhaa** na **hata ikiwa mtumiaji ataghairi ruhusa** kwa programu ya madhara kupata data yake, **RT kadhaa bado zitabaki halali**.
Katika [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) unaweza kupata PoC katika Java kutuma ujumbe wa websocket **kwa pamoja** kuitumia **Hali za Mashindano pia katika Web Sockets**.
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 **kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Tumia [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition) kujenga na **kutumia taratibu za kiotomatiki** zinazotumia zana za jamii za **juu zaidi** duniani.\