LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Reading time: 5 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

セッションがない場合でも、Local File Inclusionを見つけた場合、session.auto_startOffであっても、session.upload_progress.enabledOnであり、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.cleanupOffに設定することを推奨していますが、PHPのデフォルトのsession.upload_progress.cleanupは依然としてOnです。これは、セッション内のアップロード進行状況ができるだけ早くクリーンアップされることを意味します。したがって、これはレースコンディションになります。

CTF

この技術がコメントされたオリジナルのCTFでは、レースコンディションを悪用するには不十分で、読み込まれるコンテンツも@<?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://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/にあります。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする