インジェクションは、ユーザーが制御するデータによって Shell コマンドやデータベースクエリの意味が変わるときに発生します。本コースでは、意図的に脆弱なローカルアプリケーションへのコマンドインジェクションと SQL インジェクションを通じて、この境界の崩れを具体的に確認します。
まず手動でペイロードを作り、区切り文字、引用符、コメント、真偽式、UNION SELECT が動作を変える理由を理解します。その後 sqlmap で検出、スキーマ列挙、データ抽出、OS shell の流れを自動化し、最後に独立したデータベース侵害チャレンジへ進みます。
学習内容
- コマンドインジェクション箇所を特定し、Linux のコマンド区切り文字で実行を確認する。
- Shell のエスケープとワイルドカードで単純なキーワードフィルターを回避し、対象に証拠ファイルを作る。
- SQL エラーを発生させ、真偽式ペイロードで脆弱なログインを回避する。
ORDER BYとUNION SELECTで列数と画面に反映される位置を特定する。- SQLite のスキーマメタデータを問い合わせ、Web 応答から演習用ユーザー名とパスワードを抽出する。
- sqlmap で SQLi を検出し、データベース列挙、指定テーブル抽出、対話型 OS shell を試す。
- 最終チャレンジで 2 つの SQLi 入力点を自力で検証し、演習用顧客テーブルを出力する。
このコースの対象者
自動化に頼る前にインジェクションの仕組みを理解したい Web セキュリティ学習者向けの中級コースです。ペネトレーションテスター志望者、アプリケーションセキュリティ学習者、不安全なコマンド生成や動的 SQL がシステムとデータを露出させる例を知りたい開発者にも適しています。
前提知識: Linux ターミナルと curl、基本的な HTTP GET/POST と URL エンコード、SELECT、WHERE、列、テーブルなどの入門 SQL 概念に慣れていること。
学習環境: sqlmap と、ローカルのポート 5000、8080、80 で動作する隔離された意図的脆弱 Web アプリケーションを備えた Ubuntu 22.04 ターミナル。コマンドと抽出するサンプルデータはすべてコース環境内に留まります。
よくある質問
開始前に高度な SQL 知識が必要ですか?
いいえ。クエリの文脈、真偽論理、コメント、列数の判断、UNION SELECT の手順は演習内で説明します。基本的な SQL 用語に慣れていると中級演習を理解しやすくなります。
インジェクションペイロードを実在システムへ送りますか?
いいえ。すべての対象は練習用に構成されたローカルアプリケーションです。コマンド、認証情報、顧客レコード、トークンは演習用データです。
なぜ sqlmap より先に手動 SQL インジェクションを学ぶのですか?
入力が構文をどう変え、反映列がどうデータを露出させるかを手動演習で確認できます。これにより sqlmap の検出手法を理解し、自動列挙の範囲を適切に定められます。
OS コマンド実行まで行いますか?
はい、隔離された演習内で行います。コマンドインジェクションでは指定した Linux コマンドを実行し、sqlmap 演習では準備済み PHP 対象への --os-shell 手順を進めます。操作がローカル環境を越えることはありません。





