Race Condition
Koristite Trickest da lako izgradite i automatizujete radne tokove pokretane najnaprednijim alatima zajednice na svetu. Dobijte pristup danas:
Za duboko razumevanje ove tehnike proverite originalni izveštaj na https://portswigger.net/research/smashing-the-state-machine
Unapređenje napada trkačkog uslova
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.
Ovde možete pronaći neke tehnike za sinhronizaciju zahteva:
Napad jednim paketom HTTP/2 naspram sinhronizacije poslednjeg bajta HTTP/1.1
HTTP/2: Podržava slanje dva zahteva preko jedne TCP veze, smanjujući uticaj mrežnih oscilacija. Međutim, zbog varijacija na serverskoj strani, dva zahteva možda nisu dovoljna za dosledan napad trkačkog uslova.
HTTP/1.1 'Sinhronizacija poslednjeg bajta': 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.
Priprema za sinhronizaciju poslednjeg bajta uključuje:
Slanje zaglavlja i podataka tela bez poslednjeg bajta bez završetka toka.
Pauziranje 100ms nakon početnog slanja.
Onemogućavanje TCP_NODELAY-a radi korišćenja Nagleovog algoritma za grupisanje finalnih okvira.
Pingovanje za zagrevanje veze.
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 odnosi na statičke datoteke, koje obično nisu uključene u napade trkačkog uslova.
Prilagođavanje arhitekturi servera
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, može normalizovati vreme zahteva.
Obrada zaključavanja na osnovu sesije
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.
Prevazilaženje ograničenja brzine ili resursa
Ako zagrevanje veze nije efikasno, namerno izazivanje kašnjenja ograničenja brzine ili resursa veb servera putem poplave lažnih zahteva može olakšati napad jednim paketom indukujući kašnjenje na serverskoj strani pogodno za trkačke uslove.
Primeri napada
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 ucsrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s
a zatim izabratiexamples/race-single-packer-attack.py
iz padajućeg menija:
Ako ćete slati različite vrednosti, možete izmeniti kod sa ovim koji koristi wordlistu sa clipboard-a:
Ako web ne podržava HTTP2 (samo HTTP1.1), umesto Engine.BURP2
koristite Engine.THREADED
ili Engine.BURP
.
Tubo Intruder - HTTP2 napad jednim paketom (Više krajnjih tačaka): U slučaju da trebate poslati zahtev jednoj krajnjoj tački, a zatim više drugim krajnjim tačkama kako biste pokrenuli RCE, možete promeniti skriptu
race-single-packet-attack.py
na nešto slično:
Takođe je dostupno u Repeater-u putem nove opcije 'Slanje grupe paralelno' u Burp Suite-u.
Za prekoračenje ograničenja možete jednostavno dodati isti zahtev 50 puta u grupu.
Za zagrevanje veze, možete dodati na početak grupe neke zahteve ka nekom nestatičnom delu veb servera.
Za odlaganje procesa između obrade jednog zahteva i drugog u 2 podstanja koraka, možete dodati dodatne zahteve između oba zahteva.
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 ove skripte 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 modifikovati email ali imati verifikaciju poslatu na stari email jer je promenljiva koja označava email već bila popunjena prvom). Kada se reč "objetivo" pronađe u primljenim emailovima znamo da smo primili verifikacioni token promenjenog emaila i završavamo napad.
Sirovi BF
Prethodno istraživanje je pokazalo da su korišćeni sledeći payload-ovi koji su pokušavali da pošalju pakete što je brže moguće kako bi izazvali RC.
Ponavljač: Pogledajte primere iz prethodnog odeljka.
Upadač: Pošaljite zahtev Upadaču, postavite broj niti na 30 unutar Opcija menija, izaberite kao payload Nul payload-ove i generišite 30.
Turbo Upadač
Python - asyncio
Metodologija RC-a
Prekoračenje ograničenja / TOCTOU
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 ili u ovom bug-u.
Postoji mnogo varijacija ovakvih napada, uključujući:
Višestruko iskorišćavanje poklon kartice
Ocena proizvoda više puta
Podizanje ili prenos gotovine preko stanja na vašem računu
Ponovno korišćenje jedinstvenog rešenja CAPTCHA
Zaobilaženje ograničenja brzine protiv grubih sila
Skrivene podstvari
Iskorišćavanje složenih trka uslova često uključuje iskorišćavanje kratkih prilika za interakciju sa skrivenim ili neželjenim podstanjima mašine. Evo kako pristupiti ovome:
Identifikacija Potencijalnih Skrivenih Podstanja
Počnite tako što ćete odrediti 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.
Ključanje: Uspešni napadi obično uključuju operacije ključane na isti identifikator, npr. korisničko ime ili token za resetovanje.
Sprovedite Početno Ispitivanje
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.
Pokažite Ranjivost
Sužite napad na minimalan broj zahteva potrebnih za iskorišćavanje ranjivosti, često samo dva. Ovaj korak može zahtevati više pokušaja ili automatizaciju zbog preciznog vremena uključenog.
Napadi Osetljivi na Vreme
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.
Za Iskorišćavanje:
Koristite precizno vreme, poput napada sa jednim paketom, da biste poslali istovremene zahteve za resetovanje lozinke. Identifikacija identičnih tokena ukazuje na ranjivost.
Primer:
Zatražite dva tokena za resetovanje lozinke istovremeno i uporedite ih. Podudarajući tokeni ukazuju na grešku u generisanju tokena.
Proverite ovaj PortSwigger Lab da isprobate ovo.
Studije slučaja skrivenih podstanja
Plati & dodaj stavku
Proverite ovaj PortSwigger Lab da vidite kako da platite u prodavnici i dodate dodatnu stavku koju nećete morati platiti.
Potvrdi druge e-pošte
Ideja je verifikovati adresu e-pošte i istovremeno je promeniti u drugu kako biste saznali da li platforma verifikuje novu promenjenu adresu.
Promeni e-poštu u 2 adrese zasnovano na kolačićima
Prema ovom istraživanju Gitlab je bio ranjiv na preuzimanje na ovaj način jer bi mogao poslati token za verifikaciju e-pošte jedne adrese na drugu e-poštu.
Proverite ovaj PortSwigger Lab da isprobate ovo.
Skrivena stanja baze podataka / Bajpasovanje potvrde
Ako se koriste 2 različita upisa da se dodaju informacije unutar baze podataka, postoji mali deo vremena 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) da bi se odmah potvrdio nalog mogao bi omogućiti da se potvrdi nalog gde ne kontrolišete e-poštu.
Proverite ovaj PortSwigger Lab da isprobate ovo.
Bajpasovanje 2FA
Sledeći pseudo-kod je ranjiv na trku uslova jer u vrlo kratkom vremenu 2FA nije primenjen dok je sesija kreirana:
OAuth2 večna upornost
Postoji nekoliko OAUth provajdera. 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 sa porukom: "Aplikacija <InsertCoolName> želi da pristupi vašim informacijama, da li želite da to dozvolite?"
Trkački uslov u authorization_code
authorization_code
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.
Trkački uslov u Refresh Token
Refresh Token
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.
RC u WebSockets
Na WS_RaceCondition_PoC možete pronaći PoC u Javi za slanje websocket poruka paralelno kako biste zloupotrebili Trkačke uslove takođe u Web Sockets.
Reference
Koristite Trickest da lako izgradite i automatizujete radne tokove pokretane najnaprednijim alatima zajednice na svetu. Pristupite danas:
Last updated