我正在学习SQL注入,目前正在努力解决以下问题。我有一个类似的查询:
SELECT first_name, last_name FROM users WHERE user_id = $id
并且我应该注入SQL代码来删除$id
参数上的某个行。
由于服务器DBMS是MariaDB,因此我得出以下结论:
我的想法是在所选部分和使用返回选项删除的行之间进行并集。最终的查询如下所示:
SELECT first_name, last_name FROM users WHERE user_id = $id
UNION
SELECT first_name,null FROM (DELETE FROM users WHERE user_id=7
RETURNING first_name)
这应该将删除的信息与最初查询的信息连接起来,并允许执行DELETE,这是这里的关键思想。
1; DELETE FROM users WHERE user_id=7
由于某种原因,我认为使用中的驱动程序不允许多查询或类似的东西。据我所知,返回方式应该工作,但它没有,我已经修改了几次,所以我不确定是否有一个限制,我不知道或什么,有人能帮助这个吗?
先谢谢你。
1条答案
按热度按时间bwleehnv1#
无论
DELETE...RETURNING
是否返回结果集,都不允许在子查询中使用。同样,子查询中也不允许使用某些返回结果集的语句,如
CALL
或SHOW
。您只能在子查询中放入以下内容:
要在SQL注入中使用DELETE,要么必须有一个允许多查询的连接器接口,要么必须操作查询,使DELETE首先出现,然后注解掉查询的其余部分。