8946 Take#11
今回は「http://www.hackerschool.jp/hack/」の正答率が11番目に高い(2019/08/07現在)「Take#11」を解いていきたいと思います。
http://www.hackerschool.jp/hack/www.hackerschool.jp
環境
- Windows10
- Google Chrome
Take#11
Take#11にアクセスすると、下図のような「id」と「パスワード」を入力するフォームがあるページが出てくると思います。今回は、このidとパスワードを入手しなければならないようですね。
このページにアクセスして他の問題とは違う部分に気付けたでしょうか?
ブラウザ上部にある「URL」に注目してみてください。
index.phpというファイルの後に「?file=index.html」という文字列があります。
この部分がどういった意味を表しているかわからない人は、一度「URL クエスチョン」などでググってみましょう!
細かい内容などはググってみるとわかると思うので、簡単に説明すると、これは「クエリストリング(URLパラメーター)」と呼ばれるもので、「変数=値」の形でサーバに情報を渡したい時などに使用します。
直感ではありますが、変数名が「file」で値が「index.html」とあることから、サーバが、値として渡された名前のファイルを利用して何かしていると推測されます。
一度値を適当な文字列にしてリクエストしてみましょう。「index.html」を消して「tekitou」と入力(どんな文字でもOK)し、Enterを押下します。
すると、なにやらエラーのような文字列が画面上部に表示されました。
Warning: readfile(tekitou) [function.readfile]: failed to open stream: No such file or directory in C: mpp\htdocs\hackerschool\hack-ltest ake11\index.php on line 52
私が入力した「tekitou」という文字列が使われているreadfile(tekitou)
という箇所があります。
どうやらPHPには「readfile()」という関数があり、「指定したファイルを出力する」ことができるようです。
今回でいうとreadfile(tekitou)
で「tekitou」という名前のファイルを出力しようとしたのです。しかし、No such file or directory
と書かれているように、「そのようなファイルはない」ようです。
ということは、存在するファイルを指定すれば表示される可能性があるということになるので、パスワードが書かれたファイルがあれば答えがわかります!
となったのですが、肝心のファイル名がわからないので、ファイル名を得るべく数回間違えてヒントを出してください。笑(※ログインしていない場合はヒントは出ません)
ヒントで表示されたファイル名(password.txt)でアクセスしてみましょう。
答えの「id」と「パスワード」が表示されるはずです。
これを使って突破します!
突破できました。
あとは、解説を読んで終了です。
参考:
http://www.hackerschool.jp/hack/
https://www.php.net/manual/ja/function.readfile.php