LFI2RCE Via temp file uploads

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Consultez les détails complets de cette technique dans 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 essentiels 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 tout fichier temporaire restant.

Alerte de sécurité : Les attaquants, conscients de l'emplacement des fichiers temporaires, pourraient exploiter une vulnérabilité d'inclusion de fichier local pour exécuter du code en accédant au fichier lors du téléchargement.

Le défi de l'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 tel que <chemin>\<pré><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 jokers dans les chemins d'inclusion de fichiers locaux (LFI). Cela permet de créer un chemin d'inclusion comme celui-ci 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 nécessaire. 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, l'aléatoire dans le nom des fichiers temporaires est robuste, rendant les noms ni prévisibles ni susceptibles aux attaques par force brute. Des détails supplémentaires peuvent être trouvés dans la documentation référencée.

Dernière mise à jour