■
はじめに
初めまして、Wa1m3imです。 筆者はバグハンターに憧れている情報系の専門学生です。 この記事は、バグハンターに憧れた筆者がバグハンターになるためにはどう言ったことが必要なのかを自分なりに考えたり、実際にバグハントを行なっている人に質問したことを元に行動に移したことをブログとして書き残したいと思っています。 内容に誤りがありましたらDMにてご連絡いただけると幸いです。
Hack This Site!
筆者はまずバグハンターになるにはどのような技術が必要なのか様々なブログを読んだり、実際にバグハンターに聞いてみたりしました。 その回答の中で、最も多かった答えが「実際に検証すること」でした。「習うより慣れろ」ってことですね。 とういうことで実際に自分で環境を立てることももちろん大切だと思っているのですが、今回はもともと脆弱性が含まれているサイトを見つけたのでそれを取り組んでみました。 それが、Hack This Site!です。 このサイトはWebに関する脆弱性が多くあるのでとても多いことや、話に流れがあることからとても取り組みやすかったです。
今日はこのサイトの基本的な問題であるBasicMissionについてのライトアップを書きたいと思います。 ちなみにこのサイトの製作者はFireFoxでの動作確認はしているようなので何か不具合があった場合にはブラウザを切り替えるといいのかもしれないですね。
Basic Mission
Basic 1
HTMLのスキルが必要とされるようですね。
とりあえず困ったら開発者ツールを開くのが一番ですよね。 このページのHTMLをみてみてワード検索で「pass」と検索した答えが出てきました。
Basic 2
こちらは常識が必要らしいのですが、筆者には常識が足りなかったので少し手こずりました。
サム君はパスワードファイルのアップロードを忘れてしまったらしいですね。 なんてお茶目なミスでしょう.... 筆者は何をしていいのかわからなく、開発者ツールを色々いじっていたわけですが適当に何も入れずにsubmitボタンを押したら当たっていました。 パスワードファイルをアップロードしていないならばパスワードがないのは当たり前なのですが深く考えすぎたみたいです。
Basic3
またもやHTMLのみの知識が求められるようです。
サム君はパスワードファイルをアップロードした様なのですが、他にもっと大きな問題がある様です。
パスワードのサブミットボタンのHTMLを見てみると、inputタグのvalueの値がpassword.phpとなっていました。 もしやと思いながらpassword.phpにアクセスしてみると普通にアクセス出来てしまいました。 アクセス制御の不備ですね。
Basic4
この問題はHTMLの知識とemailアドレスが必要なようです。
サム君はパスワードを忘れた時用にメールアドレスにパスワードを送ってくれるような機能を作ったみたいです。 今回もHTMLを見て見てると、サム君の作っていた機能のinputタグのvalueにメールアドレスが生で書いてありました。 これを任意のメールアドレスに書き換える事によってパスワードを盗むことができるみたいですね。
試しに自分のメールアドレスにHTMLを書き換えてsubmitボタンを押したところサム君からメールが届きました。
Basic5
次はHTMLの他にもJSかFFの知識が必要になるみたいです。
しかし、先ほどと同じようにHTMLのinputタグの値を書き換えたら上手く行ってしまいました。 なぜjsの知識を今問われたかは少し謎です。
Basic6
次は暗号に関する知識を必要としているようです。
暗号化した後の文章が乗っていてそれを復号してパスワードを出す形式ですね。
最初に「AAAAAA」を入力して暗号化してました。
結果は「ABCDEF」が返ってきました。 次に「12345」と入力値を与えると
そうすると「13579」という結果が返ってきました。 よってこの暗号はn文字目をn-1個文字ずらすようです。
この法則に従って与えられた文字列を戻していくと正解することが出来ました。
Basic7
次はUNIXのコマンドの知識が必要なようです。 viewと入力するとカレンダーのみが表示されるプログラムのようです。
UNIXのコマンドでは最後に&&を付けることで続けて&&以降に指定したコマンドを実行することが出来るため 入力欄に
&& ls
と入力した結果カレンダーの後に現在のディレクトリの中身をみることが出来ました。 出力された怪しいphpファイルにアクセスするとパスワードを獲得することが出来ました。
Basic8
この問題ではSSIの知識が必要となるようです。 今回SSIという単語を初めて聞いたので少し調べたのですが、HTMLに動きをつけるために使われていたようですね。 SSI injectionもあるようなのでこの記事とは別にまとめて書きたいと思います。
とりあえず筆者の名前を入れてみると自分の名前とその文字数が出力されました。
SSIについての知識が必要とのことなのでSSIの脆弱性について調べているとなんとSSIはOSコマンドも実行することが可能なようなので、SSI injectionについて書いてあった記事のペイロードをそのまま投げて見たところ
<!--#exec cmd="cat /etc/passwd" -->
SSI injectionを使うのはいいけど、コマンドは制限しているようです(そりゃそうだ)
なので今度はこのようなペイロードを投げてみた。
<!--#exec cmd="ls" -->
その結果はこのようにディレクトリの中身をみることが出来た。 しかし、パスワードを書いてあるPHPファイルは見当たりませんでした。
階層が違うと思ったのでコマンドを少し変えて見ました。
<!--#exec cmd="ls .." -->
その結果怪しいファイルを見つけたのでアクセスして見たところ無事パスワードを手に入れることが出来た。
Basic9
この問題はSSIとディレクトリの階層について理解していなければいけないらしい。
問題文が書いてあるところを見ても何も出来そうなことがないのでダメもとで先ほどのBasic8の入力フォームに
<!--#exec cmd="ls ../../9" -->
と入力した結果先Basic9のディレクトリをみることが出来ました。
怪しいPHPファイルがあったのでアクセスしたところパスワードを獲得することが出来ました。
Basic10
なんとかしてJavaScriptを回避すればいいようです。
何も入力せずにsubmitボタンを押すとnot authorizedと表示されました。
開発者ツールを色々試して見てもさっぱりだったのでアプローチの仕方を変えてみるべく「Burp suite」を使って通信を見てみる事にしました。
cookieの値に見慣れない「level10_authorized=no」という値があった。 これの値を「level10_authorized=yes」に変えてリクエストを送ったところレベルクリアをすることが出来た。
Basic11
残念ながらこの問題は筆者の実力では解くことが出来なかった。 Writeupを読んでみたものの自分で実際に手を動かすと途中までは上手くいくのですが
「.htaccess」にアクセスしようとしたらNotFoundが出てしまいました。
なのでライトアップどうりには解くことが出来ませんでした。
おわりに
筆者はここ1週間インフルエンザに感染してなかなか記事が書けませんでした。 Basic11が解けなかったのは悔しいです。 今回は初めの記事ということでライトアップの記事を書いたのですが、色々検証の記事をこれから書いていきたいと思っています。
これからもバグを見つけれるようになる為、日々精進していきたいと思います。