LFI2RCE über PHP_SESSION_UPLOAD_PROGRESS
Reading time: 3 minutes
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.
Grundlegende Informationen
Wenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start
auf Aus
steht. Wenn session.upload_progress.enabled
auf Ein
steht und Sie die PHP_SESSION_UPLOAD_PROGRESS
in multipart POST-Daten bereitstellen, 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
Beachten Sie, dass Sie mit PHP_SESSION_UPLOAD_PROGRESS
Daten innerhalb der Sitzung steuern können. Wenn Sie Ihre Sitzungsdatei einfügen, können Sie einen Teil einfügen, den Sie kontrollieren (zum Beispiel einen PHP-Shellcode).
note
Obwohl die meisten Tutorials im Internet empfehlen, session.upload_progress.cleanup
aus Debugging-Gründen auf Off
zu setzen, ist die Standardeinstellung von session.upload_progress.cleanup
in PHP weiterhin On
. Das bedeutet, dass Ihr Upload-Fortschritt in der Sitzung so schnell wie möglich bereinigt wird. Dies wird also Race Condition sein.
Der CTF
Im originalen CTF, in dem diese Technik kommentiert wird, war es nicht genug, die Race Condition auszunutzen, sondern der geladene Inhalt musste auch mit der Zeichenfolge @<?php
beginnen.
Aufgrund der Standardeinstellung von session.upload_progress.prefix
wird unsere SESSION-Datei mit einem lästigen Präfix upload_progress_
beginnen, wie zum Beispiel: upload_progress_controlledcontentbyattacker
.
Der Trick, um das anfängliche Präfix zu entfernen, bestand darin, die Payload 3 Mal base64 zu kodieren und dann über convert.base64-decode
-Filter zu dekodieren. Dies liegt daran, dass PHP beim Base64-Dekodieren die seltsamen Zeichen entfernt, sodass nach 3 Mal nur die Payload, die vom Angreifer gesendet wurde, übrig bleibt (und dann kann der Angreifer den Anfangsteil kontrollieren).
Weitere Informationen im ursprünglichen Bericht https://blog.orange.tw/2018/10/ und dem 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 Bericht in https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
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.