mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 06:00:40 +00:00
Translated ['pentesting-web/race-condition.md'] to af
This commit is contained in:
parent
3a193fad9b
commit
b98cf31a87
1 changed files with 23 additions and 22 deletions
|
@ -29,13 +29,13 @@ Vir 'n diep begrip van hierdie tegniek, kyk na die oorspronklike verslag in [htt
|
|||
|
||||
## Verbetering van Race Condition Aanvalle
|
||||
|
||||
Die hoofhindernis om voordeel te trek uit race condities is om te verseker dat verskeie versoeke gelyktydig hanteer word, met **baie min verskil in hul verwerkingstye—ideaal gesproke, minder as 1ms**.
|
||||
Die hoofhindernis om voordeel te trek uit race conditions is om te verseker dat verskeie versoeke gelyktydig hanteer word, met **baie min verskil in hul verwerkingstye—ideaal gesproke, minder as 1ms**.
|
||||
|
||||
Hier kan jy 'n paar tegnieke vir die Sinchronisering van Versoeke vind:
|
||||
|
||||
#### HTTP/2 Enkelpakket Aanval vs. HTTP/1.1 Laaste-Bit Sinchronisering
|
||||
|
||||
* **HTTP/2**: Ondersteun die sending van twee versoeke oor 'n enkele TCP-verbinding, wat die impak van netwerk jitter verminder. Maar, as gevolg van bediener-kant variasies, mag twee versoeke nie genoeg wees vir 'n konsekwente race condition uitbuiting nie.
|
||||
* **HTTP/2**: Ondersteun die sending van twee versoeke oor 'n enkele TCP-verbinding, wat die impak van netwerk jitter verminder. egter, weens variasies aan die bediener se kant, mag twee versoeke nie genoeg wees vir 'n konsekwente race condition uitbuiting nie.
|
||||
* **HTTP/1.1 'Laaste-Bit Sync'**: Maak dit moontlik om die meeste dele van 20-30 versoeke vooraf te stuur, terwyl 'n klein fragment teruggehou word, wat dan saamgestuur word, wat gelyktydige aankoms by die bediener bereik.
|
||||
|
||||
**Voorbereiding vir Laaste-Bit Sync** behels:
|
||||
|
@ -45,11 +45,11 @@ Hier kan jy 'n paar tegnieke vir die Sinchronisering van Versoeke vind:
|
|||
3. Deaktiveer TCP\_NODELAY om Nagle se algoritme te benut vir die bundeling van finale rame.
|
||||
4. Ping om die verbinding op te warm.
|
||||
|
||||
Die daaropvolgende sending van teruggehoue rame moet lei tot hul aankoms in 'n enkele pakket, verifieerbaar via Wireshark. Hierdie metode is nie van toepassing op statiese lêers nie, wat tipies nie betrokke is by RC-aanvalle nie.
|
||||
Die daaropvolgende sending van teruggehoude rame moet lei tot hul aankoms in 'n enkele pakket, verifieerbaar via Wireshark. Hierdie metode is nie van toepassing op statiese lêers nie, wat tipies nie betrokke is by RC-aanvalle nie.
|
||||
|
||||
### Aanpassing by Bediener Argitektuur
|
||||
|
||||
Om die teiken se argitektuur te verstaan is van kardinale belang. Front-end bedieners mag versoeke anders roete, wat tydsberekening beïnvloed. Voorkomende bediener-kant verbinding opwarming, deur onbelangrike versoeke, mag versoek tydsberekening normaliseer.
|
||||
Om die teiken se argitektuur te verstaan, is van kardinale belang. Front-end bedieners mag versoeke anders roete, wat tydsberekening beïnvloed. Voorkomende bediener-kant verbinding opwarming, deur onbelangrike versoeke, mag versoek tydsberekening normaliseer.
|
||||
|
||||
#### Hantering van Sessie-gebaseerde Vergrendeling
|
||||
|
||||
|
@ -57,7 +57,7 @@ Raamwerke soos PHP se sessiehandler serialiseer versoeke volgens sessie, wat moo
|
|||
|
||||
#### Oorkoming van Tempo of Hulpbron Limiete
|
||||
|
||||
As verbinding opwarming nie effektief is nie, kan die doelbewuste onttriggering van webbedieners se tempo of hulpbron limiet vertragings deur 'n vloed van dummy versoeke die enkelpakket aanval fasiliteer deur 'n bediener-kant vertraging te veroorsaak wat bevorderlik is vir race condities.
|
||||
As verbinding opwarming nie effektief is nie, kan die doelbewuste onttriggering van webbedieners se tempo of hulpbron limiet vertragings deur 'n vloed van dummy versoeke die enkelpakket aanval fasiliteer deur 'n bediener-kant vertraging te veroorsaak wat bevorderlik is vir race conditions.
|
||||
|
||||
## Aanval Voorbeelde
|
||||
|
||||
|
@ -114,7 +114,7 @@ engine.openGate(currentAttempt)
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (58).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* **Geoutomatiseerde python skrip**: Die doel van hierdie skrip is om die e-pos van 'n gebruiker te verander terwyl dit voortdurend verifieer totdat die verifikasietoken van die nuwe e-pos by die laaste e-pos aankom (dit is omdat daar in die kode 'n RC gesien is waar dit moontlik was om 'n e-pos te wysig, maar die verifikasie na die ou een te stuur omdat die veranderlike wat die e-pos aandui reeds met die eerste een bevolk was).\
|
||||
* **Geoutomatiseerde python skrip**: Die doel van hierdie skrip is om die e-pos van 'n gebruiker te verander terwyl dit voortdurend verifieer totdat die verifikasietoken van die nuwe e-pos by die laaste e-pos aankom (dit is omdat daar in die kode 'n RC gesien is waar dit moontlik was om 'n e-pos te wysig, maar die verifikasie na die ou een gestuur is omdat die veranderlike wat die e-pos aandui reeds met die eerste een bevolk was).\
|
||||
Wanneer die woord "objetivo" in die ontvangde e-posse gevind word, weet ons ons het die verifikasietoken van die veranderde e-pos ontvang en beëindig ons die aanval.
|
||||
```python
|
||||
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
|
||||
|
@ -242,7 +242,7 @@ response = requests.get(url, verify=False)
|
|||
```
|
||||
### Verbetering van Enkelpakketaanval
|
||||
|
||||
In die oorspronklike navorsing word verduidelik dat hierdie aanval 'n limiet van 1,500 bytes het. egter, in [**hierdie pos**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), is verduidelik hoe dit moontlik is om die 1,500-byte beperking van die enkelpakketaanval uit te brei na die **65,535 B vensterbeperking van TCP deur IP-laag fragmentasie te gebruik** (om 'n enkele pakket in verskeie IP-pakkette te verdeel) en dit in 'n ander volgorde te stuur, wat dit moontlik gemaak het om die pakket se heropbou te voorkom totdat al die fragmente die bediener bereik. Hierdie tegniek het die navorser in staat gestel om 10,000 versoeke in ongeveer 166ms te stuur. 
|
||||
In die oorspronklike navorsing word verduidelik dat hierdie aanval 'n limiet van 1,500 bytes het. egter, in [**hierdie pos**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), is verduidelik hoe dit moontlik is om die 1,500-byte beperking van die enkelpakketaanval uit te brei na die **65,535 B vensterbeperking van TCP deur IP-laag fragmentasie te gebruik** (om 'n enkele pakket in verskeie IP-pakkette te verdeel) en dit in 'n ander volgorde te stuur, wat dit moontlik maak om die pakket se hersameling te voorkom totdat al die fragmente by die bediener aankom. Hierdie tegniek het die navorser in staat gestel om 10,000 versoeke in ongeveer 166ms te stuur. 
|
||||
|
||||
Let daarop dat alhoewel hierdie verbetering die aanval meer betroubaar maak in RC wat honderde/duisende pakkette vereis om op dieselfde tyd aan te kom, dit ook 'n paar sagtewarebeperkings kan hê. Sommige gewilde HTTP-bedieners soos Apache, Nginx en Go het 'n streng `SETTINGS_MAX_CONCURRENT_STREAMS` instelling van 100, 128 en 250. egter, ander soos NodeJS en nghttp2 het dit onbeperk.\
|
||||
Dit beteken basies dat Apache slegs 100 HTTP-verbindinge van 'n enkele TCP-verbinding sal oorweeg (wat hierdie RC-aanval beperk).
|
||||
|
@ -308,23 +308,23 @@ asyncio.run(main())
|
|||
|
||||
Dit is die mees basiese tipe van 'n race condition waar **kwesbaarhede** wat **verskyn** in plekke wat **die aantal kere wat jy 'n aksie kan uitvoer, beperk**. Soos om dieselfde afslagkode verskeie kere in 'n webwinkel te gebruik. 'n Baie maklike voorbeeld kan gevind word in [**hierdie verslag**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) of in [**hierdie fout**](https://hackerone.com/reports/759247)**.**
|
||||
|
||||
Daar is baie variasies van hierdie soort aanval, insluitend:
|
||||
Daar is baie variasies van hierdie tipe aanval, insluitend:
|
||||
|
||||
* Om 'n geskenkkaart verskeie kere in te wissel
|
||||
* Om 'n produk verskeie kere te beoordeel
|
||||
* Om kontant te onttrek of oor te dra bo jou rekeningbalans
|
||||
* Om 'n enkele CAPTCHA-oplossing te hergebruik
|
||||
* Om 'n anti-brute-force koerslimiet te omseil
|
||||
* 'n Geskenkkaart verskeie kere inlos
|
||||
* 'n Produk verskeie kere beoordeel
|
||||
* Kontant onttrek of oordra bo jou rekeningbalans
|
||||
* 'n Enkele CAPTCHA-oplossing hergebruik
|
||||
* 'n Anti-brute-force koerslimiet omseil
|
||||
|
||||
### **Versteekte substates**
|
||||
|
||||
Om komplekse race conditions te benut, behels dikwels die benutting van kort geleenthede om met versteekte of **onbedoelde masjien substates** te kommunikeer. Hier is hoe om dit te benader:
|
||||
Die benutting van komplekse race conditions behels dikwels die benutting van kort geleenthede om met versteekte of **onbedoelde masjien substates** te kommunikeer. Hier is hoe om dit aan te pak:
|
||||
|
||||
1. **Identifiseer Potensiële Versteekte Substates**
|
||||
* Begin deur eindpunte te identifiseer wat kritieke data, soos gebruikersprofiele of wagwoordherstelprosesse, wysig of mee kommunikeer. Fokus op:
|
||||
* **Berging**: Verkies eindpunte wat server-kant volhoubare data manipuleer bo dié wat data kliënt-kant hanteer.
|
||||
* **Aksie**: Soek na operasies wat bestaande data verander, wat meer waarskynlik is om benutbare toestande te skep in vergelyking met dié wat nuwe data byvoeg.
|
||||
* **Sleutel**: Suksesvolle aanvalle behels gewoonlik operasies wat op dieselfde identifiseerder gegrond is, bv. gebruikersnaam of hersteltoken.
|
||||
* **Sleuteling**: Suksesvolle aanvalle behels gewoonlik operasies wat op dieselfde identifiseerder gesleutel is, bv. gebruikersnaam of hersteltoken.
|
||||
2. **Voer Aanvanklike Probering Uit**
|
||||
* Toets die geïdentifiseerde eindpunte met race condition aanvalle, en let op enige afwykings van verwagte uitkomste. Onverwagte reaksies of veranderinge in toepassingsgedrag kan 'n kwesbaarheid aandui.
|
||||
3. **Demonstreer die Kwesbaarheid**
|
||||
|
@ -332,15 +332,15 @@ Om komplekse race conditions te benut, behels dikwels die benutting van kort gel
|
|||
|
||||
### Tydsensitiewe Aanvalle
|
||||
|
||||
Presisie in die tydsberekening van versoeke kan kwesbaarhede onthul, veral wanneer voorspelbare metodes soos tydstempels vir sekuriteits tokens gebruik word. Byvoorbeeld, om wagwoordherstel tokens te genereer op grond van tydstempels kan identiese tokens vir gelyktydige versoeke toelaat.
|
||||
Presisie in die tydsberekening van versoeke kan kwesbaarhede onthul, veral wanneer voorspelbare metodes soos tydstempels vir sekuriteits tokens gebruik word. Byvoorbeeld, die generering van wagwoordherstel tokens gebaseer op tydstempels kan identiese tokens vir gelyktydige versoeke toelaat.
|
||||
|
||||
**Om te Benut:**
|
||||
|
||||
* Gebruik presiese tydsberekening, soos 'n enkele pakket aanval, om gelyktydige wagwoordherstel versoeke te maak. Identiese tokens dui op 'n kwesbaarheid aan.
|
||||
* Gebruik presiese tydsberekening, soos 'n enkele pakket aanval, om gelyktydige wagwoordherstel versoeke te maak. Identiese tokens dui op 'n kwesbaarheid.
|
||||
|
||||
**Voorbeeld:**
|
||||
|
||||
* Versoek twee wagwoordherstel tokens op dieselfde tyd en vergelyk hulle. Ooreenstemmende tokens dui op 'n fout in token generasie aan.
|
||||
* Versoek twee wagwoordherstel tokens op dieselfde tyd en vergelyk hulle. Ooreenstemmende tokens dui op 'n fout in token generasie.
|
||||
|
||||
**Kyk na hierdie** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **om dit te probeer.**
|
||||
|
||||
|
@ -362,7 +362,7 @@ Volgens [**hierdie navorsing**](https://portswigger.net/research/smashing-the-st
|
|||
|
||||
### Versteekte Databasis toestande / Bevestiging Omseiling
|
||||
|
||||
As **2 verskillende skrywe** gebruik word om **inligting** binne 'n **databasis** toe te voeg, is daar 'n klein tydsdeel waar **slegs die eerste data geskryf is** binne die databasis. Byvoorbeeld, wanneer 'n gebruiker geskep word, kan die **gebruikersnaam** en **wagwoord** **geskryf** word en **dan die token** om die nuut geskepte rekening te bevestig, geskryf word. Dit beteken dat vir 'n kort tyd die **token om 'n rekening te bevestig nul is**.
|
||||
As **2 verskillende skrywe** gebruik word om **inligting** binne 'n **databasis** toe te voeg, is daar 'n klein tydsdeel waar **slegs die eerste data geskryf is** binne die databasis. Byvoorbeeld, wanneer 'n gebruiker geskep word, kan die **gebruikersnaam** en **wagwoord** **geskryf** word en **dan die token** om die nuut geskepte rekening te bevestig, geskryf word. Dit beteken dat vir 'n kort tyd die **token om 'n rekening te bevestig nul** is.
|
||||
|
||||
Daarom kan **die registrasie van 'n rekening en die stuur van verskeie versoeke met 'n leë token** (`token=` of `token[]=` of enige ander variasie) om die rekening onmiddellik te bevestig, toelaat om 'n **rekening te bevestig** waar jy nie die e-pos beheer nie.
|
||||
|
||||
|
@ -370,7 +370,7 @@ Daarom kan **die registrasie van 'n rekening en die stuur van verskeie versoeke
|
|||
|
||||
### Omseil 2FA
|
||||
|
||||
Die volgende pseudo-kode is kwesbaar vir race condition omdat daar in 'n baie klein tyd die **2FA nie afgedwing** word terwyl die sessie geskep word:
|
||||
Die volgende pseudo-kode is kwesbaar vir race condition omdat daar in 'n baie kort tyd die **2FA nie afgedwing** word terwyl die sessie geskep word:
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
|
@ -385,11 +385,11 @@ So, tot hier is dit net 'n algemene aanmelding met google/linkedin/github... waa
|
|||
|
||||
#### Race Condition in `authorization_code`
|
||||
|
||||
Die **probleem** verskyn wanneer jy dit **aanvaar** en outomaties 'n **`authorization_code`** na die kwaadwillige toepassing stuur. Dan misbruik hierdie **toepassing 'n Race Condition in die OAUth diensverskaffer om meer as een AT/RT** (_Authentication Token/Refresh Token_) van die **`authorization_code`** vir jou rekening te genereer. Basies, dit sal die feit misbruik dat jy die toepassing aanvaar het om toegang tot jou data te verkry om **verskeie rekeninge te skep**. Dan, as jy **stop om die toepassing toe te laat om toegang tot jou data te verkry, sal een paar AT/RT verwyder word, maar die ander sal steeds geldig wees**.
|
||||
Die **probleem** verskyn wanneer jy dit **aanvaar** en outomaties 'n **`authorization_code`** na die kwaadwillige toepassing stuur. Dan, hierdie **toepassing misbruik 'n Race Condition in die OAUth diensverskaffer om meer as een AT/RT** (_Authentication Token/Refresh Token_) van die **`authorization_code`** vir jou rekening te genereer. Basies, dit sal die feit misbruik dat jy die toepassing aanvaar het om toegang tot jou data te verkry om **verskeie rekeninge te skep**. Dan, as jy **stop om die toepassing toe te laat om toegang tot jou data te verkry, sal een paar AT/RT verwyder word, maar die ander sal steeds geldig wees**.
|
||||
|
||||
#### Race Condition in `Refresh Token`
|
||||
|
||||
Sodra jy 'n **geldige RT** verkry het, kan jy probeer om dit te **misbruik om verskeie AT/RT** te genereer en **selfs as die gebruiker die toestemmings** vir die kwaadwillige toepassing om sy data te verkry, **sal verskeie RT's steeds geldig wees.**
|
||||
Sodra jy 'n **geldige RT** verkry het, kan jy probeer om dit te **misbruik om verskeie AT/RT** te genereer en **selfs as die gebruiker die toestemmings kanselleer** vir die kwaadwillige toepassing om toegang tot sy data te verkry, **sal verskeie RT's steeds geldig wees.**
|
||||
|
||||
## **RC in WebSockets**
|
||||
|
||||
|
@ -402,6 +402,7 @@ In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
|
|||
* [https://hackerone.com/reports/55140](https://hackerone.com/reports/55140)
|
||||
* [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
* [https://portswigger.net/web-security/race-conditions](https://portswigger.net/web-security/race-conditions)
|
||||
* [https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
|
|
Loading…
Reference in a new issue