diff --git a/SUMMARY.md b/SUMMARY.md
index 87eee4342..b26e5d200 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -398,6 +398,7 @@
* [Laravel](network-services-pentesting/pentesting-web/laravel.md)
* [Moodle](network-services-pentesting/pentesting-web/moodle.md)
* [Nginx](network-services-pentesting/pentesting-web/nginx.md)
+ * [NextJS](network-services-pentesting/pentesting-web/nextjs.md)
* [PHP Tricks](network-services-pentesting/pentesting-web/php-tricks-esp/README.md)
* [PHP - Useful Functions & disable\_functions/open\_basedir bypass](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/README.md)
* [disable\_functions bypass - php-fpm/FastCGI](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/disable\_functions-bypass-php-fpm-fastcgi.md)
diff --git a/network-services-pentesting/pentesting-web/nextjs.md b/network-services-pentesting/pentesting-web/nextjs.md
new file mode 100644
index 000000000..3e040a565
--- /dev/null
+++ b/network-services-pentesting/pentesting-web/nextjs.md
@@ -0,0 +1,37 @@
+# NextJS
+
+{% hint style="success" %}
+Lerne & übe AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Lerne & übe GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+Unterstütze HackTricks
+
+* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
+* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
+
+
+{% endhint %}
+
+
+
+
+
+
+
+{% hint style="success" %}
+Lerne & übe AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Lerne & übe GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+Unterstütze HackTricks
+
+* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
+* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
+
+
+{% endhint %}
diff --git a/pentesting-web/race-condition.md b/pentesting-web/race-condition.md
index ab11ca352..86f9628e9 100644
--- a/pentesting-web/race-condition.md
+++ b/pentesting-web/race-condition.md
@@ -3,14 +3,14 @@
\
-Verwenden Sie [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
+Verwenden Sie [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=race-condition), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
Zugang heute erhalten:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=race-condition" %}
{% hint style="success" %}
-Lernen & üben Sie AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
-Lernen & üben Sie GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+Lernen & üben Sie AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Lernen & üben Sie GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -36,20 +36,20 @@ Hier finden Sie einige Techniken zur Synchronisierung von Anfragen:
#### HTTP/2 Single-Packet-Angriff vs. HTTP/1.1 Last-Byte-Synchronisierung
* **HTTP/2**: Unterstützt das Senden von zwei Anfragen über eine einzige TCP-Verbindung, wodurch die Auswirkungen von Netzwerk-Jitter verringert werden. Aufgrund serverseitiger Variationen können jedoch zwei Anfragen möglicherweise nicht ausreichen, um einen konsistenten Race Condition-Angriff durchzuführen.
-* **HTTP/1.1 'Last-Byte Sync'**: Ermöglicht das Vorab-Senden der meisten Teile von 20-30 Anfragen, wobei ein kleines Fragment zurückgehalten wird, das dann zusammen gesendet wird, um eine gleichzeitige Ankunft beim Server zu erreichen.
+* **HTTP/1.1 'Last-Byte Sync'**: Ermöglicht das Vorab-Senden der meisten Teile von 20-30 Anfragen, wobei ein kleines Fragment zurückgehalten wird, das dann zusammen gesendet wird, um eine gleichzeitige Ankunft am Server zu erreichen.
**Die Vorbereitung für Last-Byte Sync** umfasst:
1. Senden von Headern und Bodendaten ohne das letzte Byte, ohne den Stream zu beenden.
2. Eine Pause von 100 ms nach dem ersten Senden.
-3. Deaktivierung von TCP\_NODELAY, um Nagle's Algorithmus für das Batching der letzten Frames zu nutzen.
+3. Deaktivieren von TCP\_NODELAY, um Nagles Algorithmus für das Batchen der letzten Frames zu nutzen.
4. Pingen, um die Verbindung aufzuwärmen.
Das anschließende Senden der zurückgehaltenen Frames sollte zu ihrer Ankunft in einem einzigen Paket führen, was über Wireshark überprüfbar ist. Diese Methode gilt nicht für statische Dateien, die typischerweise nicht in RC-Angriffen involviert sind.
### Anpassung an die Serverarchitektur
-Das Verständnis der Architektur des Ziels ist entscheidend. Front-End-Server können Anfragen unterschiedlich weiterleiten, was die Zeitmessung beeinflusst. Eine präventive serverseitige Verbindungserwärmung durch unbedeutende Anfragen könnte die Anfragetiming normalisieren.
+Das Verständnis der Architektur des Ziels ist entscheidend. Front-End-Server könnten Anfragen unterschiedlich weiterleiten, was die Zeitmessung beeinflusst. Eine präventive serverseitige Verbindungserwärmung durch unbedeutende Anfragen könnte die Anfragetiming normalisieren.
#### Umgang mit sitzungsbasiertem Locking
@@ -61,7 +61,7 @@ Wenn die Verbindungserwärmung nicht effektiv ist, könnte das absichtliche Ausl
## Angriffsbeispiele
-* **Tubo Intruder - HTTP2 Single-Packet-Angriff (1 Endpunkt)**: Sie können die Anfrage an **Turbo Intruder** senden (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), Sie können im Request den Wert ändern, den Sie für **`%s`** brute-forcen möchten, wie in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` und dann **`examples/race-single-packer-attack.py`** aus dem Dropdown auswählen:
+* **Tubo Intruder - HTTP2 Single-Packet-Angriff (1 Endpunkt)**: Sie können die Anfrage an **Turbo Intruder** senden (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), Sie können im Request den Wert ändern, den Sie für **`%s`** brute-forcen möchten, wie in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`, und dann **`examples/race-single-packer-attack.py`** aus dem Dropdown auswählen:
@@ -75,7 +75,7 @@ engine.queue(target.req, password, gate='race1')
Wenn das Web kein HTTP2 unterstützt (nur HTTP1.1), verwenden Sie `Engine.THREADED` oder `Engine.BURP` anstelle von `Engine.BURP2`.
{% endhint %}
-* **Tubo Intruder - HTTP2 Einzelpaketangriff (Mehrere Endpunkte)**: Falls Sie eine Anfrage an 1 Endpunkt senden müssen und dann mehrere an andere Endpunkte, um die RCE auszulösen, können Sie das `race-single-packet-attack.py` Skript mit etwas wie:
+* **Tubo Intruder - HTTP2 Einzelpaketangriff (Mehrere Endpunkte)**: Falls Sie eine Anfrage an 1 Endpunkt senden müssen und dann mehrere an andere Endpunkte, um die RCE auszulösen, können Sie das Skript `race-single-packet-attack.py` mit etwas wie folgendem ändern:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@@ -219,9 +219,6 @@ temp_data_bytes += bytes(d)
h2_conn.send_bytes(temp_headers_bytes)
-
-
-
# wait some time
sleep(0.1)
@@ -243,12 +240,21 @@ h2_conn.close_connection()
response = requests.get(url, verify=False)
```
-### Raw BF
+### Verbesserung des Single Packet Angriffs
-Vor der vorherigen Forschung wurden einige Payloads verwendet, die einfach versuchten, die Pakete so schnell wie möglich zu senden, um eine RC zu verursachen.
+In der ursprünglichen Forschung wird erklärt, dass dieser Angriff eine Grenze von 1.500 Bytes hat. In [**diesem Beitrag**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/) wurde jedoch erklärt, wie es möglich ist, die 1.500-Byte-Beschränkung des Single Packet Angriffs auf die **65.535 B Fensterbeschränkung von TCP durch Verwendung von IP-Schichtfragmentierung** (Aufteilen eines einzelnen Pakets in mehrere IP-Pakete) zu erweitern und sie in unterschiedlicher Reihenfolge zu senden, was es ermöglichte, die Rekonstruktion des Pakets zu verhindern, bis alle Fragmente den Server erreicht hatten. Diese Technik ermöglichte es dem Forscher, 10.000 Anfragen in etwa 166 ms zu senden.
+
+Beachten Sie, dass diese Verbesserung den Angriff in RC, der Hunderte/Tausende von Paketen erfordert, um gleichzeitig anzukommen, zuverlässiger macht, aber auch einige Softwarebeschränkungen haben könnte. Einige beliebte HTTP-Server wie Apache, Nginx und Go haben eine strenge Einstellung `SETTINGS_MAX_CONCURRENT_STREAMS` von 100, 128 und 250. Andere wie NodeJS und nghttp2 haben sie jedoch unbegrenzt.\
+Das bedeutet im Grunde, dass Apache nur 100 HTTP-Verbindungen von einer einzelnen TCP-Verbindung berücksichtigt (was diesen RC-Angriff einschränkt).
+
+Sie finden einige Beispiele, die diese Technik verwenden, im Repo [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
+
+## Raw BF
+
+Vor der vorherigen Forschung wurden einige Payloads verwendet, die einfach versuchten, die Pakete so schnell wie möglich zu senden, um einen RC zu verursachen.
* **Repeater:** Überprüfen Sie die Beispiele aus dem vorherigen Abschnitt.
-* **Intruder**: Senden Sie die **Anfrage** an den **Intruder**, setzen Sie die **Anzahl der Threads** auf **30** im **Optionsmenü** und wählen Sie als Payload **Null-Payloads** und generieren Sie **30.**
+* **Intruder**: Senden Sie die **Anfrage** an **Intruder**, setzen Sie die **Anzahl der Threads** auf **30** im **Optionsmenü** und wählen Sie als Payload **Null-Payloads** und generieren Sie **30.**
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@@ -308,7 +314,7 @@ Es gibt viele Variationen dieser Art von Angriff, einschließlich:
* Bewerten eines Produkts mehrere Male
* Abheben oder Überweisen von Bargeld über Ihr Kontoguthaben hinaus
* Wiederverwendung einer einzelnen CAPTCHA-Lösung
-* Umgehen einer Anti-Brute-Force-Ratebegrenzung
+* Umgehen einer Anti-Brute-Force-Rate-Limitierung
### **Verborgene Subzustände**
@@ -318,45 +324,45 @@ Das Ausnutzen komplexer Race Conditions beinhaltet oft, kurze Gelegenheiten zu n
* Beginnen Sie mit der Identifizierung von Endpunkten, die kritische Daten ändern oder mit ihnen interagieren, wie z. B. Benutzerprofile oder Passwortzurücksetzprozesse. Konzentrieren Sie sich auf:
* **Speicherung**: Bevorzugen Sie Endpunkte, die serverseitige persistente Daten manipulieren, gegenüber denen, die Daten clientseitig verarbeiten.
* **Aktion**: Suchen Sie nach Operationen, die vorhandene Daten ändern, da diese eher ausnutzbare Bedingungen schaffen als solche, die neue Daten hinzufügen.
-* **Schlüsselung**: Erfolgreiche Angriffe beinhalten normalerweise Operationen, die auf demselben Identifikator basieren, z. B. Benutzername oder Rücksetztoken.
+* **Schlüsselung**: Erfolgreiche Angriffe beinhalten normalerweise Operationen, die auf demselben Identifikator basieren, z. B. Benutzername oder Rücksetz-Token.
2. **Durchführen einer ersten Erkundung**
* Testen Sie die identifizierten Endpunkte mit Race Condition-Angriffen und beobachten Sie Abweichungen von den erwarteten Ergebnissen. Unerwartete Antworten oder Änderungen im Anwendungsverhalten können auf eine Schwachstelle hinweisen.
3. **Demonstrieren Sie die Schwachstelle**
-* Reduzieren Sie den Angriff auf die minimale Anzahl von Anfragen, die erforderlich sind, um die Schwachstelle auszunutzen, oft nur zwei. Dieser Schritt kann mehrere Versuche oder Automatisierung erfordern, aufgrund der präzisen Zeitplanung.
+* Reduzieren Sie den Angriff auf die minimale Anzahl von Anfragen, die erforderlich sind, um die Schwachstelle auszunutzen, oft nur zwei. Dieser Schritt kann mehrere Versuche oder Automatisierung erfordern, aufgrund des präzisen Timings.
### Zeitkritische Angriffe
-Präzision bei der Zeitplanung von Anfragen kann Schwachstellen aufdecken, insbesondere wenn vorhersehbare Methoden wie Zeitstempel für Sicherheitstoken verwendet werden. Zum Beispiel könnte die Generierung von Passwortzurücksetztokens basierend auf Zeitstempeln identische Tokens für gleichzeitige Anfragen ermöglichen.
+Präzision beim Timing von Anfragen kann Schwachstellen aufdecken, insbesondere wenn vorhersehbare Methoden wie Zeitstempel für Sicherheitstoken verwendet werden. Zum Beispiel könnte die Generierung von Passwortzurücksetz-Token basierend auf Zeitstempeln identische Token für gleichzeitige Anfragen ermöglichen.
**Um auszunutzen:**
-* Verwenden Sie präzise Zeitplanung, wie einen einzelnen Paketangriff, um gleichzeitige Passwortzurücksetzanforderungen zu stellen. Identische Tokens deuten auf eine Schwachstelle hin.
+* Verwenden Sie präzises Timing, wie einen einzelnen Paketangriff, um gleichzeitige Passwortzurücksetz-Anfragen zu stellen. Identische Token weisen auf eine Schwachstelle hin.
**Beispiel:**
-* Fordern Sie zwei Passwortzurücksetztokens gleichzeitig an und vergleichen Sie sie. Übereinstimmende Tokens deuten auf einen Fehler in der Token-Generierung hin.
+* Fordern Sie zwei Passwortzurücksetz-Token gleichzeitig an und vergleichen Sie sie. Übereinstimmende Token deuten auf einen Fehler in der Token-Generierung hin.
**Überprüfen Sie dies** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **um dies auszuprobieren.**
## Fallstudien zu verborgenen Subzuständen
-### Bezahlen & einen Artikel hinzufügen
+### Bezahlen & ein Element hinzufügen
-Überprüfen Sie dieses [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), um zu sehen, wie Sie im Geschäft **bezahlen** und einen zusätzlichen Artikel **hinzufügen**, für den Sie **nicht bezahlen müssen**.
+Überprüfen Sie dieses [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), um zu sehen, wie Sie im Geschäft **bezahlen** und ein zusätzliches Element **hinzufügen**, für das Sie **nicht bezahlen müssen**.
### Bestätigen anderer E-Mails
Die Idee ist, **eine E-Mail-Adresse zu verifizieren und sie gleichzeitig in eine andere zu ändern**, um herauszufinden, ob die Plattform die neue geänderte Adresse überprüft.
-### E-Mail in 2 E-Mail-Adressen ändern, Cookie-basiert
+### Ändern der E-Mail in 2 E-Mail-Adressen Cookie-basiert
-Laut [**dieser Forschung**](https://portswigger.net/research/smashing-the-state-machine) war Gitlab auf diese Weise anfällig für einen Übernahmeangriff, da es **das E-Mail-Bestätigungstoken einer E-Mail an die andere E-Mail senden könnte**.
+Laut [**dieser Forschung**](https://portswigger.net/research/smashing-the-state-machine) war Gitlab auf diese Weise anfällig für eine Übernahme, da es möglicherweise **das E-Mail-Bestätigungstoken einer E-Mail an die andere E-Mail** **sendet**.
**Überprüfen Sie dies** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **um dies auszuprobieren.**
### Verborgene Datenbankzustände / Bestätigungsumgehung
-Wenn **2 verschiedene Schreibvorgänge** verwendet werden, um **Informationen** in eine **Datenbank** **hinzuzufügen**, gibt es einen kurzen Zeitraum, in dem **nur die ersten Daten in die Datenbank geschrieben wurden**. Zum Beispiel, wenn ein Benutzer erstellt wird, könnten der **Benutzername** und das **Passwort** **geschrieben** werden und **dann das Token**, um das neu erstellte Konto zu bestätigen. Das bedeutet, dass für eine kurze Zeit das **Token zur Bestätigung eines Kontos null ist**.
+Wenn **2 verschiedene Schreibvorgänge** verwendet werden, um **Informationen** in eine **Datenbank** **hinzuzufügen**, gibt es einen kurzen Zeitraum, in dem **nur die ersten Daten in die Datenbank geschrieben wurden**. Zum Beispiel, wenn ein Benutzer erstellt wird, könnten der **Benutzername** und das **Passwort** **geschrieben** werden und **dann das Token**, um das neu erstellte Konto zu bestätigen. Das bedeutet, dass für einen kurzen Zeitraum das **Token zur Bestätigung eines Kontos null** ist.
Daher könnte **die Registrierung eines Kontos und das Senden mehrerer Anfragen mit einem leeren Token** (`token=` oder `token[]=` oder jede andere Variation), um das Konto sofort zu bestätigen, ermöglichen, ein **Konto zu bestätigen**, bei dem Sie die E-Mail nicht kontrollieren.
@@ -375,15 +381,15 @@ session['enforce_mfa'] = True
### OAuth2 ewige Persistenz
Es gibt mehrere [**OAuth-Anbieter**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Diese Dienste ermöglichen es Ihnen, eine Anwendung zu erstellen und Benutzer zu authentifizieren, die der Anbieter registriert hat. Um dies zu tun, muss der **Client** Ihrer Anwendung **erlauben**, auf einige ihrer Daten innerhalb des **OAuth-Anbieters** zuzugreifen.\
-Bis hierhin handelt es sich nur um eine gängige Anmeldung mit Google/LinkedIn/GitHub..., bei der Sie mit einer Seite konfrontiert werden, die sagt: "_Anwendung \ möchte auf Ihre Informationen zugreifen, möchten Sie dies erlauben?_"
+Bis hierhin ist es nur ein gewöhnlicher Login mit Google/LinkedIn/GitHub..., bei dem Sie mit einer Seite konfrontiert werden, die sagt: "_Anwendung \ möchte auf Ihre Informationen zugreifen, möchten Sie dies erlauben?_"
#### Race Condition in `authorization_code`
-Das **Problem** tritt auf, wenn Sie **es akzeptieren** und automatisch einen **`authorization_code`** an die bösartige Anwendung senden. Dann **missbraucht diese Anwendung eine Race Condition im OAuth-Dienstanbieter, um mehr als ein AT/RT** (_Authentication Token/Refresh Token_) aus dem **`authorization_code`** für Ihr Konto zu generieren. Grundsätzlich wird ausgenutzt, dass Sie die Anwendung akzeptiert haben, um auf Ihre Daten zuzugreifen, um **mehrere Konten zu erstellen**. Wenn Sie dann **aufhören, der Anwendung den Zugriff auf Ihre Daten zu erlauben, wird ein Paar von AT/RT gelöscht, aber die anderen bleiben weiterhin gültig**.
+Das **Problem** tritt auf, wenn Sie **es akzeptieren** und automatisch einen **`authorization_code`** an die bösartige Anwendung senden. Dann **missbraucht diese Anwendung eine Race Condition im OAuth-Dienstanbieter, um mehr als ein AT/RT** (_Authentication Token/Refresh Token_) aus dem **`authorization_code`** für Ihr Konto zu generieren. Grundsätzlich wird sie den Umstand ausnutzen, dass Sie der Anwendung zugestimmt haben, auf Ihre Daten zuzugreifen, um **mehrere Konten zu erstellen**. Wenn Sie dann **aufhören, der Anwendung den Zugriff auf Ihre Daten zu erlauben, wird ein Paar von AT/RT gelöscht, aber die anderen bleiben weiterhin gültig**.
#### Race Condition in `Refresh Token`
-Sobald Sie **ein gültiges RT erhalten haben**, könnten Sie versuchen, **es zu missbrauchen, um mehrere AT/RT zu generieren**, und **selbst wenn der Benutzer die Berechtigungen** für die bösartige Anwendung zum Zugriff auf seine Daten widerruft, **werden mehrere RTs weiterhin gültig sein.**
+Sobald Sie **ein gültiges RT erhalten haben**, könnten Sie versuchen, **es auszunutzen, um mehrere AT/RT zu generieren**, und **selbst wenn der Benutzer die Berechtigungen** für die bösartige Anwendung zum Zugriff auf seine Daten widerruft, **werden mehrere RTs weiterhin gültig sein.**
## **RC in WebSockets**
@@ -398,8 +404,8 @@ In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
* [https://portswigger.net/web-security/race-conditions](https://portswigger.net/web-security/race-conditions)
{% hint style="success" %}
-Lernen & üben Sie AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
-Lernen & üben Sie GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+Lernen & üben Sie AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Lernen & üben Sie GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -415,7 +421,7 @@ Lernen & üben Sie GCP Hacking:
\
-Verwenden Sie [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=race-condition), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
+Verwenden Sie [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=race-condition), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
Erhalten Sie heute Zugang:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=race-condition" %}