mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
38 lines
3.0 KiB
Markdown
38 lines
3.0 KiB
Markdown
# LFI2RCE über PHP_SESSION_UPLOAD_PROGRESS
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## 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**.
|
|
```bash
|
|
$ 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**](https://blog.orange.tw/2018/10/), 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/](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](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/](https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|