【Hacker101 CTF】 Postbook解説 パラメータタンパリングによる初歩的なセッションハイジャック

【注意】本記事にはHacker101 CTF Postbookの解答に係る要素が多分に含まれています。当該CTFを独力で解きたい方は、後ほど参照することをお勧めします。
Hacker101はセキュリティに関する無料のコースを提供しているサイトであり、バグバウンティのプラットフォームであるHackerOneにより運営されています。Hacker101 CTFはHacker101で提供されているコンテンツの一つです。本記事ではHacker101 CTFで出題されているPostbookを解説します。

Postbookの概要

Postbookは、Twitterに似た短文を投稿できるWebサイトを題材にしたCTFです。既存ユーザーとしてはuserとadminの2人のユーザーが確認できます。プレイヤー自身も任意のユーザーを作成して短文を投稿できます。

FLAG0 単純なパスワード

既存ユーザーであるuserにはごく単純なパスワード’password’が設定されています。ユーザー名’user’、パスワード’password’でサインインすると、ログインができてしまいます。ログイン後、Homeページで以下のようにFLAGが確認できます。

FLAG1 クエリ文字列のWeb Parameter Tampering

サイト上の投稿を表示する際、index.phpというPHPスクリプトが利用されており、このときクエリ文字列にはpage=view.phpとid=’投稿id’の2ペアが与えられています。既存の投稿idはHomeページで確認できる限り1と3が存在しています。欠落している2を使ってクエリ文字列を作成し、?page=view.php&id=2にアクセスするとFLAGが確認できます。

FLAG2 hiddenフィールドのWeb Parameter Tampering

短文の投稿フォームにはhiddenフィールドが設定されており、returnとuser_idの2つのフィールドが存在します。このuser_idの値を書き換えると、他のユーザーの投稿として投稿が行えてしまいます。実際に他のユーザーになりすまして投稿すると、HomeページにFLAGが表示されます。なお、以下の画像ではBurpの機能を使用してhiddenフィールドを表示させています。

FLAG3 クエリ文字列のWeb Parameter Tamperingその2

FLAG1と同様のケースです。クエリ文字列内の投稿idの値を総当りで大きくしていくと、id=945のときFLAGが確認できます。

FLAG4 クエリ文字列のWeb Parameter Tamperingその3

Postbookのユーザーは自分の投稿を編集することができます。全体で5番目の投稿を編集しようとするとき、PHPスクリプトに与えられるクエリ文字列は?page=edit.php&id=5となります。この5を別の投稿の値で置き換えると、他のユーザーの投稿を編集できてしまいます。実際に他のユーザーの投稿を編集するとFLAGが表示されます。以下の画像ではユーザーadminの最初の投稿を編集しました。

FLAG5 CookieのWeb Parameter Tampering

Postbookでは、Cookieヘッダーにidという名前のクッキーがセットされており、この値はたとえ再サインイン後であっても毎回同じ値が設定されます。また、プレイヤーが作成する最初のユーザーのクッキー値は必ずid=eccbc87e4b5ce2fe28308fd9f2a7baf3になります。この値はMD5が生成するハッシュ値を表現しており、N番目に作成されたユーザーのクッキーの値はNのMD5ハッシュ値になります。以下のようにmd5sumコマンドを使用すると、実際にクッキーの値がハッシュ値と一致することを確認できます。1のMD5ハッシュ値でクッキーの値を置き換えるとadminとしてサインインでき、その後HomeページでFLAGが確認できます。

$ echo -n 3 | md5sum
eccbc87e4b5ce2fe28308fd9f2a7baf3  -
$ echo -n 1 | md5sum
c4ca4238a0b923820dcc509a6f75849b  -

FLAG6 クエリ文字列のWeb Parameter Tamperingその4

FLAG5と似たケースです。前述のように、各ユーザーは自分の投稿を編集することができるほか、削除することもできます。全体で5番目の投稿を削除しようとするとき、PHPスクリプトに与えられるクエリ文字列は?page=delete.php&id=e4da3b7fbbce2345d7772b0674a318d5となります。このidの値は、5のMD5ハッシュ値です。この値を1のMD5ハッシュ値に置き換えると、自分の投稿であるかどうかにかかわらず、全体で1番目の投稿を削除できてしまいます。削除後、HomeページにFLAGが表示されます。以下の画像ではadminの最初の投稿を削除しました。

関連記事

他のHacker101 CTFの記事も併せてどうぞ。

参考リンク

Share - この記事をシェアする

「【Hacker101 CTF】 Postbook解説 パラメータタンパリングによる初歩的なセッションハイジャック」への2件のフィードバック

コメントは受け付けていません。