###### tags: `security` # Web Pentest 101 Webアプリケーションの脆弱性診断にBurp Suite Community Editionを利用するために最低限知っておくべきことをまとめました。 ## Web脆弱性診断とは 初めてWeb脆弱性診断の案件を任された初心者がやるべきことは3つあると考えています。 なお、お客様と密にコミュニケーションを取って、本番システムにダメージを与えないように配慮したり、納得されるレポートを書いたりといったビジネス全般の基礎は記載を省きます。 ### 1. 値を入力できる箇所を見つける ログインフォームのように一般的な利用者にも分かる入力箇所だけでなく、hidden属性が設定されたWebコンポーネントの値がPOSTされていたり、Cookieにセットされた値がPOSTされている事もあるかもしれません。プロキシを使う事でWebアプリケーションに送信されるこれらの値を解析し、外部からWebアプリケーションに値を入力できる箇所を把握する必要があります。 ### 2. 悪用できるような入力値を見つける Webアプリケーションに値を入力できる箇所を見つけたら、どのような値(ペイロードといいます)を入力すればWebアプリケーションを悪用できるか考えます。本来はサーバ、プログラム、そしてデータベースの知識に基づいてペイロードを検討すべきですが、脆弱性診断の入門者はチートシートからペイロードを引用するのが良いと思います。たとえば[webアプリケーション脆弱性ガイドライン](https://www.github.com/WebAppPentestGuidelines/WebAppPentestGuidelines)によると実践的なペイロードの参考として[PayloadsAllTheThings](https://www.github.com/swisskyrepo/PayloadsAllTheThings)が紹介されています。 ### 3. 悪用された結果を認識する 入力したペイロードがWebアプリケーションの脆弱性にうまく作用した場合は、その事実を認識する必要があります。初心者にとっては難しいことですが、あらかじめ正常系の動作を確認したり、参考にするチートシートをよく読み込んでその意味や期待される結果を理解しておく必要があります。[webアプリケーション脆弱性ガイドライン](https://github.com/WebAppPentestGuidelines/WebAppPentestGuidelines/blob/master/WebAppPentestGuidelines/WebAppPentestGuidelines.pdf)では各ペイロードに対応して「脆弱性があると疑われる挙動」が明示されているため参考になるでしょう。 以上のことを意識して具体的な手順を確認していきます。 ## 環境構築 このドキュメントでは以下の環境を想定しています。Internet Optionを触らずにプロキシを変更できるFirefoxを選択しましたがInternet Optionを操作するのが苦にならない場合はChromeなどを使っても問題ありません。 - 検査対象サーバ - HA:Wordy - ペネトレーションツール - Kali-linux-2022.3 - Burp Suite Community Edition - Firefox - Seclists (https://www.github.com/danielmiessler/SecLists) ### HA:Wordy ペネトレーションテストを練習するためには自分が管理するローカル環境に診断対象を構築する必要があるのでvulhubに公開されているHA:Wordyを使います。 https://www.vulnhub.com/entry/ha-wordy,363/ からVirtualboxのOVAをダウンロードしてVirtualBoxにインポートしてください。この仮想マシンはペネトレーションテストによってユーザーアカウントを奪取する事を目的にしたものなのでアカウント情報は公開されていません。 HA:WordyはDHCPでIPアドレスを取得します。VirtualBoxの`ファイル(F)`>`環境設定(P)`を開き、DHCP有効なNATネットワークを作成してください。  インポートしたHA:Wordyの設定を開き、今作成したNATネットワークをネットワークアダプター1に割り当てれば準備は完了です。  この状態でHA:Wordyの電源をONにしてください。 ### Kali Kaliは脆弱性診断やペネトレーションテストで用いられるツール群がプリインストールされたLinuxディストリビューションです。今回はBurp Suiteのみ紹介しますが、今後ペネトレーションテストの案件に携わる上で便利なツールがそろっているため、今のうちにこのディストリビューションに慣れておきましょう。 https://www.kali.org/get-kali/ から64-bitのVirtualBoxイメージファイルをダウンロードしてVirtualBoxにインポートするだけですぐに利用できます。 Kaliをインポートしたらネットワークアダプター1に先ほど作成したNATネットワークを割り当てることを忘れないでください。こうしないとKaliからHA:Wordyにアクセスする事が出来ません。  ネットワークの設定が完了したらKaliの電源を入れてください。デフォルトのユーザーアカウントは`kali`で、パスワードも`kali`です。 デフォルトは英語キーボードで慣れていない人には操作し辛い環境になっています。メニューバー左上のApplicationsからSettings > Keyboardを開き、Keyboard layoutをJapaneseのみに変更しておきましょう。   ### Burp Suite KaliにはBurp Suiteがプリインストールされています。まずはBurp Suiteをローカルプロキシとして稼働させる基本的な方法を確認しましょう。 03-Web Application Analysis > burpsuiteからBurp Suiteを起動します。  有償ライセンスを使えば診断の状態をディスクに保存しておくことができますが、Community EditionではTemporary projectしか選べません。そのままNextをクリックしてください。  Butp Suiteの設定をカスタマイズしている場合はこの画面でロードする事が出来ます。特にロードしたい設定が無い場合はUse Burp defaultsのままStart Burpをクリックしてください。  ダッシュボードが表示されたらEvent logを確認してください。Burp Suiteのデフォルトでは127.0.0.1:8080をリッスンしています。ここにHTTPリクエストを送信すればBurp Suiteをプロキシとして利用する事が出来ます。  Firefoxを起動してSettingsを開いてください。  Settingsの検索バーに`proxy`と入力してNetwork Settingsを検索し、Settingsを開いてください。  `Manual proxy configuration`を選択してlocalhost:8080を指定してください。こうすることでFirefoxから送られるHTTPリクエストは全てBurp Suiteを経由するようになります。  FirefoxのアドレスバーにHA:WordyのURLを入力し、Webサイトが表示されたことを確認してください。HA:WordyのURLは以下の手順で確認できます。 KaliのTerminalを開きKaliが所属しているネットワークセグメントを確認します。 ここでは`10.0.2.0/24`に所属している事が分かりました。 ``` ip address show eth0 | grep global ```  同じネットワークセグメントに居るHA:WordyのIPアドレスを確認します。HA:Wordyはポート80でリッスンしているのでnmapを使って該当するホストを見つけてください。ここでは`10.0.2.5`であることが分かりました。 ``` nmap -p 80 --open 10.0.2.0/24 ```  つぎにHA:Wordyが持っている有効なURLを確認します。dirbを使ってURLを見つけてください。ここでは`http://10.0.2.5/wordpress`が見つかりました。 ``` dirb http://10.0.2.5 ```  ここで確認したURLに対してFirefoxからアクセスしてください。HA:WordyのWebコンテンツが表示されます。  このときBurp SuiteのProxy>HTTP historyにFirefoxで送受信されたHTTPリクエスト/レスポンスが記録されている事を確認してください。  ### SecLists SecListsはペネトレーションテストで利用されるペイロード集です。KaliにインストールしておけばBurp Suiteからペイロードを読み込んでテストに利用できます。 SecListsはaptでインストールできます。ペイロードのリストは`/usr/share/seclists`に配置されるので確認してください。 ``` sudo apt update -y && sudo apt install seclists -y ls /usr/share/seclists/Fuzzing/SQLi/ ```  以上で基本的な設定は完了です。 ## 診断作業手順 Burp Suiteによる脆弱性診断は正常なHTTPアクセスをプロキシに記録する事から始まります。ここでは例として`http://10.0.2.5/wordpress/`のキーワード検索窓に`search test`を入力して送信しています。  ### Interceptによるテスト search testを検索する前にBurp Suiteで`Proxy` > `Intercept`を開き`Intercept on`を有効化してください。  この状態でHA:Wordyでsearch testを検索すると、Burp SuiteがHTTPリクエストを保留した状態になります。保留されたHTTPリクエストは任意に編集する事が出来ます。  ここではsearch testというキーワードをinterceptというキーワードに変更しています。リクエストの変更が完了したらForwardをクリックするとHTTPリクエストがサーバに送信されます。  Firefoxに戻るとinterceptが検索されたことが分かります。  InterceptはHTTPリクエストの起点が分かりにくいWebアプリケーションをテストする際に利用できます。 ### Repeaterによるテスト Proxy > HTTP historyから`search test`を送信したHTTPリクエストを見つけてください。該当のHTTPリクエストを見つけたら右クリックメニューから`Send to Repeater`をクリックします。  Repeaterタブを開くと先ほど選択したHTTPリクエストが張り付けられている事が確認できます。このリクエストは自由に変更できます。ここでは送信するテキストを`search test`から`fazz`に変更しています。送信したいリクエストが完成したらSendをクリックしてWebアプリケーションから返るレスポンスを確認できます。  RepeaterはInterceptと違ってFirefoxを操作する必要が無いので繰り返しリクエストを送るのに向いています。 とくに脆弱性がありそうな場所に目ぼしを付けてからペイロードを細かく調整して深掘りするのに使います。 ### Intruderによるテスト 多種多様なペイロードをブルートフォースで流し込んで脆弱性がありそうな場所を見つけるにはIntruderを使います。Intruderを使うには`Proxy`>`HTTP history`から試したいリクエストを右クリックして`Send to Intruder`をクリックします。  Intruderタブを開くとHTTPリクエストが張り付けられており、一部のキーワードが`$`で囲まれている事が分かります。`$`で囲まれた部分にペイロードが流し込まれます。Burp Suiteが自動的に`$`の場所を設定してくれますが、必要に応じて`$`を追加・削除して調整してください。  つぎにPayloadsタブを開いて流し込むペイロードリストを指定してください。コピー&ペーストすることも出来ますが、ここではあらかじめインストールしたSecListsから`/usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txt`をロードします。準備ができたらStart attackをクリックしてください。  Community EditionではIntruderの動作に制約がかかる旨が表示されます。気にせずOKをクリックしてください。  Resultsタブにペイロードを流した結果がリアルタイム表示されます。ペイロードが脆弱性にヒットした場合は正常なレスポンスに比べてLengthが短かったりするので、一覧画面からそれらしい結果が無いか確認してください。StatusやLengthからは判別できない脆弱性もあるため、必要に応じてResponseの詳細も確認してください。  もしブルートフォースの間隔を開けて攻撃として検知されないようにしたい場合は`Intruder` > `Resource Pool`を開き`Delay between requests`を編集してください。たとえば5秒毎にリクエストを送りたい場合は以下の様に設定します。  以上でBurp Suiteを使ったWeb脆弱性診断の基本的なレクチャーは終了です。 ## Payloadの紹介 [webアプリケーション脆弱性ガイドライン](https://www.github.com/WebAppPentestGuidelines/WebAppPentestGuidelines)で定義されている102個の診断項目の大部分はBurp Suiteの単純な機能を使って調査する事が出来ます。そのとき利用できるSecListsの例を紹介します。 - SQLインジェクション - /usr/share/seclists/Fuzzing/SQLi/* - /usr/share/seclists/Fuzzing/Polyglots/* - /usr/share/seclists/Fuzzing/Databases/* - コマンドインジェクション - /usr/share/seclists/Fuzzing/command-injection-commix.txt - CRLFインジェクション - /usr/share/seclists/Fuzzing/UnixAttacks.fuzzdb.txt - /usr/share/seclists/Fuzzing/Windows-Attacks.fuzzdb.txt - /usr/share/seclists/Fuzzing/Metacharacters.fuzzdb.txt - XSS - /usr/share/seclists/Fuzzing/XSS/* - /usr/share/seclists/Fuzzing/XSS-Fuzzing - /usr/share/seclists/Fuzzing/Polyglots/* - SSTI - /usr/share/seclists/Fuzzing/template-engines-expression.txt - XXE - /usr/share/seclists/Fuzzing/XXE-Fuzzing.txt - 不要なHTTPメソッド - /usr/share/seclists/Fuzzing/http-request-methods.txt
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up