Shikata Ga Nai

Private? There is no such things.

LAB: PHPオブジェクト改ざんによる昇格

Hello there, ('ω')ノ

目的: シリアライズされたセッション情報を改ざんし、管理者権限を取得。その後、carlosユーザーを削除することでラボを完了させます。


🛠️ 初期準備

  • ログイン情報:wiener:peter
  • 使用ツール:Burp Suite(ProfessionalでもCommunityでも可)

ステップ1:ログインしてセッション確認

  1. wiener:peterでログインします。
  2. GET /my‑account のリクエストをBurpでキャプチャ。
  3. Cookieヘッダー内にあるセッション情報(Base64+URLエンコードされた文字列)をBurpのInspectorで展開します。

ステップ2:シリアライズされたPHPオブジェクトを読み解く

  • デコードされたセッション文字列を見てみると、PHPのオブジェクト形式になっていることが分かります:
  O:4:"User":...{...s:5:"admin";b:0;...}
  • admin属性が b:0(false = 管理者ではないことを示す)であることを確認。

ステップ3:オブジェクト改ざん

  1. 該当リクエストをBurp Repeaterに送信します。
  2. Inspector で admin の値を b:1 に書き換え(true にする)。
  3. Apply changes を押せば、Burpが自動で再シリアライズ&再エンコードしてくれます。
  4. この状態でリクエストを送信。

ステップ4:管理者ページにアクセス

  • 応答に /admin へのリンクが現れ、管理者としてアクセス可能になっていることが確認できます。
  • GET /admin を実行し、ユーザー一覧が表示されるかチェック。

ステップ5:carlos のアカウント削除

  • GET /admin/delete?username=carlos を送信。
  • 成功すれば「carlos ユーザーの削除」が完了し、ラボも解決です。

✏️ まとめ(ブログ用タイトル付き)

タイトル:LAB: PHPシリアライズオブジェクトの改ざんによる権限昇格

  1. ログインしてセッションCookieを取得
  2. BurpのInspectorでPHPオブジェクトを復元し、admin属性を確認
  3. Burp Repeaterでadmin属性を b:0 → b:1 に書き換え
  4. 管理者パネル(/admin)へのアクセスを確認
  5. /admin/delete?username=carlos を使って carlos を削除

Best regards, (^^ゞ