インジェクション脆弱性

コマンドインジェクションや SQL インジェクション(SQLi)を含む、Web アプリケーションにおける重大なインジェクション脆弱性について学びます。手動での攻撃手法を習得し、強力なツールである sqlmap を使用してデータベースへの侵入を自動化する方法を実践します。

Cybersecurity EngineerサイバーセキュリティKali LinuxLinux

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

インジェクションは、ユーザーが制御するデータによって 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 手順を進めます。操作がローカル環境を越えることはありません。

講師

labby
Labby
Labby is the LabEx teacher.