Hello there, ('ω')ノ
目的:
シリアライズされたセッション情報を改ざんし、管理者権限を取得。その後、carlos
ユーザーを削除することでラボを完了させます。
🛠️ 初期準備
- ログイン情報:
wiener:peter
- 使用ツール:Burp Suite(ProfessionalでもCommunityでも可)
ステップ1:ログインしてセッション確認
wiener:peter
でログインします。GET /my‑account
のリクエストをBurpでキャプチャ。- Cookieヘッダー内にあるセッション情報(Base64+URLエンコードされた文字列)をBurpのInspectorで展開します。
ステップ2:シリアライズされたPHPオブジェクトを読み解く
- デコードされたセッション文字列を見てみると、PHPのオブジェクト形式になっていることが分かります:
O:4:"User":...{...s:5:"admin";b:0;...}
admin
属性がb:0
(false = 管理者ではないことを示す)であることを確認。
ステップ3:オブジェクト改ざん
- 該当リクエストをBurp Repeaterに送信します。
- Inspector で
admin
の値をb:1
に書き換え(true にする)。 - Apply changes を押せば、Burpが自動で再シリアライズ&再エンコードしてくれます。
- この状態でリクエストを送信。
ステップ4:管理者ページにアクセス
- 応答に
/admin
へのリンクが現れ、管理者としてアクセス可能になっていることが確認できます。 GET /admin
を実行し、ユーザー一覧が表示されるかチェック。
ステップ5:carlos のアカウント削除
GET /admin/delete?username=carlos
を送信。- 成功すれば「carlos ユーザーの削除」が完了し、ラボも解決です。
✏️ まとめ(ブログ用タイトル付き)
タイトル:LAB: PHPシリアライズオブジェクトの改ざんによる権限昇格
- ログインしてセッションCookieを取得
- BurpのInspectorでPHPオブジェクトを復元し、admin属性を確認
- Burp Repeaterでadmin属性を
b:0 → b:1
に書き換え - 管理者パネル(/admin)へのアクセスを確認
/admin/delete?username=carlos
を使って carlos を削除
Best regards, (^^ゞ