hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md

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
{% endhint %}

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
{% endhint %}