脆弱性ハンティングで見えてきた、Webアプリの意外な穴


概要

脆弱性ハンティングって、本当に予想外のところに穴があるんですよね。今回たまたま見つけたサブドメインから広がった調査で、Webアプリの盲点が見えてきました。 要点のまとめ:

  • テストアカウント準備中に偶然発見したサブドメインから、思わぬ管理画面(/admin)に辿り着いた経緯。ホバー操作の重要性を再認識した事例
  • 「ラルフ」ユーザーの存在を手掛かりにパスワード推測を試みたものの、単語リスト選定の甘さが壁に。攻撃シナリオ設計時のリスト精査が必要だと気づかされた
  • 表面上目立つ脆弱性がない場合でも、/adminのような隠れたエンドポイントを見逃さない観察力が、脆弱性ハンティングの肝だと実感した調査記録
些細な操作の積み重ねが、思いがけないセキュリティホールを暴き出す瞬間。

【HackTheBox-Heal(WriteUp)】
やっと戻ってきた感じ、結構長めに仕事に追われていたっぽい。久々にまた手を動かしてみようという気になった。スキルアップの時間、という雰囲気かな。HackTheBoxからまた一つ題材を選んでみたけど、まあ楽しめるといいなと思う。いこうか。

最初に答えが載ってて、その下に説明がある形式で進んでいく予定だけど、前みたいなコピペ防止策も健在。理解してから自分の手で入力しないと学べないって考え方。

## 調査フェーズ

あまり目新しいものは無かったような……いつもの定番ポートが二つほど開いているだけだった印象。番号は思い出せそうで思い出せないけれど、SSH系とウェブ系かな。

hostsファイルへの追加は忘れずに。でもここも特別変わったことは見当たらなかったと思う。

何となくNode.jsが裏側で動いているっぽいページ表示。ただのトップページっぽさもある。

アカウント登録機能が用意されていたので、それ経由でもうちょっと中身を探れるようになりそうだな、と小さく期待した記憶がある。内部ユーザーポータル的なのを色々調べ始める流れになるかもしれない——まあ、この時点では確信までは無かったけどね。

テストアカウントを準備しようと、何やら調べ始めた。「TAKE THE SURVEY」ボタンをホバーしたら、別のサブドメインが見つかった。これもホストファイルに追加しておこう。

クリックしてみると、いくつかの質問ページに遷移。そこからさらに調査を進める。ホームページをのぞいてみたら、面白いものを発見。「ラルフ」という名前のユーザーっぽい。

いくつかのページを探索。特に目立つものはなし。でも、「/admin」ページが気になる。同時並行で調査しながら、ラルフのパスワードを推測してみたけど、うまくいかず。

最初は重要な手がかりかと思ったけど、使った単語リストが適切じゃなかったのかもしれない。まあ、いわゆる「たぶん違う道」みたいな感じ。
視点の拡張比較:
発見詳細重要性
ポートスキャン22番と80番ポートが開いている基本的なサービスの確認に有用
アカウント登録機能内部ログインポータルの探索が可能セキュリティホールの特定に役立つ
ralphユーザー名の発見特定のユーザーに関連する情報収集ができるかもしれないブルートフォース攻撃やLFI試行に繋がる可能性
/adminパスへのアクセス試行管理者ページへアクセスする手段を探ることができる権限昇格や重要データへのアクセスにつながるかもしれない
エクスポートボタンの調査ファイルダウンロードによるリモートコード実行(RCE)の可能性を確認した脆弱性を利用した攻撃シナリオ構築に貢献

定番のポートスキャンから始める基本的な列挙作業

サブドメインのファジングをしていると、また新しいやつが出てきた。まあ、追加しなきゃいけないんだろうな、と。下の方にバージョンっぽいものもちらっと見えた気がするけど、正確な数字は覚えてない。何か使える脆弱性があるか探してみたものの、今のところ手応えなし。

履歴書作成サービス?あれもう一回調べ直したほうがいいかなって思ってログインし直すことにしたんだけど、どうも最後の方にエクスポートボタンみたいなのがあったんだよね。それでちょっと色々試してみることになった。RCEとかワンチャンあるか?なんて期待しつつ。

