8割解けるCTF「WEST-SEC」

セキュリティ初心者の方でも楽しめるゲーム形式のセキュリティイベント

HTTP

1.HTTPの基本

(1)HTTPリクエストのメッセージ構成

以下の構成になっています。

項目 概要
リクエスト・ライン POSTやGETなどのメソッドを記載
ヘッダ Gookieなどはここに記載
  (空白行)
メッセージ・ボディー POST時にはパラメータ(例:userid=user1)が記載されるが、GETのときは特になし

以下に詳細の解説があります。
https://xtech.nikkei.com/it/article/COLUMN/20080516/302045/

1.Cookieによるセッション管理

(1)Cookieの概要

❶Cookieについて
Cookieについては以下に詳しく説明されています。
https://qiita.com/7968/items/ce03feb17c8eaa6e4672

❷Cookieの確認
Cookieはファイルの保存する場合と、メモリに保存する場合があります。今回のようなセッション管理の場合、メモリに保存されるだけなので、ブラウザやファイルなどには保存されません。F12を押してデベロッパーツールで確認するか、Wiresharkでパケットキャプチャをして確認しましょう。

❸Cookieの削除
ブラウザを閉じると、消えると思います。
ファイルに保存されている場合、Chromeの場合、右上の3点のマークから、「設定」「プライバシーとセキュリティ」「閲覧履歴データの削除」「Cookieと他のサイトデータ」

(2)セッション管理の仕組み

以下にサンプルプログラムがあるので、動かしてみましょう。
https://codelikes.com/php-session/

上記のサンプルプログラムで、順番に動作させてみましょう。
Wiresharkでパケットをキャプチャすることをお勧めします。※必要に応じて、「新しいシークレットウィンドウ」で開くと、Cookieが真っ新なページを開くことができます。
❶login.html に接続 
HTTPリクエストにCookieが無いことを確認します。

❷user1でログインします。
ユーザ名は何でもいいのですが、user1、パスワードはpassとしました。
ログインすると、home.phpにリダイレクト(302)されます。このとき、Set-Cookieにて、セッションとなるPHPSESSIDが払い出されます。

❸home.phpに接続
利用者のブラウザは、home.phpに接続するのですが、このとき、Cookieによるセッション情報を保持します。
 HTTPリクエストヘッダに、CookieとしてPHPSESSIDが記載されていることが確認できます。

皆さんも試してみてください。

(3)上記のプログラムで、いろいろやってみよう

ブラウザで、Cookieを確認しましょう。F12を押して開発者ツールを起動します。アプリケーションタブ(英語の場合はapplicationと表示)で、先ほどのCookieの値が確認できることでしょう。

❶Cookieを削除しましょう。
開発者ツールでは、Cookieを書き換えることができます。違う値に書き換えて、F5でページをリロードしてみましょう。「○○さん、」の部分はどうなりましたか?
❷Cookieを他のセッションに変えてみましょう
ブラウザを立ち上げ、別のユーザであるuser2を作成してみましょう。そのユーザのCookieを確認し、先ほどのCookieのセッションIDに書き換えてみましょう。
セッションを乗っ取り、user2を表示することができましたか?
❸どこでセッションを管理しているか
セッション情報は、サーバのどこで管理されているか、ファイルのありかを探すと、/var/lib/php/sessionであることがわかります。 
そこで先ほどのセッションIDのファイルを開くと、user1という情報が確認できます。
※chmod o+x+r -R /var/lib/php/session/で権限付与しています。

# grep -r "session.save_path" /*
/etc/httpd/conf.d/php.conf:php_value session.save_path    "/var/lib/php/session"

# pwd
/var/lib/php/session
# cat sess_8ein46cifsqgegft4hhscvb687
userId|s:5:"user1";count|i:0