このブラインドSQLインジェクションをORDER BY
節で使用しました:
(CASE WHEN 1 THEN col1 ELSE col2 END)
次のようなクエリが生成されます。
SELECT x FROM y ORDER BY (CASE WHEN 1 THEN col1 ELSE col2 END) ASC
このインジェクションは成功し、ORDER BY 句のすべての列名をホワイト リストに登録しました。
他のエンドフィールドでは同様の注入を使用できませんでした。それが可能かどうか、またそれらのフィールドにもホワイトリストが必要かどうか疑問に思いました.
私はこの種の注射を試みましたが、成功しませんでした:
SELECT x FROM y ORDER BY col1 (CASE WHEN 1 THEN DESC ELSE ASC END)
SELECT x FROM y ORDER BY col1 DESC LIMIT (CASE WHEN 1 THEN 1 ELSE 0 END), 0
SELECT x FROM y ORDER BY col1 DESC LIMIT 0, CAST((CASE WHEN 1 THEN 1 ELSE 0 END) AS SIGNED)
DESC/ASC
安全のために、フィールドとLIMIT
変数をホワイトリストに登録するか、列挙する必要がありますか? 私はMySQLを使用しています。これらのインジェクションは、他の DBMS でも可能でしょうか?