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

3.8 KiB

{% hint style="success" %} Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks
{% endhint %}

Vérifiez les détails complets de cette technique sur https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

Téléchargements de fichiers PHP

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.

{% 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. {% 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.

Exploitation sur les systèmes Windows

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 :

  • 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.

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 :

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é.

Exploitation sur les systèmes GNU/Linux

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.