広告

【OWASP ZAP】ログインページにスパイダー/動的スキャン

ツール他

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

今回は、ログインが必要なページに対して、OWASP ZAPで脆弱性診断を行う手順をまとめました。

そのようなページは当然、ログインを行わないとアクセスできないため、OWASP ZAPで認証情報の設定が必要になります。

OWASP ZAPのインストール方法や、基本的な使い方は以下にまとめましたのでご覧ください。

【OWASP ZAP】インストールと基本的な使い方【Web脆弱性診断】
OWASP ZAPを使用して、Webの脆弱性診断を行ってみます。オープンソースで無料で使うことができます。

脆弱性の危険性を試した記事を以前まとめましたので、あわせてご覧ください。

【Laravel】敢えて試すSQLインジェクション【仕組みを知るには実装】
敢えてSQLインジェクションの脆弱性を含んだシステムを作成します。対策や仕組みを知るには実際に試してみましょう。人気のあるLaravelというフレームワークで試します。

Mac版のOWASP ZAPについては以下の記事をご覧ください。
本記事ではWindows版で解説していますが、使い方はMac版でも同様です。

【OWASP ZAP】インストールと使い方【M1 Mac】
Mac版のOWASP ZAPを使用して、Webの脆弱性診断を行ってみます。オープンソースで無料で使うことができます。
動作環境
  • ホスト端末:Windows 10
  • OWASP ZAP 2.11.0
  • Laravel Framework 8.69.0

他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。

広告

【紹介】個人開発

私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。

また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます

是非多くの方に読んでいただき、Laravelの開発に少しでもお役に立てたら幸いです。

対象サイト

今回はLaravelログイン認証に対して、ログインが必要なページを用意し診断を行います。

Laravelで作成したサイトの認証に対して試しますが、基本的な手順はLaravel以外でも参考になると思います。

以下の記事の通り、Laravelを構築後、認証機能を導入したサイトを使用します。

【Laravel8/9/10】認証機能の導入 (Breeze)
Laravel8の認証機能(ログイン機構)を導入したいと思います。 シンプルで最小限の認証機能である、Breezeを導入します。 Laravelの導入から詳しく解説しています。

Laravelプロジェクトのサーバーを起動し、ログイン画面を開きます。

事前にログインアカウントを登録します。

ログインに必要な情報は、後ほどOWASP ZAPの設定で使用しますので、控えておきましょう。

ログインを行うと、ダッシュボード画面が表示されました。

このページは、ログインをしないと表示できませんが、OWASP ZAPでこのようなページに対して診断を行う場合は、認証情報の設定を行いログインが必要なページにアクセスできるようにします。

Laravelのログイン認証には、CSRFの対策が組み込まれているため、以下の設定も済ませておきましょう。

【OWASP ZAP】CSRF対策ページに脆弱性診断
CSRFの対策を行っているサイトに対して、OWASP ZAPを利用して脆弱性診断を行います。そのための設定や、実際に攻撃を行い動作確認を行いました。

基本的には、CSRF対策を行っているサイトの方が多いと思いますので、設定しておきましょう。

設定前に動作確認

ログインが必要なページに動的スキャンを行うためには、OWASP ZAPの設定が必要ですが、まずは設定せずに試してみましょう

ダッシュボードはログインしていないとアクセスできません。
そのページに対して動的スキャンを実施してみましょう。

スキャンを開始します。

動的スキャンの結果を確認しましょう。

1.ダッシュボードへのリクエストを確認しました。
2.レスポンスタブをクリックし、応答内容を確認します。
3.ログイン画面へリダイレクトされています。(ステータスコード:302)

これは認証情報がないためです。

その次の行の、ダッシュボードへのリクエストも確認しましょう。
ステータスコード:200が返ってきていますが、ダッシュボード画面ではなく、ログイン画面が返されています

1.ダッシュボードへのリクエストを確認しました。
2.レスポンスタブをクリックし、応答内容を確認します。
3.ログイン画面が返却されています。(ステータスコード:200)

つまり、ダッシュボード画面に対して脆弱性診断が行われていません。
引き続き、OWASP ZAPのログイン設定を行い、試してみましょう。

OWASP ZAPの設定

認証ユーザの追加

一度ログインを行うと、ログイン時のPOSTリクエストが残ります
そのPOSTリクエストを右クリックし、Flag as Context」→「既定コンテキスト:Form-based Auth Login Requestを選択します。

認証設定が開きました。

「ユーザ」メニューを開き、追加ボタンをクリックします。

有効なログイン情報を入力します。

ユーザが追加されました。

「Username Parameter」と「Password Parameter」を変更します。
Laravelの場合、それぞれ「email」と「password」です。
ここまで設定したら、一度OKボタンをクリックしましょう。

もう一度セッション・プロパティを開くには、上部にあるボタンをクリックします。

「Login Request POST Data」を以下のように変更しました。
再度開いた時点で、emailとpasswordは変更されていますが、_tokenは手動で変更しました。

_token={%_token%}&email={%username%}&password={%password%}

_tokenは、CSRF対策に使用するパラメータです。

認証済みチェック

診断時にアクセスしたページが、認証済みかどうか判断する設定を行います。
このページにアクセスできるということは、認証済みです。

右上にあるログアウトリンクがあれば、ログイン済みと判断できそうです。

指定した文字列がなければ、OWASP ZAPはログイン処理を行った後に、対象のページへアクセスするようになります。

HTMLタグを確認しました、以下のタグがログアウトのリンクでした。

this.closest('form').submit();">Log Out</a>

「Regex pattern used to identify Logged in messages」に、以下のように入力しました。

\Qthis.closest(‘form’).submit();”>Log Out\E

\Qは開始、\Eは終了文字です。

広告

ログインが必要なページに動的スキャン

設定が完了しましたので、ダッシュボードへ脆弱性診断を行いましょう。

動的スキャン時にユーザを選択します。

毎回指定するのも面倒なので、以下のボタンをクリックしておきます。
これを選択しておけば、動的スキャン時にユーザを選択する必要がありません

Forced User Modeでは、セッション・プロパティの「強制ユーザー」が使われます。

動的スキャンに戻りましょう。
今度はステータスコード:302は返らず、ダッシュボード画面に対して攻撃ができました。
レスポンスにはログアウトのリンクが含まれているのが確認できます。

ログインが必要なページにスパイダー

ダッシュボード画面に、更にログインが必要なページを追加しました。
(ダッシュボード2)

スパイダーを実行する前には「dashboard2」は存在しません。
それではスパイダーを実行します。

ユーザを指定します。(または強制ユーザモード)

ログインに必要なページのスパイダーも成功し、ダッシュボード2を取得することができました。

さいごに

ログインが必要なページに対して、OWASP ZAPで脆弱性診断を行う手順をまとめました。
Webアプリケーションでは、管理画面やユーザのマイページなど、ログインが必要なケースは多いと思いますが、これで脆弱性診断を行うことができました。

是非ご活用ください。

他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。

LaravelMacOSPHPWindowsツールツール他
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

タイトルとURLをコピーしました