我在ORDER BY
子句中使用了这种盲目的 SQL 注入:
(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 上是可能的?