LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

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

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Wenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start auf Off steht. Wenn session.upload_progress.enabled auf On gesetzt ist und Sie die PHP_SESSION_UPLOAD_PROGRESS in den multipart POST-Daten angeben, wird PHP die Sitzung für Sie aktivieren.

$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'  -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange

In the last example the session will contain the string blahblahblah

Hinweis: Mit PHP_SESSION_UPLOAD_PROGRESS können Sie Daten innerhalb der Sitzung kontrollieren. Wenn Sie Ihre Sitzungsdatei einbinden, können Sie einen von Ihnen kontrollierten Teil einbinden (zum Beispiel einen PHP-Shellcode).

Obwohl die meisten Tutorials im Internet empfehlen, session.upload_progress.cleanup für Debugging-Zwecke auf Off zu setzen, ist das Standardverhalten von session.upload_progress.cleanup in PHP immer noch On. Das bedeutet, dass Ihr Upload-Fortschritt in der Sitzung so schnell wie möglich bereinigt wird. Es handelt sich also um eine Race Condition.

Der CTF

In dem ursprünglichen CTF, in dem diese Technik kommentiert wird, reichte es nicht aus, die Race Condition auszunutzen, sondern der geladene Inhalt musste auch mit der Zeichenkette @<?php beginnen.

Aufgrund der Standardeinstellung von session.upload_progress.prefix wird unsere SESSION-Datei mit einem lästigen Präfix upload_progress_ beginnen. Zum Beispiel: upload_progress_controlledcontentbyattacker

Der Trick, um das anfängliche Präfix zu entfernen, bestand darin, das Nutzlast 3 Mal base64 zu kodieren und dann über die Filter convert.base64-decode zu dekodieren. Dies liegt daran, dass beim base64-Decodieren PHP die seltsamen Zeichen entfernt. Nach 3 Mal werden nur noch die vom Angreifer gesendeten Nutzlasten übrig bleiben (und dann kann der Angreifer den anfänglichen Teil kontrollieren).

Weitere Informationen finden Sie im ursprünglichen Writeup https://blog.orange.tw/2018/10/ und im endgültigen Exploit https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py Ein weiterer Writeup unter https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

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

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated