hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

47 lines
3.8 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :<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">\
Apprenez et pratiquez le hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Soutenir HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
**Vérifiez les détails complets de cette technique sur [https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf)**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
## **Téléchargements de fichiers PHP**
2022-04-21 00:07:27 +00:00
Lorsqu'un moteur **PHP** reçoit une **requête POST** contenant des fichiers formatés selon la RFC 1867, il génère des fichiers temporaires pour stocker les données téléchargées. Ces fichiers sont cruciaux pour la gestion des téléchargements de fichiers dans les scripts PHP. La fonction `move_uploaded_file` doit être utilisée pour déplacer ces fichiers temporaires vers un emplacement souhaité si un stockage persistant au-delà de l'exécution du script est nécessaire. Après l'exécution, PHP supprime automatiquement tous les fichiers temporaires restants.
2022-04-21 00:07:27 +00:00
{% hint style="info" %}
**Alerte de sécurité : Les attaquants, conscients de l'emplacement des fichiers temporaires, pourraient exploiter une vulnérabilité d'inclusion de fichiers locaux pour exécuter du code en accédant au fichier pendant le téléchargement.**
2022-04-21 00:07:27 +00:00
{% endhint %}
Le défi pour un accès non autorisé réside dans la prédiction du nom du fichier temporaire, qui est intentionnellement aléatoire.
2022-04-21 00:07:27 +00:00
#### Exploitation sur les systèmes Windows
2022-04-21 00:07:27 +00:00
Sur Windows, PHP génère des noms de fichiers temporaires en utilisant la fonction `GetTempFileName`, ce qui donne un motif comme `<path>\<pre><uuuu>.TMP`. Notamment :
2022-04-21 00:07:27 +00:00
- Le chemin par défaut est généralement `C:\Windows\Temp`.
- Le préfixe est généralement "php".
- Le `<uuuu>` représente une valeur hexadécimale unique. Crucialement, en raison de la limitation de la fonction, seuls les 16 bits inférieurs sont utilisés, permettant un maximum de 65,535 noms uniques avec un chemin et un préfixe constants, rendant la force brute réalisable.
2022-04-21 00:07:27 +00:00
De plus, le processus d'exploitation est simplifié sur les systèmes Windows. Une particularité de la fonction `FindFirstFile` permet l'utilisation de caractères génériques dans les chemins d'inclusion de fichiers locaux (LFI). Cela permet de créer un chemin d'inclusion comme suit pour localiser le fichier temporaire :
2022-04-21 00:07:27 +00:00
```
http://site/vuln.php?inc=c:\windows\temp\php<<
```
Dans certaines situations, un masque plus spécifique (comme `php1<<` ou `phpA<<`) peut être requis. On peut systématiquement essayer ces masques pour découvrir le fichier temporaire téléchargé.
2022-04-21 00:07:27 +00:00
#### Exploitation sur les systèmes GNU/Linux
2022-04-21 00:07:27 +00:00
Pour les systèmes GNU/Linux, le caractère aléatoire dans la nomination des fichiers temporaires est robuste, rendant les noms ni prévisibles ni susceptibles aux attaques par force brute. D'autres détails peuvent être trouvés dans la documentation référencée.