攻撃者の視点で学ぶPHPセキュリティ|Kali Linuxで実践する脆弱性テスト
攻撃者の視点で学ぶPHPセキュリティ|Kali Linuxで実践する脆弱性テスト
1. はじめに
これまでの記事で、セキュリティを守りながら生成AIでPHPを学ぶ方法を実践してきました。
- 生成AIでプログラミング学習、その前に|社内SEが知っておくべきセキュリティの基本:生成AIのリスクと安全な使い方
- DockerでPHP+MySQL開発環境を作る|初めてでも30分で完成:Docker環境の構築
- PHP基礎文法とDB接続の安全な書き方|他言語経験者向け:PHPの基本文法とPDO
- PHPでTODOリスト作成|CRUDとセキュリティ対策を実践:CRUD操作とXSS対策
- 手続き型PHPをクラスベースにリファクタリング|保守性向上の実践:クラスベースへのリファクタリング
- PHP実務で使うデバッグとセキュリティチェックリスト:デバッグとセキュリティチェック
これまでの記事で学んだセキュリティ対策
- SQLインジェクション対策(PHP基礎文法とDB接続の安全な書き方|他言語経験者向け):プリペアドステートメントの重要性
-
XSS対策(PHPでTODOリスト作成|CRUDとセキュリティ対策を実践):
htmlspecialchars()によるエスケープ - CSRF対策(PHP実務で使うデバッグとセキュリティチェックリスト):トークンによる検証
-
セッション管理(PHP実務で使うデバッグとセキュリティチェックリスト):
session_regenerate_id(true)によるセッション固定攻撃対策
ここまでは「守る側」の視点で学んできました。でも、セキュリティを本当に理解するには、攻撃する側の視点も知る必要があるんですよね。
1.1 この記事で実践すること
- PHP基礎文法とDB接続の安全な書き方|他言語経験者向けとPHPでTODOリスト作成|CRUDとセキュリティ対策を実践で学んだSQLインジェクション対策が、なぜ必要か。SQLMapを使うと一瞬で分かります
- PHPでTODOリスト作成|CRUDとセキュリティ対策を実践で学んだXSS対策が、なぜ必要か。実際に攻撃してみると理解が深まります
「脆弱性を理解するには、実際に攻撃してみるのが一番」って言われるんですが、これは本当にそうだと思います。防御だけ学んでも、「どこを狙われるのか」が分からないと、結局穴だらけになっちゃうんですよ。
この記事では、Kali Linuxを使った実践的なペネトレーションテスト(侵入テスト)の入門編をやっていきます。ホワイトハッカーが使うツールを実際に触ってみることで、「攻撃者がどうやってシステムを狙うのか」を体験していきましょう。
1.2 この記事の目的
- 攻撃者の視点を理解する
- Kali Linuxの基本を知る
- よく使われる攻撃ツールを体験する
- 倫理的ハッキングのルールを学ぶ
1.3 ⚠️⚠️⚠️重要な注意事項⚠️⚠️⚠️
- 自分の環境でのみテストしてください
- 他人のサイトやサーバーへの攻撃は犯罪です
- この記事はセキュリティ学習目的のみです
1.4 このシリーズ全体の流れ
2. 【重要】セキュリティテストの前提条件
セキュリティテストを実施する前に、必ず守るべきルールがあります。
2.1 絶対に守るべき3つのルール
2.1.1 自分の環境でのみ実施
- 自分が管理する環境でのみテストを実施
- 他人のシステムやネットワークには絶対にアクセスしない
2.1.2 許可された環境でのみ実施
- 社内システムをテストする場合は、必ず許可を得る
- システム管理者、セキュリティ担当者に相談
- テスト計画を作成して関係者と共有
2.1.3 本番環境を壊さない
- 本番環境でのテストは絶対に避ける
- ステージング環境やテスト環境を使用
- テスト前に必ずバックアップを取得
2.2 なぜこれらのルールが重要か
2.2.1 法的リスク
- 無許可のテストは違法行為になる可能性
- 社内のセキュリティポリシーに違反する可能性
2.2.2 技術的リスク
- 本番環境を壊す可能性
- データの損失やシステムのダウン
2.2.3 信頼関係
- 関係者との信頼関係を損なう可能性
- 会社の評判に影響する可能性
これらのルールを守ることで、安全かつ効果的にセキュリティテストを実施できます。
2.3 法律的な話
2.3.1 不正アクセス禁止法違反
- 3年以下の懲役または100万円以下の罰金(不正アクセス禁止法(警察庁))
- 「攻撃するつもりはなかった」は通用しません
- ポートスキャンだけでも、場合によっては違法になります
Samsung社の事例(生成AIでプログラミング学習、その前に|社内SEが知っておくべきセキュリティの基本で紹介)みたいに、「悪意はなかった」でも懲戒処分になるんですよね。セキュリティは本当に慎重に扱う必要があります。
3. なぜ「攻撃者の視点」が重要なのか
3.1 防御だけでは限界がある
セキュリティ対策って、どうしても「やるべきこと」のチェックリストになりがちじゃないですか?
- プリペアドステートメントを使う ✓
- htmlspecialchars()でエスケープする ✓
- CSRF対策をする ✓
もちろん、これらは大事です。でも、なぜこれが必要なのか を本当に理解してますか?
実際に攻撃ツールを使ってみると、「ああ、だからこの対策が必要なんだ」って腹落ちするんですよね。
3.2 攻撃してみることで理解が深まる
例えば、PHP基礎文法とDB接続の安全な書き方|他言語経験者向けとPHPでTODOリスト作成|CRUDとセキュリティ対策を実践で学んだSQLインジェクション対策。
「プリペアドステートメントを使えば安全」って言われても、正直ピンと来なかったんですよ、最初は。でも、実際にSQLMapっていう自動攻撃ツールを使ってみると、「あ、これ防がないとヤバい」って実感できるんです。
攻撃ツールを使うと、脆弱性がある箇所が一瞬で見つかっちゃう んですよね。手動でやると時間かかるけど、ツールを使えば数秒です。だからこそ、防御側も「どこを狙われやすいか」を知っておく必要があるんです。
3.3 ホワイトハッカーの考え方
ホワイトハッカー(倫理的ハッカー) っていうのは、合法的にセキュリティテストを行う専門家のことです。企業から依頼を受けて、「うちのシステム、穴ありますか?」ってチェックする仕事ですね。
ブラックハッカー(悪意のあるハッカー)と使うツールは同じなんですが、目的が真逆 です。
- ブラックハッカー:脆弱性を悪用して情報を盗む、システムを破壊する
- ホワイトハッカー:脆弱性を見つけて報告する、システムを守る
この記事では、ホワイトハッカーの視点 で学んでいきます。
4. Kali Linuxとは
Kali Linuxは、ペネトレーションテスト(侵入テスト)用のLinuxディストリビューションです(Kali Linux公式サイト)。セキュリティ専門家やペネトレーションテスターが使用するツールが標準で搭載されています。
4.1 Kali Linuxの特徴
4.1.1 多彩なセキュリティツールが標準搭載
情報収集・偵察
- Nmap:ネットワークスキャナー・ポートスキャン(Nmap公式サイト)
- Maltego:OSINT(オープンソースインテリジェンス)・情報収集と可視化(Maltego公式サイト)
脆弱性評価・エクスプロイト
- Metasploit Framework:脆弱性評価・エクスプロイト開発・ペネトレーションテスト(Metasploit公式サイト)
- SQLMap:SQLインジェクション自動検出・エクスプロイトツール(SQLMap公式サイト)
Webアプリケーション診断
- Burp Suite:Webアプリケーションセキュリティテスト・プロキシツール(Burp Suite公式サイト)
- OWASP ZAP:Webアプリケーション脆弱性スキャン・診断(OWASP ZAP公式サイト)
- Nikto:Webサーバー脆弱性スキャン・設定診断(Nikto公式サイト)
ネットワーク解析
- Wireshark:ネットワークプロトコルアナライザー・パケットキャプチャ(Wireshark公式サイト)
無線LANセキュリティ
- Aircrack-ng:無線LANセキュリティ評価・WEP/WPA/WPA2クラッキング(Aircrack-ng公式サイト)
パスワードクラッキング
- John the Ripper:パスワードクラッカー・ハッシュ解析(John the Ripper公式サイト)
- Hashcat:高速パスワードリカバリー・GPU対応(Hashcat公式サイト)
- Hydra:ネットワークログオンクラッカー・ブルートフォース攻撃ツール(Hydra公式サイト)
ソーシャルエンジニアリング
- Social Engineering Toolkit (SET):フィッシング攻撃シミュレーション・ソーシャルエンジニアリング演習(SET公式サイト)
4.1.2 ローリングリリースモデル
- 常に最新のツールや機能が提供される
- 最新のセキュリティ脅威に対応可能
4.1.3 多様なプラットフォーム対応
- 仮想環境(VirtualBox、VMware)
- USB(ライブUSB)
- クラウド(AWS、Azure)
- ARMデバイス
4.2 なぜKali Linuxを使うのか
4.2.1 攻撃者視点での学習
- 実際の攻撃ツールを使って、システムの脆弱性を理解できる
- 防御するには攻撃を知ることが重要
4.2.2 統合された環境
- 必要なツールがすべて揃っている
- 個別にインストールする手間が省ける
4.2.3 実践的なスキル
- セキュリティ専門家が実際に使っているツール
- 実務で使える知識が身につく
4.3 この記事で学ぶツール
この記事では、以下のツールを中心に学びます。
- Nmap:ネットワークスキャナー(ポートスキャン)
- Burp Suite:Webプロキシ(手動テスト)
- SQLMap:SQLインジェクション自動化ツール
- OWASP ZAP:自動スキャンで脆弱性を検出
- Metasploit Framework:脆弱性検証フレームワーク(入門のみ)
5. Kali Linuxのセットアップ
Kali Linuxを安全に試すためには、仮想環境でのインストールが推奨 されます。VirtualBoxを使えば、ホストOSに影響を与えずにセキュリティテストを実施できます。
5.1 VirtualBoxのインストール
5.1.1 ステップ1:VirtualBoxのダウンロード
- VirtualBox公式サイトにアクセス
- ホストOSに対応したバージョンをダウンロード
- インストーラーを実行してインストール
参考: VirtualBoxのインストール方法の詳細は、VirtualBox公式ドキュメントを参照してください。
5.1.2 ステップ2:VirtualBox Extension Packのインストール
- VirtualBox公式サイトからExtension Packをダウンロード
- VirtualBoxを起動
- 「ファイル」→「環境設定」→「拡張機能」からインストール
5.1.3 Extension Packの役割
- USBデバイスのサポート
- リモートデスクトップ機能
- その他の拡張機能
5.2 Kali Linuxのダウンロードとインポート
ステップ1:Kali Linuxのダウンロード
- Kali Linux公式サイトにアクセス
- 「Virtual Machines」を選択
- VirtualBox用の.ovaファイルをダウンロード(最も簡単)
.ovaファイルを使う理由
- インストール手順が不要
- すぐに使える状態になっている
- 初心者でも簡単にセットアップできる
参考: Kali Linuxのインストール方法の詳細は、Kali Linux公式ドキュメントやVirtualBoxにKali Linuxをインストール | MARU's Blogを参照してください。
ステップ2:仮想マシンのインポート
- VirtualBoxを起動
- 「ファイル」→「仮想アプライアンスのインポート」を選択
- ダウンロードした.ovaファイルを選択
- 「次へ」をクリック
- 設定を確認して「インポート」をクリック
インポート時の設定
- メモリ:4GB以上を推奨(デフォルトで設定されている場合が多い)
- ハードディスク:20GB以上を推奨
ステップ3:設定調整
インポート後、以下の設定を確認・調整します:
- 仮想マシンを選択して「設定」をクリック
- 「USB」タブを開く
- 「USBコントローラーを有効化」のチェックを外す(起動時のエラーを防ぐため)
USBコントローラーを無効化する理由
- 起動時にUSB関連のエラーが発生する可能性がある
- セキュリティテストにはUSBデバイスは不要な場合が多い
5.3 Kali Linuxの起動
ステップ1:仮想マシンの起動
- VirtualBoxのリストからKali Linuxを選択
- 「起動」をクリック
- ログイン画面が表示されるまで待つ
ステップ2:ログイン
デフォルトのログイン情報
-
ユーザー名:
kali -
パスワード:
kali
初回ログイン後の注意
- セキュリティ上の理由から、パスワードの変更を推奨
- システムのアップデートを実行(
sudo apt update && sudo apt upgrade)
5.4 よくあるエラーと対処法
エラー1:USBコントローラーのエラー
症状
USB device with UUID {xxxx} is busy with a previous request
対処法
- 仮想マシンの設定で「USBコントローラーを有効化」のチェックを外す
- 仮想マシンを再起動
エラー2:メモリ不足
症状
- 仮想マシンが重い、フリーズする
- スワップが頻繁に使用される
対処法
- 仮想マシンの設定でメモリを4GB以上に設定
- ホストOSのメモリが不足している場合は、他のアプリケーションを終了
エラー3:ネットワーク接続エラー
症状
- インターネットに接続できない
- パッケージのインストールが失敗する
対処法
- 仮想マシンの設定で「ネットワーク」を確認
- 「NAT」または「ブリッジアダプター」を選択
5.5 Kali LinuxとVirtualBoxの基礎を学ぶ
この記事でKali LinuxやVirtualBoxについてわからない部分があれば、以下の記事がとてもわかりやすく解説されています。
✅ 初心者向け
-
Kali Linux完全ガイド:インストールから基本操作まで
- Kali Linuxのインストールから基本操作まで詳しく解説
- VirtualBoxでのセットアップ手順も含まれています
-
VirtualBoxにKali Linuxをインストール | MARU's Blog
- VirtualBoxでのKali Linuxセットアップ手順が画像付きで詳しく解説
- 初心者でも安心して進められるよう、各ステップが丁寧に説明されています
もっと詳しく学びたい方
-
Kali Linux公式ドキュメント
- Kali Linuxの公式ドキュメント
- インストール方法、ツールの使い方、トラブルシューティングなど、包括的な情報が掲載されています
-
VirtualBox公式マニュアル
- VirtualBoxの公式マニュアル
- 仮想マシンの作成、設定、ネットワーク設定など、詳細な情報が記載されています
5.6 OS別インストール手順(2024年11月〜2025年3月時点の最新情報)
Kali LinuxとVirtualBoxのインストールで困った場合は、以下の記事が最新の情報で詳しく解説されています。
Windows向け
-
VirtualBoxにKali Linuxをインストール | MARU's Blog
- Windows環境でのVirtualBoxとKali Linuxのセットアップ手順が画像付きで解説
- .ovaファイルを使った簡単なインストール方法から、ISOファイルからのインストールまで対応
- つまずきやすいポイントもフォローされています
-
Kali Linux完全ガイド:インストールから基本操作まで
- Windows環境でのKali Linuxセットアップが詳しく解説
- VirtualBoxのインストールからKali Linuxの起動まで、ステップバイステップで説明されています
Mac向け
-
Kali Linux完全ガイド:インストールから基本操作まで
- Mac環境でのKali Linuxセットアップ手順が詳しく解説
- VirtualBoxのインストールからKali Linuxの起動まで、画像付きで説明されています
-
VirtualBox公式サイト
- Mac向けのVirtualBoxダウンロードとインストール手順
- Extension Packのインストール方法も記載されています
Linux向け(Ubuntu)
-
Kali Linux公式ドキュメント - インストール
- Ubuntuを含むLinux環境でのKali Linuxインストール手順が詳しく記載
- ISOファイルからのインストール、仮想マシンでのセットアップなど、複数の方法が解説されています
-
VirtualBox公式マニュアル - Linuxホスト
- Linux環境でのVirtualBoxインストール手順
- パッケージマネージャーを使ったインストール方法が詳しく説明されています
6. よく使うセキュリティツールの紹介
Kali Linuxには多数のセキュリティツールが含まれていますが、この記事では特に重要なツールを紹介します。
⚠️ 繰り返しますが、自分の環境でのみテストしてください。他人のサイトへの攻撃は犯罪です。
6.1 Nmap(ネットワークスキャナー)
6.1.1 Nmapとは
- ネットワーク上のホストやサービスを調査するツール(Nmap公式サイト)
- 「どのポートが開いているか」「どんなサービスが動いているか」を調べる
- ペネトレーションテストの最初のステップ
6.1.2 何ができるか
- 開いているポート番号の特定
- 稼働中のサービス(Apache、MySQL、SSHなど)の検出
- OSのバージョン推定
6.1.3 実行例
# 自分のDockerコンテナをスキャン(例:172.18.0.2)
nmap 172.18.0.2
# 結果例:
# PORT STATE SERVICE
# 22/tcp open ssh
# 80/tcp open http
# 3306/tcp open mysql
これを見ると、「MySQLのポート3306が外部に開いてる」とか、「SSHが動いてる」とか分かっちゃうんですよね。
6.1.4 防御方法
- 不要なポートは閉じる(ファイアウォール設定)
- 不要なサービスは停止する
- 外部からのアクセスが必要ないポートは内部のみに制限
DockerでPHP+MySQL開発環境を作る|初めてでも30分で完成で作ったDocker環境、MySQLのポートを外部公開してましたよね?あれ、実は結構リスクがあるんです。開発環境だからいいんですが、本番環境だと「内部ネットワークのみアクセス可」にするべきなんですよ。
6.2 Burp Suite(Webプロキシ)
6.2.1 Burp Suiteとは
- WebブラウザとWebサーバーの間に入る「プロキシツール」(Burp Suite公式サイト)
- HTTPリクエストを傍受・改ざんできる
- Webアプリケーションの脆弱性テストで最もよく使われるツール
6.2.2 何ができるか
- HTTPリクエストの内容を見る・書き換える
- 隠しパラメータの発見
- セッションIDの書き換え
- SQLインジェクション、XSSのテスト
6.2.3 実行例(概要)
- Burp Suiteを起動して、プロキシを有効化
- ブラウザのプロキシ設定を
127.0.0.1:8080に変更 - Webサイトにアクセス
- Burp SuiteでHTTPリクエストを傍受
- パラメータを書き換えて送信
例えば、こんなHTTPリクエストがあったとします。
POST /api/todo/update HTTP/1.1
Content-Type: application/x-www-form-urlencoded
id=1&title=買い物&user_id=5
これをBurp Suiteで傍受して、user_id=5をuser_id=10に書き換えると?
→ 他人のTODOが編集できちゃう可能性 があるんです。
6.2.4 防御方法
- サーバー側でセッション情報を必ずチェック
- クライアントから送られてくる
user_idを信用しない - セッションIDと紐づいたユーザーIDをサーバー側で取得
PHP実務で使うデバッグとセキュリティチェックリストで学んだ「セッション管理」が、まさにこれを防ぐための対策なんですよね。
6.3 SQLMap(SQLインジェクション自動化ツール)
6.3.1 SQLMapとは
- SQLインジェクション脆弱性を自動で検出・悪用するツール(SQLMap公式サイト)
- データベースの内容を抽出できる
- 攻撃者が最もよく使うツールの1つ
6.3.2 何ができるか
- SQLインジェクション脆弱性の自動検出
- データベース名、テーブル名、カラム名の取得
- データの抽出(ユーザー情報、パスワードなど)
- データベースの操作(INSERT、UPDATEも可能)
6.3.3 実行例(概要)
# 脆弱なURLをテスト(例)
sqlmap -u "http://example.com/todo.php?id=1" --dbs
# 結果例:
# [INFO] the back-end DBMS is MySQL
# available databases [3]:
# [*] information_schema
# [*] mysql
# [*] todo_app
これだけで、「どんなデータベースがあるか」が分かっちゃうんです。
さらに、テーブル名やデータも取得できます。
# テーブル一覧を取得
sqlmap -u "http://example.com/todo.php?id=1" -D todo_app --tables
# データを取得
sqlmap -u "http://example.com/todo.php?id=1" -D todo_app -T users --dump
6.3.4 防御方法
- プリペアドステートメントを必ず使う(PHP基礎文法とDB接続の安全な書き方|他言語経験者向けで学んだやつです)
- エスケープ処理(ただし、プリペアドの方が安全)
- 入力値のバリデーション
PHP基礎文法とDB接続の安全な書き方|他言語経験者向けとPHPでTODOリスト作成|CRUDとセキュリティ対策を実践で、「なぜプリペアドステートメントが必要か」って散々言ってましたが、SQLMapを使うとその理由が一瞬で分かります。
プリペアドステートメントを使っていない古いコード(mysql_query関数とか)は、SQLMapで一発でデータ抜かれちゃうんですよね。
6.4 OWASP ZAPの使い方
**OWASP ZAP(Zed Attack Proxy)**は、オープンソースのWebアプリケーションセキュリティスキャナーです(OWASP ZAP公式サイト)。GUIを備えており、初心者にも使いやすいツールです。
6.4.1 OWASP ZAPの特徴
- オープンソースで無料:商用ツールと同等の機能を無料で利用可能
- GUIで使いやすい:初心者でも直感的に操作可能
- 多様な脆弱性を検出:SQLインジェクション、XSS、CSRFなど
6.4.2 基本的な使い方
ステップ1:OWASP ZAPの起動
- Kali Linuxのアプリケーションメニューから「OWASP ZAP」を起動
- または、ターミナルで
zapコマンドを実行
ステップ2:Quick Startタブでスキャン
- OWASP ZAPが起動したら、「Quick Start」タブを開く
- 「URL to attack」にターゲットのURLを入力
- 例:
http://localhost:8080/todo.php
- 例:
- 「Attack」ボタンをクリック
- 自動スキャンが開始される
ステップ3:結果の確認
- 「Alerts」タブで検出された脆弱性を確認
- リスクレベル(High、Medium、Low、Informational)で分類されている
- 各脆弱性をクリックして詳細を確認
リスクレベルの意味:
- High:深刻な脆弱性、すぐに対処が必要
- Medium:中程度の脆弱性、対処を推奨
- Low:軽微な脆弱性、可能な限り対処
- Informational:情報提供のみ
ステップ4:レポートの出力
- 「Report」メニューを開く
- 「Generate HTML Report」を選択
- レポートを保存
OWASP ZAPは、URLを入力するだけで自動スキャンが実行できる ため、初心者でも簡単に使えます。
6.5 Burp Suiteの使い方
Burp Suiteは、Webアプリケーションのセキュリティテストを行う統合プラットフォームです(Burp Suite公式サイト)。Community版は無料 で利用でき、手動テストに最適なツールです。
6.5.1 Burp Suiteの特徴
- Community版は無料:基本的な機能が利用可能
- 手動テストに最適:プロキシ、Repeater、Intruderなどの機能
- リクエストのインターセプト:ブラウザとWebアプリケーション間のトラフィックをキャプチャ
6.5.2 基本的な使い方
ステップ1:Burp Suiteの起動
- Kali Linuxのアプリケーションメニューから「Burp Suite」を起動
- または、ターミナルで
burpsuiteコマンドを実行 - 初回起動時にプロジェクト設定を選択(デフォルトでOK)
ステップ2:プロキシ設定の確認
Burp Suiteのデフォルト設定
- プロキシアドレス: 127.0.0.1
- プロキシポート: 8080
ステップ3:ブラウザのプロキシ設定
Firefoxの場合
- Firefoxの設定を開く
- 「ネットワーク設定」をクリック
- 「設定」ボタンをクリック
- 「手動プロキシ設定」を選択
- HTTPプロキシ:
127.0.0.1、ポート:8080 - 「このプロキシをHTTPSでも使用する」にチェック
- 「OK」をクリック
Chromeの場合
- 拡張機能「Proxy SwitchOmega」などを使用
- または、システムのプロキシ設定を変更
ステップ4:CA証明書のインストール(HTTPS通信をインターセプトする場合)
- Burp Suiteで「Proxy」タブを開く
- 「Options」サブタブを開く
- 「Import / Export CA Certificate」をクリック
- 「Export」タブで証明書をエクスポート
- ブラウザに証明書をインストール
ステップ5:リクエストのインターセプト
- Proxyタブの「Intercept」サブタブを開く
- 「Intercept is on」をクリックして有効化
- ブラウザでWebアプリケーションを操作
- リクエストがBurp Suiteに表示される
ステップ6:リクエストの変更と送信
- インターセプトしたリクエストを編集
- 「Forward」で送信、「Drop」で破棄
- 変更したリクエストを「Repeater」に送って繰り返しテスト
Burp Suiteは、手動テストの強力な味方 です。リクエストを自由に変更してテストできるため、自動ツールでは検出できない脆弱性も発見できます。
6.6 SQLMapの使い方
SQLMap は、SQLインジェクションの脆弱性を自動的に検出・悪用するツールです(SQLMap公式サイト)。コマンドラインから操作し、対象のURLを指定してスキャンを実行します。
6.6.1 SQLMapの特徴
- 自動化されたSQLインジェクション検証:手動での検証を自動化
- 多様なデータベースに対応:MySQL、PostgreSQL、Oracleなど
- 多様な攻撃手法に対応:ブール型、時間ベース、エラーベースなど
6.6.2 基本的な使い方
基本的なコマンド
# URLを指定してスキャン
sqlmap -u "http://example.com/page.php?id=1"
# データベース一覧を取得
sqlmap -u "http://example.com/page.php?id=1" --dbs
# 特定のデータベースのテーブル一覧を取得
sqlmap -u "http://example.com/page.php?id=1" -D database_name --tables
# 特定のテーブルのデータを取得
sqlmap -u "http://example.com/page.php?id=1" -D database_name -T table_name --dump
よく使うオプション
-
--dbs:データベース一覧を取得 -
--tables:テーブル一覧を取得 -
--dump:テーブルのデータを取得 -
--batch:対話的な質問をスキップ(自動でデフォルトを選択)
Burp Suiteのリクエストファイルを使用する場合
- Burp Suiteでリクエストを右クリック
- 「Save item」を選択してファイルに保存
- SQLMapで読み込む:
sqlmap -r request.txt
POSTリクエストのテスト
sqlmap -u "http://example.com/login.php" --data="username=test&password=test"
SQLMapは、コマンド1つでSQLインジェクションを検証できる ため、効率的にテストできます。
6.7 Metasploit Framework(脆弱性検証フレームワーク)
6.7.1 Metasploit Frameworkとは
- 世界で最も有名な脆弱性検証フレームワーク(Metasploit公式サイト)
- 既知の脆弱性を実際に試せる
- エクスプロイト(攻撃コード)が大量に収録されている
6.7.2 何ができるか
- 既知の脆弱性を悪用したテスト
- システムへの侵入テスト
- ペイロード(攻撃コード)の実行
6.7.3 使用例(概要)
Metasploitは少し高度なので、この記事では入門のみ紹介します。
# Metasploitの起動
msfconsole
# エクスプロイトの検索(例:Apache Struts 2の脆弱性)
search apache struts
# エクスプロイトの選択と設定
use exploit/multi/http/struts2_content_type_ognl
set RHOST 192.168.1.100
set RPORT 8080
exploit
これで、Apache Struts 2の脆弱性を悪用してシステムに侵入できちゃうんです(もちろん、テスト環境でのみ)。
6.7.4 防御方法
- ソフトウェアを最新バージョンに保つ
- 既知の脆弱性情報(CVE)をチェック
- セキュリティパッチを適用
Metasploitは強力すぎるので、詳細は次回以降の記事で深掘りしますね。
7. 実践:TODOリストアプリへの攻撃テスト
ここでは、PHPでTODOリスト作成|CRUDとセキュリティ対策を実践で作成したTODOリストアプリを対象に、実際に攻撃テストを実施します。
7.1 テスト環境の準備
ステップ1:TODOリストアプリの起動
- PHPでTODOリスト作成|CRUDとセキュリティ対策を実践で作成したTODOリストアプリを起動
- Docker環境で動作していることを確認
- ブラウザで
http://localhost:8080にアクセス
ステップ2:テスト用データの準備
- テスト用のTODOをいくつか作成
- 本番データは使用しない(ダミーデータのみ)
7.2 SQLインジェクションの手動テスト(Burp Suite)
ステップ1:Burp Suiteでリクエストをインターセプト
- Burp Suiteを起動
- ブラウザのプロキシ設定をBurp Suiteに設定
- TODOリストアプリで操作(例:TODOの詳細表示)
- リクエストがBurp Suiteに表示される
ステップ2:パラメータの特定
リクエストを確認して、パラメータを特定します。
- GETパラメータ(URLの
?id=1など) - POSTパラメータ(フォームデータ)
ステップ3:ペイロードの注入
よく使うペイロードを試します。
認証回避
' OR '1'='1
' OR '1'='1'--
admin'--
データ抽出
' UNION SELECT NULL--
' UNION SELECT 1,2,3--
参考: より詳しいSQLインジェクションペイロードは、PayloadsAllTheThings - SQL Injectionを参照してください。
実践例
- リクエストの
idパラメータを1' OR '1'='1に変更 - 「Forward」で送信
- レスポンスを確認
ステップ4:Repeaterでの繰り返しテスト
- インターセプトしたリクエストを右クリック
- 「Send to Repeater」を選択
- Repeaterタブでペイロードを変更して繰り返しテスト
Repeaterのメリット
- 同じリクエストを何度でも変更してテストできる
- ペイロードを少しずつ変更して試せる
- レスポンスを比較しやすい
7.3 XSSの検証(反射型・保存型)
7.3.1 反射型XSSのテスト
- 検索フォームやURLパラメータにペイロードを入力
- よく使うペイロード:
<script>alert('XSS')</script> <img src=x onerror=alert('XSS')> <svg onload=alert('XSS')> - レスポンスを確認
- スクリプトが実行されるか確認
参考: より詳しいXSSペイロードは、PayloadsAllTheThings - XSS Injectionを参照してください。
7.3.2 保存型XSSのテスト
- コメント欄やフォームにペイロードを入力
- 送信して保存
- 保存されたデータが表示されるページを確認
- スクリプトが実行されるか確認
実践例
- TODOのタイトルに
<script>alert('XSS')</script>を入力 - 保存
- TODO一覧ページを確認
- アラートが表示されるか確認
7.4 脆弱性スキャンの実践(OWASP ZAP)
7.4.1 ステップ1:OWASP ZAPでのスキャン実行
- OWASP ZAPを起動
- 「Quick Start」タブを開く
- 「URL to attack」に
http://localhost:8080を入力 - 「Attack」ボタンをクリック
- 自動スキャンが開始される
ステップ2:結果の確認
- 「Alerts」タブで検出された脆弱性を確認
- リスクレベルでフィルタリング
- 各脆弱性の詳細を確認
よく検出される脆弱性
- SQLインジェクション(OWASP SQLインジェクション)
- XSS(クロスサイトスクリプティング)(OWASP XSS)
- CSRF(クロスサイトリクエストフォージェリ)(OWASP CSRF)
- セッション管理の問題
ステップ3:レポートの出力
- 「Report」メニューを開く
- 「Generate HTML Report」を選択
- レポートを保存
レポートの活用
- 検出された脆弱性の一覧
- 各脆弱性の詳細と対処法
- 開発チームとの共有
8. 実務での安全なテスト方法
実務でセキュリティテストを実施する際は、本番環境を壊さない方法 と社内システムへのテスト実施方法 を理解することが重要です。
8.1 本番環境を壊さない方法
8.1.1 ステージング環境の活用
ステージング環境とは
- 本番環境と同じ構成のテスト環境
- 本番環境への影響を完全に回避
- テスト結果を本番環境に反映する前に検証可能
ステージング環境を使うメリット
- 本番環境を壊すリスクがない
- 自由にテストできる
- テスト結果を本番環境に反映する前に検証できる
8.1.2 バックアップの重要性
テスト前のバックアップ
- データベースのバックアップ
- ファイルシステムのバックアップ
- 設定ファイルのバックアップ
バックアップの確認
- バックアップが正常に取得できたか確認
- リストア手順を事前に確認
8.1.3 仮想環境のスナップショット機能
VirtualBoxのスナップショット
- テスト前にスナップショットを作成
- テストを実施
- テスト後にスナップショットから復元
- 簡単に元の状態に戻せる
スナップショットのメリット
- テスト前後の状態を簡単に切り替えられる
- 失敗しても安心
- 何度でもテストできる
8.1.4 テスト用データの準備
ダミーデータの使用
- 本番データは一切使用しない
- テスト用のダミーデータを準備
- 個人情報や機密情報を含まないデータ
データの匿名化
- 必要に応じてデータを匿名化
- 本番データの構造だけを模倣
8.2 社内システムへのテスト実施方法
8.2.1 許可取得の重要性
なぜ許可が必要か
- 法的リスク:無許可のテストは違法行為になる可能性
- 社内ルール:社内のセキュリティポリシーに違反する可能性
- 信頼関係:関係者との信頼関係を損なう可能性
誰に許可を取るか
- システム管理者
- セキュリティ担当者
- プロジェクトマネージャー
- 経営層(必要に応じて)
8.2.2 テスト計画の作成
テスト計画に含める内容
- テスト対象:どのシステム、どの機能をテストするか
- テスト範囲:テストする脆弱性の種類
- テスト期間:いつからいつまで実施するか
- 影響範囲:テストによる影響の範囲
- 緊急時の連絡先:問題が発生した場合の連絡先
テスト計画の共有
- 関係者全員にテスト計画を共有
- 質問や懸念事項を事前に確認
- 合意を得てからテストを開始
参考: テスト計画の作成方法の詳細は、OWASP Testing GuideやIPA セキュリティテストガイドを参照してください。
8.2.3 テスト範囲の明確化
テスト対象の限定
- テストする機能やページを明確に
- テストしない範囲も明確に
- 影響範囲を最小限に
テスト手法の選択
- 自動スキャン(OWASP ZAPなど)
- 手動テスト(Burp Suiteなど)
- 組み合わせて実施
8.2.4 テスト結果のレポート作成
レポートに含める内容
- 実行サマリー:テストの概要
- 検出された脆弱性:脆弱性の一覧と詳細
- リスク評価:各脆弱性のリスクレベル
- 対処法:各脆弱性への対処方法
- 推奨事項:今後のセキュリティ対策の推奨事項
レポートの形式
- HTMLレポート(OWASP ZAPなど)
- PDFレポート
- スプレッドシート形式
8.2.5 テスト後の対応
脆弱性の優先順位付け
- High:すぐに対処が必要
- Medium:対処を推奨
- Low:可能な限り対処
対処の実施
- 優先順位に従って対処を実施
- 対処後の再テストを実施
- レポートを更新
8.3 テスト環境の作り方
じゃあ、どこで練習すればいいのか?
おすすめのテスト環境
-
DVWA(Damn Vulnerable Web Application)
- わざと脆弱性を入れたWebアプリ(DVWA公式リポジトリ)
- SQLインジェクション、XSS、CSRFなど一通り試せる
- Dockerで簡単に構築できる
-
WebGoat
- OWASP(セキュリティ団体)が作った学習用アプリ(OWASP WebGoat公式サイト)
- チュートリアル形式で学べる
-
HackTheBox
- オンラインのハッキングチャレンジサイト(HackTheBox公式サイト)
- 合法的にペネトレーションテストを練習できる
-
自分のローカル環境
- DockerでPHP+MySQL開発環境を作る|初めてでも30分で完成で作ったDocker環境
- VirtualBox上の仮想マシン
推奨する練習の流れ
- まずはDVWAで基本を学ぶ
- これまでの記事で作ったTODOアプリを自分で攻撃してみる
- HackTheBoxで実践的なチャレンジに挑戦
こういう環境なら、安心して攻撃ツールを試せますね。
9. まとめ
この記事では、攻撃者の視点 からセキュリティを学びました。
9.1 学んだこと
- Kali Linuxの基本
- Nmap(ポートスキャン)
- Burp Suite(HTTPプロキシ)
- SQLMap(SQLインジェクション自動化)
- OWASP ZAP(自動脆弱性スキャン)
- Metasploit Framework(脆弱性検証)
9.2 重要なポイント
- 攻撃を知ることで、防御力が上がる
- これまでの記事で学んだ対策の「裏側」が理解できた
- 倫理的ハッキングのルールを守る
9.3 シリーズ全体の総まとめ
このシリーズ全体を振り返ると以下の通りです。
- 生成AIでプログラミング学習、その前に|社内SEが知っておくべきセキュリティの基本:生成AIのリスクを知る
- DockerでPHP+MySQL開発環境を作る|初めてでも30分で完成:Docker環境の構築
- PHP基礎文法とDB接続の安全な書き方|他言語経験者向け:PHPの基本文法とPDO
- PHPでTODOリスト作成|CRUDとセキュリティ対策を実践:CRUD操作とXSS対策
- 手続き型PHPをクラスベースにリファクタリング|保守性向上の実践:クラスベースへのリファクタリング
- PHP実務で使うデバッグとセキュリティチェックリスト:デバッグとセキュリティチェック
- 攻撃者の視点で学ぶPHPセキュリティ:攻撃者の視点を理解
「守る側」と「攻撃する側」の両方を学んだことで、セキュリティの全体像が見えてきたんじゃないですか?
9.4 次のステップ
ここから先は、この記事で学んだことを基に、以下の実践していきましょう。
- OWASP ZAPを使った自動脆弱性診断
- Metasploit Frameworkの詳細
- Bug Bounty(脆弱性報奨金制度)への挑戦
- レガシーシステムのセキュリティ診断
攻撃ツールを使えるようになると、「このコード、ここが危ないな」って一瞬で分かるようになります。それが、セキュリティエンジニアやホワイトハッカーの視点なんですよね。
最後に繰り返しますが、学んだ技術は倫理的に使ってください。
自分の環境、許可を得た環境でのみテストして、セキュリティスキルを高めていきましょう!
10. 参考資料・ブログ紹介
より詳しく学びたい方向けのリソースを紹介します。
10.1 公式ドキュメント
10.2 セキュリティガイドライン
- OWASP Testing Guide:Webアプリケーションのセキュリティテスト手法を網羅的に解説
- IPA セキュリティテストガイド:IPAが提供するセキュリティテストのガイドライン
10.3 ペイロード集
- PayloadsAllTheThings:SQLインジェクション、XSSなどのペイロード集。実践的な攻撃パターンを学べる
10.4 学習用テスト環境
- DVWA(Damn Vulnerable Web Application):わざと脆弱性を入れたWebアプリ。Dockerで簡単に構築できる
- OWASP WebGoat:OWASPが作った学習用アプリ。チュートリアル形式で学べる
- HackTheBox:オンラインのハッキングチャレンジサイト。合法的にペネトレーションテストを練習できる
10.5 Kali LinuxとVirtualBoxのインストール・設定
Kali LinuxとVirtualBoxのインストール・設定に関する詳しい記事は、5.5 Kali LinuxとVirtualBoxの基礎を学ぶと5.6 OS別インストール手順を参照してください。
参考ブログ
- Kali Linux完全ガイド:インストールから基本操作まで:Kali Linuxのインストールから基本操作まで詳しく解説
- VirtualBoxにKali Linuxをインストール | MARU's Blog:VirtualBoxでのKali Linuxセットアップ手順
10.6 法律関連
- 不正アクセス禁止法(警察庁):不正アクセス禁止法の詳細と罰則について
これらのリソースを活用して、より深くセキュリティを学んでいきましょう。
11. 📚 シリーズ記事一覧
この記事: 攻撃者の視点で学ぶPHPセキュリティ
前の記事: PHP実務で使うデバッグとセキュリティチェックリスト
→ 実務で必要なデバッグ手法とセキュリティチェックを実践的に学びます。
Discussion