第27話

 ぴ、と時計が十二時を指した。


 ブラウザの読み込みがひどく遅く感じられた。二海はページをスクロールし、WebとNetworkの問題の箇所まで移動した。


(まずは全部を見て……)


 問題のそれぞれを別タブですべて開き、二海ははしから目を通していった。検索フォームがあるもの、ログインフォームが置かれているもの、大きく地図が表示されているもの、コーヒーショップのメニューのページ。通信ログをダウンロードさせるもの、サーバーの接続情報だけ乗っているもの、何かの管理画面へのログインページが表示されているもの、ファイルのダウンロードボタンだけ置かれているもの。


 一通りを確認した二海は、それぞれの問題を解く方針を立てていった。検索フォームのやつはSQLインジェクションだろう。ログインフォームは同じくSQLインジェクションか、もしかしたらXSSか。地図とコーヒーショップは少し調べてみないとわからない。通信ログは、ソフトウェアで中身を見れば中にフラグかフラグにつながる情報が入っているだろう。サーバーの接続情報だけのものは、一回サーバーにつないでみないと手がかりもなにもない。管理画面のログインページは、一見Webと同じような手が使えそうだが、Networkのジャンルで出ているからにはまたちょっと違う解き方なのだろう。ファイルのダウンロードボタンだけのものは、素直にデータをダウンロードすると、ただの画像が一つだけだった。これは時間がかかりそうだ。


 まずはWebの一問目と二問目、それからNetworkの一問目に手をつけ、後は順番通りに解いていくことに二海は決めた。


「よし」


 二海は椅子に深く腰かけなおした。Webの一問目のページを前面に持ってきて、フォームの中にインジェクション用のコードを書き込む。


 出力された文字列をメモしたり、データベースの構造を推測したり、フラグの入っていそうなところからデータを盗むためのコードを書いたりしながら、二海は自分がだんだん落ち着いてきたのを感じた。この一ヶ月と少しで、こういう問題はたくさん解いてきたから、勝手知ったるなのだ。


 一問目のフラグは、secret_dataというテーブルの中にあった。抜き出した『ajsec_junior_{afbe317ce5e77880f0eabec008ef8fb9}』というフラグを入力すると、『おめでとう! あなたのチームは50点を獲得しました!』とメッセージが表示された。


 AJSEC Juniorには、リアルタイムで更新される得点状況を示すダッシュボードがある。それを見に行くと、『KJCC』の名前が十位のところにあった。といっても、同率十位のチームは他に十以上もいるのだが。


 二海は上からスコア表を見ていった。一位のチームは『おとうふくらぶ』、ふざけた名前なのにすでに三百点を取っている。

 下にスクロールしていって、二海はあるチームに気がついた。『四谷高校コンピューター部』百二十点で三位にいる。同じ高校生がいい位置につけているのは嬉しいが、KJCCももっと上に行かなければいけない。二海は一問目の問題のタブを消すと、すかさず二問目に取り掛かった。


 二問目のページには、IDとパスワードを入れるログインフォームが表示されていた。それ以外に手がかりになりそうなものはない。二海はデベロッパーツールを有効にしたまま、IDとパスワードに適当な値を入れて『ログイン』ボタンを押した。『ユーザー名『foo』はパスワードが間違っているか、登録されていません。再度お試しください』と赤文字で表示され、もとのログイン画面に戻った。


 ログインできるユーザー名とパスワードはなんだろう。二海はHTMLやJavaScriptのコードを調べたが、ログイン処理の部分を見てみても、そこからは何も得られなかった。


 となればまたSQLインジェクションだ、と攻撃用のSQLを入れてみる。しかし今度の問題はきっちりSQLインジェクション対策が施されているらしく、ユーザー名のところに『' or 1 = 1; --』と入れてみても、ちゃんとエスケープされて表示されてしまう。


 二海はコーヒーを飲み、チョコレートを一個口に放り込んだ。そしてそれがまだ溶けないうちに、もう一度JavaScriptを読み直した。


「んん……あ」


 JavaScriptの下の方、大量の空行の後に、今まで見ていなかった処理が書かれているのを発見した、読むと、クッキーから『login_try_count』という値を読み取り、もしそれが1000以上ならHTMLタグを新しく追加するというものだった。


(千回かあ)


 たぶん適当にログインを試していたら出てきた、ということを防止するためなのだろうが、千回は多すぎるような気がした。自分のブラウザのクッキーを確認すると、login_try_countは7になっている。二海はそれを1000に書き換え、もう一度ログインを試した。すると、『再度お試しください』の下に、『どうしてもログインできないあなたへ……こちらから管理者にフィードバックを送信してください』というメッセージと、『フィードバック』とタイトルのついたフォームが現れた。


 『管理者にフィードバックを送信してください』ということはイコール、『ここに入力したものを管理者が見ますよ』ということだ。となれば、ここに管理者に対して攻撃できるような値を入れて送信してしまえばいい。XSSインジェクションだ。


 二海は桃のまとめページを開き、『RequestCollector』にアクセスした。このサービスではURLを発行することができ、URLにリクエストがきたらその内容を確認することもできる。二海はこのRequestCollectorで新しくURLをつくり、そのURLに対してクッキーを送るようなスクリプトを『フィードバック』に入れて送信した。そして『RequestCollector』の画面を開いて待っていると、しばらくしてからリクエストが送られてきた。


 リクエストに含まれているクッキーの、『session』という項目から『e1a668e75c2dbd8f21c06627a313b9d952e9adf0』という長い文字列を取り出す。ログイン画面のタブを開き、自分のクッキーを編集して同じ『session』をセットする。それからブラウザをリロードすると、『Welcome Administrator!』と表示されている管理画面にアクセスすることができた。ご丁寧に『FLAG』というリンクがでかでかと表示されていた。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る