そしたらファイル自体は普通にダウンロードできちゃってさ。BurpSuiteでちょこちょこ見てたら、エクスポート後にリダイレクトされて、そのまま取得になる感じだった。しかも、そのダウンロードには「api」サブドメイン経由してるっぽい。本当にRuby on Rails動いてる理由、それだったのかな…とぼんやり考えてしまった。

まず利用可能なメソッドを確認してから最終的にはGETで落としてくる流れになってて。それ見ていたらふと思いついた——LFI攻撃試せばどうなるんだろう、と。でもまあ、このへん記憶曖昧で細かい部分は忘れてしまった気がするけど、多分そんな感じだったと思う。

おっと、パスワードファイルに侵入してみたら、まあ、うまくいったみたい!ユーザー名をいくつか入手。たぶん今は『www-data』になってるんだろう。ラルフとロンの秘密のSSHキーにLFI(ローカルファイルインクルージョン)で侵入しようとしたけど、さすがにうまくいかなかった。

次は何ができるか考えないと。そう、これはRuby on Railsアプリケーションだし。普段はLFIの時、ディレクトリ構造を把握するのが常套手段。認証情報や設定ファイルをダンプできるかもしれない。

調べてみたら、どうやらこの『app』ディレクトリがウェブルートのパスっぽい。『config』ディレクトリが怪しげで興味深い。『download』ページから二段階遡って、ウェブサーバーのパスにあるconfigディレクトリにアクセスできるかも。

おお、完璧に動いた!デフォルトのディレクトリ構造みたいだ。プロダクションキーが気になるなぁ…

サブドメイン調査中に見つけた謎のアンケートページ

さて、中身を見ようとしたんだけど……うーん、ファイルが見つからないみたい。あれ?もうちょっと見てみるべきかも。さっきのディレクトリ構成図にマークされてた他のやつも調べてみようと思ったけど、どうも手応えがないね。いくつか開いてみたけど、特に目立ったものはなかった気がする。正直言って、「あれ?」って感じで終わることも多い。

でもまあ、一つ引っかかるファイルを試してみたら、なんだか雰囲気が変わってきたような…この辺りから何となく流れが分かり始めるというか。今までとは違う方向に話が進んでいる気配もあるし…。こういう時って、大体七十個くらいある中の一つ二つしか面白くないイメージだけど、今回はその「当たり」に近づいた予感。

結果としては──まあ、全部分かったわけじゃないけど、それなりに進展があったかな、と。でも細部までは断言できないし、多分まだ隠れている部分もあるんじゃないかなぁ…。

やあ!長らくぶりだね。オフィスの仕事に忙殺されていたけど、やっとHackTheBoxに戻ってこられたよ。スキルアップしていこう。今回もエキサイティングな挑戦になりそう。

さて、いつものように、偵察から始めるけど、特別なことはなさそう。おなじみの22番と80番ポートが見えてきた。ホストファイルに追加して、バックエンドがNode.jsっぽいページを確認。

アカウント登録機能を使って、内部のログインポータルの特徴を少しずつ探っていこうと思う。細かいところを丁寧に調べていけば、何か面白い発見があるかもしれない。

サブドメインファジングで新たな標的をゲット

テスト用のアカウント、そろそろ追加してもいい頃かもしれない。なんだかんだで、アンケートのページはいつものサブドメインと違うところにあるっぽい。「TAKE THE SURVEY」ボタンにマウスを重ねてみたら、あれ?と思ったけど、まぁ結局hostsファイルにも加えなきゃいけない流れになった。クリックすると、例の質問画面に飛ばされる。不思議と、この手順が当たり前みたいになっている。

話がちょっと前後するけど、ホーム画面をふらふらしていた時かな、「ralph」というユーザー名っぽいものを見つけた気がする。これは記憶違いかもしれないけど、多分そう書いてあったはず。そのあと何ページか探してみても、大した収穫はなかったような……いや、一部面白そうな箇所も混じっていたかな。

