mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
38 lines
3.2 KiB
Markdown
38 lines
3.2 KiB
Markdown
# 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}}
|