5.3 KiB
LFI2RCE über PHP_SESSION_UPLOAD_PROGRESS
{% hint style="success" %}
Lernen Sie und üben Sie AWS-Hacking: HackTricks Training AWS Red Team Expert (ARTE)
Lernen Sie und ü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 Repositories einreichen.
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 An
steht und Sie die PHP_SESSION_UPLOAD_PROGRESS
in den 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 kontrollieren können. Wenn Sie Ihre Sitzungsdatei einbinden, können Sie einen von Ihnen kontrollierten Teil einfügen (zum Beispiel einen PHP-Shellcode).
{% hint style="info" %}
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. Dies führt zu einem Race Condition.
{% endhint %}
Das CTF
Im ursprünglichen CTF, in dem diese Technik kommentiert wurde, reichte es nicht aus, den 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 z.B.: upload_progress_controlledcontentbyattacker
Der Trick, um das anfängliche Präfix zu entfernen, bestand darin, das Nutzlast 3 Mal in Base64 zu codieren und dann über die Filter convert.base64-decode
zu decodieren. Dies liegt daran, dass beim Base64-Decodieren PHP die seltsamen Zeichen entfernen wird, sodass nach 3 Mal nur die vom Angreifer gesendete Nutzlast übrig bleibt (und dann kann der Angreifer den anfänglichen Teil kontrollieren).
Weitere Informationen im ursprünglichen Write-up 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 weiteres Write-up unter https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
{% hint style="success" %}
Lernen Sie & üben Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen Sie & ü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-Repositories einreichen.