/admin というパスも目についた。この辺りまで来ると並行作業になることも多くて、自分でもどこから手をつけたかわからなくなる。でもralphのパスワードについては、ブルートフォース試してみたもののうまくヒットしなくて…多分使ったリストがイマイチだったか、それとも完全に脇道だったか、そのへん曖昧。

全体的には七十回くらい同じような操作を繰り返した感覚だけ残ってる。本当に意味があったのかどうかは今ひとつ不明瞭。

サブドメインのファジングをしていたら、また新しい発見があったんだ。バージョン情報も下の方で見つけたけど、今のところエクスプロイトは見つかっていない。

履歴書作成サイトをもう一度調べてみることにした。ログインして、何やらエクスポートボタンが最後の方にあるのに気づいた。ちょっと試してみようと思って、可能性のあるリモートコード実行(RCE)をチェック。

ファイルはちゃんとダウンロードされるみたい。Burp Suiteで詳しく調べてみた。エクスポート後、ダウンロードページにリダイレクトされて、あの「api」サブドメインを通じてダウンロードされてるんだ。おそらくRuby on Railsの役割はそこにあるんだろう。

最初に利用可能なメソッドをチェックして、最終的にはGETメソッドでダウンロード。ふと、ローカルファイルインクルージョン(LFI)を試してみようという閃きが浮かんだ。

LFI脆弱性を利用してpasswdファイルを覗き見る

[[] なんか、「passwd」ファイルを見つけて、アクセス試してみたら、まあヒットしたっぽい。 [] これでユーザー名が何人か出てきた気がする。多分「www-data」なのかな。LFI使ってラルフとかロンのSSH秘密鍵も覗こうとしたけど、うまくいくはずもなく…。この手法で他に何ができるかなぁって考え始めたところ。 ![] あれ、そうだよね、Ruby on Railsのアプリだった気がするんだよな…LFIの場合、大体いつもやるのはディレクトリ構成を探ることくらいかな?それで設定ファイルとか認証情報とか落とせる可能性あるからさ。![] ちょっと調べ物タイムに突入。そしたら、それっぽい[ブログ]記事も見つかったんだよね。 ! [] ! [] 今いる場所、多分「app」ディレクトリ付近なんじゃないか?webrootっていうか、その辺りな感じがするんだけど自信ないけど…。![] 「config」フォルダが地味に気になるというか、希望持てそうな雰囲気あるし…。だから、まず「download」のページから一度戻って、それからさらにもう一回「app」を抜けて、「config」に辿り着けばいいんじゃない?webサーバーパス的にもそんな感じしそうだし…。![] ![] ![] おお!やっぱり上手く行ったような気がする。そのままデフォルトのディレクトリ構成っぽかったし。Production key…これは見る価値ありそうって思った


探索の旅、ファイルを開けては閉じ、謎めいた痕跡を追いかける。最初は空虚な期待、でも何かが潜んでいそう。デフォルトのディレクトリ構造から、いくつかのマークされたファイルを覗き込む。最初は期待外れ、何も興味深いものは見つからない。

でも、突然、何かが輪郭を現し始める。ぼんやりとした手がかり、断片的な情報が少しずつ組み合わさっていく。まるで謎解きのパズルのように、徐々に全体像が見えてくる。あちらこちらをのぞき、時には行き止まりに突き当たりながらも、探索は続く。

そして、ふと気づく。この迷路のような探検の中で、私たちは何かの本質に近づいているのかもしれない。小さな発見の連鎖が、大きな謎への糸口になるのだろうか。まだ分からない。でも、その不確かさこそが、探求の魅力なのかもしれない。

参考記事

現代の賞金稼ぎ「バグハンター」の知られざる実像 相手はプロ

バグハンターは、企業に製品やサービスの脆弱性や不備を報告し、その内容の重要度に応じて報奨金を得ている。この仕組みを規定する法的な根拠は存在しない ...

私がゼットスケーラーを選んだ理由 | 新たなキャリアへの挑戦

ゼットスケーラー 代表取締役 エリアバイスプレジデント 金田 博之 による「My Journey to Zscaler(私がZscalerを選んだ理由)」

ソース: Zscaler

Columnist

エキスパート

関連ディスカッション

❖ 関連記事