フルスタックエンジニアへの道

「フルスタックエンジニアになりたい。。。いや、なってやる!」という備忘録

8946 Take#11

今回は「http://www.hackerschool.jp/hack/」の正答率が11番目に高い(2019/08/07現在)「Take#11」を解いていきたいと思います。

http://www.hackerschool.jp/hack/www.hackerschool.jp

環境

Take#11

Take#11にアクセスすると、下図のような「id」と「パスワード」を入力するフォームがあるページが出てくると思います。今回は、このidとパスワードを入手しなければならないようですね。

f:id:ryasshi:20190807141722p:plain

このページにアクセスして他の問題とは違う部分に気付けたでしょうか?
ブラウザ上部にある「URL」に注目してみてください。

f:id:ryasshi:20190807142003p:plain

index.phpというファイルの後に「?file=index.html」という文字列があります。
この部分がどういった意味を表しているかわからない人は、一度「URL クエスチョン」などでググってみましょう!
細かい内容などはググってみるとわかると思うので、簡単に説明すると、これは「クエリストリング(URLパラメーター)」と呼ばれるもので、「変数=値」の形でサーバに情報を渡したい時などに使用します。
直感ではありますが、変数名が「file」で値が「index.html」とあることから、サーバが、値として渡された名前のファイルを利用して何かしていると推測されます。
一度値を適当な文字列にしてリクエストしてみましょう。「index.html」を消して「tekitou」と入力(どんな文字でもOK)し、Enterを押下します。

f:id:ryasshi:20190807143019p:plain

すると、なにやらエラーのような文字列が画面上部に表示されました。

f:id:ryasshi:20190807143210p:plain

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)でアクセスしてみましょう。

f:id:ryasshi:20190807144419p:plain

答えの「id」と「パスワード」が表示されるはずです。

f:id:ryasshi:20190807144718p:plain

これを使って突破します!

f:id:ryasshi:20190807144912p:plain

突破できました。
あとは、解説を読んで終了です。

f:id:ryasshi:20190807144934p:plain


参考:
http://www.hackerschool.jp/hack/
https://www.php.net/manual/ja/function.readfile.php