Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Za dublje razumevanje ove tehnike pogledajte originalni izveštaj na [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
Glavna prepreka u iskorišćavanju trkačkih uslova je osigurati da se višestruki zahtevi obrađuju istovremeno, sa **vrlo malom razlikom u njihovim vremenima obrade—idealno, manje od 1ms**.
* **HTTP/2**: Podržava slanje dva zahteva preko jedne TCP veze, smanjujući uticaj mrežnog zastoja. Međutim, zbog varijacija na serverskoj strani, dva zahteva možda nisu dovoljna za dosledan napad trkačkog uslova.
* **HTTP/1.1 'Poslednje-Byte Sinhronizacija'**: Omogućava prethodno slanje većine delova 20-30 zahteva, zadržavajući mali fragment, koji se zatim šalje zajedno, postižući istovremeni dolazak na server.
Naknadno slanje zadržanih okvira trebalo bi rezultirati njihovim dolaskom u jednom paketu, što se može proveriti putem Wireshark-a. Ovaj metod se ne primenjuje na statičke datoteke, koje obično nisu uključene u napade trkačkog uslova.
Razumevanje arhitekture cilja je ključno. Serveri na prednjoj strani mogu usmeravati zahteve na različite načine, što utiče na vreme. Prediktivno zagrevanje serverske veze, putem nebitnih zahteva sa serverske strane, može normalizovati vreme zahteva.
Okviri kao što je PHP-ov rukovalac sesijama serijski obrađuju zahteve po sesiji, potencijalno prikrivajući ranjivosti. Korišćenje različitih sesijskih tokena za svaki zahtev može zaobići ovaj problem.
Ako zagrevanje veze nije efikasno, namerno izazivanje kašnjenja ograničenja brzine ili resursa web servera putem poplave lažnih zahteva može olakšati napad jednim paketom indukujući kašnjenje sa serverske strane pogodno za trkačke uslove.
* **Tubo Intruder - Napad jednim paketom HTTP2 (1 endpoint)**: Možete poslati zahtev **Turbo intruder-u** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), možete promeniti vrednost koju želite da probate silom za **`%s`** kao u `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` a zatim izabrati **`examples/race-single-packer-attack.py`** iz padajućeg menija:
* **Tubo Intruder - HTTP2 napad jednim paketom (Više krajnjih tačaka)**: U slučaju da treba poslati zahtev jednoj krajnjoj tački, a zatim više drugim tačkama kako bi se pokrenuo RCE, možete promeniti skriptu `race-single-packet-attack.py` na nešto slično:
* Za **višestruki** RC možete početi slati **zahtev** koji **ide ka skrivenom stanju** a zatim **50 zahteva** odmah nakon toga koji **eksploatišu skriveno stanje**.
* **Automatizovani Python skript**: Cilj ovog skripta je da promeni email korisnika dok kontinuirano proverava dok verifikacioni token novog emaila ne stigne na poslednji email (ovo je zato što je u kodu primećen RC gde je bilo moguće izmeniti email ali imati verifikaciju poslatu na stari email jer je promenljiva koja označava email već bila popunjena prvom).\
Ovo je najosnovniji tip trke uslova gde se **ranjivosti** pojavljuju na mestima koja **ograničavaju broj puta kada možete izvršiti akciju**. Na primer, korišćenje istog koda za popust u veb prodavnici više puta. Veoma jednostavan primer može se pronaći u [**ovom izveštaju**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ili u [**ovom bug-u**](https://hackerone.com/reports/759247)**.**
Iskorišćavanje složenih trka uslova često uključuje iskorišćavanje kratkih prilika za interakciju sa skrivenim ili **neželjenim podstanicama mašine**. Evo kako pristupiti ovome:
* Počnite tako što ćete identifikovati krajnje tačke koje modifikuju ili interaguju sa kritičnim podacima, kao što su korisnički profili ili procesi resetovanja lozinke. Fokusirajte se na:
* **Skladištenje**: Preferirajte krajnje tačke koje manipulišu serverom persistentnim podacima u odnosu na one koje obrađuju podatke na strani klijenta.
* **Akcija**: Potražite operacije koje menjaju postojeće podatke, koje su verovatnije da će stvoriti iskorišćive uslove u poređenju sa onima koje dodaju nove podatke.
* Testirajte identifikovane krajnje tačke sa napadima trke uslova, posmatrajući bilo kakve odstupanja od očekivanih rezultata. Neočekivani odgovori ili promene u ponašanju aplikacije mogu ukazati na ranjivost.
* Sužite napad na minimalan broj zahteva potreban za iskorišćavanje ranjivosti, često samo dva. Ovaj korak može zahtevati više pokušaja ili automatizaciju zbog preciznog vremena uključenog.
Preciznost u vremenskom slanju zahteva može otkriti ranjivosti, posebno kada se koriste predvidljive metode poput vremenskih oznaka za sigurnosne tokene. Na primer, generisanje tokena za resetovanje lozinke na osnovu vremenskih oznaka moglo bi omogućiti identične tokene za istovremene zahteve.
* Koristite precizno vreme, poput napada jednim paketom, da biste poslali istovremene zahteve za resetovanje lozinke. Identifikacija identičnih tokena ukazuje na ranjivost.
Proverite ovaj [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) da vidite kako da **platite** u prodavnici i **dodate dodatnu** stavku za koju **nećete morati platiti**.
Prema [**ovom istraživanju**](https://portswigger.net/research/smashing-the-state-machine) Gitlab je bio ranjiv na preuzimanje na ovaj način jer bi mogao **poslati****token za verifikaciju e-pošte jedne adrese na drugu adresu**.
Ako se koriste **2 različita upisa** za **dodavanje****informacija** unutar **baze podataka**, postoji mali vremenski period kada je **samo prvi podatak upisan** unutar baze podataka. Na primer, prilikom kreiranja korisnika **korisničko ime** i **lozinka** mogu biti **upisani** a zatim **token** za potvrdu novo kreiranog naloga je upisan. To znači da je tokom kratkog vremena **token za potvrdu naloga null**.
Stoga, **registrovanje naloga i slanje nekoliko zahteva sa praznim tokenom** (`token=` ili `token[]=` ili bilo koja druga varijacija) za odmah potvrđivanje naloga moglo bi omogućiti da se **potvrdi nalog** gde ne kontrolišete e-poštu.
Postoji nekoliko [**OAuth provajdera**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ovi servisi će vam omogućiti da kreirate aplikaciju i autentifikujete korisnike koje je provajder registrovao. Da biste to uradili, **klijent** će morati da **dozvoli vašoj aplikaciji** pristup nekim od njihovih podataka unutar **OAuth provajdera**.\
Dakle, do sada samo uobičajena prijava sa google/linkedin/github... gde vam se prikazuje stranica koja kaže: "_Aplikacija \<InsertCoolName> želi da pristupi vašim informacijama, da li želite da to dozvolite?_"
**Problem** se javlja kada ga **prihvatite** i automatski šalje **`authorization_code`** zlonamerno aplikaciji. Zatim, ova **aplikacija zloupotrebljava Trkački uslov u OAuth servisu provajdera kako bi generisala više od jednog AT/RT** (_Authentication Token/Refresh Token_) iz **`authorization_code`** za vaš nalog. U osnovi, zloupotrebiće činjenicu da ste dozvolili aplikaciji pristup vašim podacima da **kreira više naloga**. Zatim, ako **zaustavite dozvolu aplikaciji da pristupi vašim podacima jedan par AT/RT će biti obrisan, ali drugi će i dalje biti validan**.
Kada jednom **dobijete validan RT** možete pokušati da ga **zloupotrebite kako biste generisali više AT/RT** i **čak ako korisnik otkaže dozvole** zlonamernoj aplikaciji da pristupi njegovim podacima, **više RT-ova će i dalje biti validno**.
Na [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) možete pronaći PoC u Javi za slanje websocket poruka **paralelno** kako biste zloupotrebili **Trkačke uslove i u Web Sockets**.
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako kreirate i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\