LFI2RCE via phpinfo()
Last updated
Last updated
Pour exploiter cette vulnérabilité, vous avez besoin de: Une vulnérabilité LFI, une page où phpinfo() est affiché, "file_uploads = on" et le serveur doit pouvoir écrire dans le répertoire "/tmp".
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Vous devez corriger l'exploit (remplacer => par =>). Pour ce faire, vous pouvez:
Vous devez également modifier la charge utile au début de l'exploit (pour un shell inversé php par exemple), le REQ1 (cela devrait pointer vers la page phpinfo et inclure le rembourrage, c'est-à-dire : REQ1="""POST /install.php?mode=phpinfo&a="""+rembourrage+""" HTTP/1.1), et LFIREQ (cela devrait pointer vers la vulnérabilité LFI, c'est-à-dire : LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Vérifiez le double "%" lors de l'exploitation du caractère nul)
Si les téléversements sont autorisés en PHP et que vous essayez de téléverser un fichier, ce fichier est stocké dans un répertoire temporaire jusqu'à ce que le serveur ait terminé de traiter la demande, puis ce fichier temporaire est supprimé.
Ensuite, si vous avez trouvé une vulnérabilité LFI dans le serveur web, vous pouvez essayer de deviner le nom du fichier temporaire créé et exploiter une RCE en accédant au fichier temporaire avant sa suppression.
Sous Windows, les fichiers sont généralement stockés dans C:\Windows\temp\php
Sous Linux, le nom du fichier est généralement aléatoire et situé dans /tmp. Comme le nom est aléatoire, il est nécessaire d'extraire de quelque part le nom du fichier temporaire et d'y accéder avant sa suppression. Cela peut être fait en lisant la valeur de la variable $_FILES dans le contenu de la fonction "phpconfig()".
phpinfo()
PHP utilise un tampon de 4096B et lorsqu'il est plein, il est envoyé au client. Ensuite, le client peut envoyer beaucoup de grandes demandes (en utilisant de grands en-têtes) téléversant un php shell inversé, attendre que la première partie de phpinfo() soit renvoyée (où se trouve le nom du fichier temporaire) et essayer d'accéder au fichier temporaire avant que le serveur php ne supprime le fichier en exploitant une vulnérabilité LFI.
Script Python pour essayer de forcer le nom (si la longueur = 6)