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

38 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/)では、レースコンディションを悪用するには不十分で、読み込まれるコンテンツも`@<?php`という文字列で始まる必要がありました。
`session.upload_progress.prefix`のデフォルト設定により、**SESSIONファイルは煩わしいプレフィックス**`upload_progress_`で始まります。例えば:`upload_progress_controlledcontentbyattacker`
**初期プレフィックスを削除する**トリックは、**ペイロードを3回base64エンコード**し、その後`convert.base64-decode`フィルターを介してデコードすることです。これは、**base64デコード時にPHPが奇妙な文字を削除するため**です。したがって、3回後には**攻撃者によって送信された****ペイロード**のみが**残ります**(その後、攻撃者は初期部分を制御できます)。
詳細はオリジナルの解説にあります[https://blog.orange.tw/2018/10/](https://blog.orange.tw/2018/10/)と最終的なエクスプロイト[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)\
別の解説は[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}}