Shikata Ga Nai

Private? There is no such things.

LAB: SQLインジェクション UNION攻撃でカラム数を特定する方法(NULL方式)

Hello there, ('ω')ノ

🎯 ラボの目的

このラボでは、商品カテゴリフィルターにSQLインジェクションの脆弱性があります。UNION攻撃を使用して他のテーブルからデータを取得するためには、まず元のクエリが返すカラム数を特定する必要があります。このラボの目的は、NULLを使用したUNION SELECTによって追加の行を返すことで、クエリが返すカラム数を特定することです。


🛠️ 手順:NULLを使ったカラム数の特定

1. カテゴリフィルターのリクエストを確認

  • ブラウザで任意のカテゴリ(例:Gifts)をクリックします。
  • Burp SuiteのProxyタブで、該当するリクエストを確認します。

2. Burp Repeaterでリクエストを送信

  • 該当リクエストを右クリックし、「Send to Repeater」を選択します。
  • Repeaterタブで、categoryパラメータの値を以下のように変更して送信します:
Gifts' UNION SELECT NULL--
  • エラーが発生することを確認します。

3. NULLの数を増やして再送信

  • NULLの数を1つずつ増やして再度送信します:
Gifts' UNION SELECT NULL,NULL--
Gifts' UNION SELECT NULL,NULL,NULL--
...
  • エラーが発生しなくなり、追加の行が表示されるまで続けます。

4. カラム数の特定

  • エラーが発生しなくなった時点で、使用したNULLの数が元のクエリが返すカラム数です。
  • 例えば、Gifts' UNION SELECT NULL,NULL,NULL--で成功した場合、カラム数は3です。

🧠 ポイントと注意点

  • NULLの使用理由:NULLはすべてのデータ型に適合するため、データ型の不一致によるエラーを回避できます。
  • エラーの確認:アプリケーションがエラーメッセージを返さない場合でも、HTTPステータスコードやレスポンスの変化を観察して成功を判断します。
  • 次のステップ:カラム数を特定した後は、文字列データを挿入して表示可能なカラムを特定し、実際のデータ抽出を行います。

✅ まとめ

このラボでは、UNION SELECTを使用してNULLを挿入し、元のクエリが返すカラム数を特定する方法を学びました。これは、SQLインジェクション攻撃を成功させるための重要なステップです。

Best regards, (^^ゞ