HackTheBox Machineへのアプローチ
常設なのでWriteupが書けない上に既にそこらに転がってるので、代わりにいくつかのMachineを解いて学んだ侵入のアプローチの方法を書くことにした。
情報収集
HackTheBoxのMachineはひとつのサーバだけで完結するのでネットワークの調査とかは必要ないので、与えられたIPの情報を集めることになる。
ポートスキャン
最初はIPしか与えられてないので、nmapなどでポートスキャンをする。
最初は全てのポートをスキャンせずによく使われるポートだけをスキャンしてどんなサービスが動いてるか調べる。
そこで発見したサービスについて調べている間に全てのポートをスキャンするのがよさそう。
開いているポートの調査
ほとんどの場合sshとWebサービスが動いているポートがある。
次はそこで動いているのがどのようなものなのかを調査する。
Webサービスだと、既存のソフトウェア(Apache, GitLab, Mattermost, WordPressなど)がそのまま動いていることもあれば、オリジナルのWebサービスの後ろでnmap、imagemagickなどのコマンドを動かしていることもある。それらのサービスの機能を使ってみてどのような働きや出力をするのか観察する。通常通りではない挙動(エラーメッセージなど)はより詳細な情報を得るためのヒントになることがある。
同じIPでもバーチャルホストでgit.example.comとexample.comではアクセスするサービスが違うみたいなことがあるので、サブドメインが異なるリンクなどを見つけたら/etc/hostsなどに設定して、そのURLで接続してみるといい。ワードリストを使ってgobusterなどで発見できることもある。
また、Webサービスならdirbとかを使って公開されるべきではない情報が公開されていないかをチェックしてみる。テスト環境やWordPressのディレクトリで認証情報が見つかることもある。サービスの中で公開されている内容から、他のコンテンツの情報が推測できる場合がある(サブドメインだったりファイル名だったりバックアップだったり)。
ソフトウェアのバージョン情報が得られたならそれをもとにCVEを探す。特に任意コード実行と任意ファイル読み込み、書き込みが侵入に使えることが多い。バージョンが特定できなくてもRCEなどがあれば試してみると刺さるかもしれないので試してみよう、新しめの脆弱性があることがほとんどだった。
Exploitation
情報収集で得た情報を元に、侵入できそうなポイントを探し侵入する。
情報収集の段階で何らかの認証情報(DBとかWebサービスとかの)を得られたなら、それをログインに使えないかを試す。デフォルトパスワードが使えることもある。パスワードの使い回しはHackTheBoxではかなりよくある。
RCEなどが発見できているのならそれを試す。Reverse ShellがうまくいかないならBind Shell、それでもうまくいかないならsshの鍵を書き込んで追加するなど、色々やってみる。
Post Exploitation
HackTheBoxのMachineなら、最初はroot権限のないアカウントで侵入してフラグを手にいれ、そこからrootへの権限昇格を狙う流れになる。
権限昇格のための情報収集からやることになる。自分の場合だと、linpeas.shのようなスキャナーを使って、仮想マシン環境の検知や権限設定の不備などを調査し、脆弱性を探す。よくあるパターンでは、どこかの設定ファイルに書いてある認証情報がrootの使い回しであったり、sudo -l
で見つかるパスワードなしでroot権限で実行できるプログラムに脆弱性があったりする。HackTheBoxだと通常VMWare上で動いているっぽいが、ときどきDocker上で動かされていてDockerのコンテナからescapeするようなMachineもある。DBが動いているMachineでは、DBの認証情報やDBに格納されているハッシュを使って権限が上のユーザにアクセスできることがある。