徳丸様、初めまして。
電子版第一版を読んで勉強させて頂いております。ありがとうございます。
「4.13.1 ファイルインクルード攻撃」のセッション保存ファイル悪用について、攻撃を再現するために少しサーバ設定の変更が必要だったのでご報告させていただきます。
Docker版 Ver 1.1.1をダウンロードして実習環境を立てています。
(関係ないかと思いますが、Dockerホストは WSL2 Ubuntu 22.04.5です)。
4d-002.htmlから送信ボタンを押して4d-003.phpに遷移した際、表示されるファイル名と攻撃リンクの href が "/sess_{セッションID}" という文字列になります。実際にはセッションファイルがルートディレクトリ直下に無いので、 攻撃リンク先に飛ぶとNo such file or directoryエラーが出ます。
原因として私の理解では、以下のような状態だと思います。
- apacheサーバの php.ini でセッション保存先が指定されていない
- ;session.save_path = "/tmp" 行がコメントアウト
- そのため、デフォルト値としてOSの /tmp フォルダが使われる
- デフォルト値が使われる場合、 PHPの session_save_path() 関数は空文字列を返す
そこで、apacheサーバの php.ini 43行目 (session.save_path = "/tmp") のコメントを外して設定を明示化すると、session_save_path() の返り値が "/tmp"になるので攻撃リンクが正しく働きました。
正しい設定があえてコメントとして書かれているので、もしかするとこの現象を把握された上で何らかの理由で残されている・または最新の版では記述が修正されているのかもしれませんが、その場合はご放念ください。
以上、ご確認いただけると幸いです。よろしくお願いいたします。