首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FROM语句之后选择更多的表?

问在FROM语句之后选择更多的表?
EN

Stack Overflow用户
提问于 2009-09-03 00:26:09
回答 3查看 227关注 0票数 0

这是安全测试的一部分,因此没有办法“更改”查询。

基本上,我发现的是一个允许语句操作的缺陷,所以基本上是这样的:

代码语言:javascript
复制
$query = "DELETE FROM `products` WHERE `products`.`whatever` = $variable";

这是PHP,据我所知,无法执行多个查询。使用这个SQL注入,我能够通过运行"0或1=1#“来”清除“这个表。

这是很好的工作,但它不允许我选择更多的表从删除。

这是我想要做的伪代码:

代码语言:javascript
复制
DELETE FROM `products` WHERE `products`.`whatever` = **0 OR 1=1, FROM `othertable` WHERE `othertable`.`othercolumn` = 0 OR 1=1**

这听起来可信吗?

如果这不可靠,我还能用别的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-03 00:31:56

对于同一个DELETE语句,您不能有多个FROM子句,所以您不能按照您想要的方式去做。如果MySQL db打开了“每个语句都允许多个查询”,则可以尝试终止一个DELETE查询,然后将另一个DELETE查询切换到最后,这样看起来如下所示:

代码语言:javascript
复制
DELETE FROM `products` WHERE `products`.`whatever` = **0 OR 1=1; DELETE FROM `othertable` WHERE `othertable`.`othercolumn` = 0 OR 1=1**

但仅此而已。

票数 2
EN

Stack Overflow用户

发布于 2009-09-03 00:33:27

也许我还不完全理解这个问题,但我要说的是,您正在将SQL命令构建为字符串,并直接在MySQL数据库上运行该字符串。

您可以使用命令分隔符(通常是';')来分隔多个命令,这样您就可以运行您想要的任何命令,正如这个漫画恰当地说明的那样。

如果您的数据库配置支持多个命令(或者将来有人更改了当前的设置),则需要确保输入中没有命令分隔符。有关清除输入以防止此类攻击的建议,请参见这篇文章。

票数 2
EN

Stack Overflow用户

发布于 2009-09-03 00:38:13

如前所述,普通的MySQL驱动程序模块不支持多个查询。来自查询

mysql_query()向与指定link_identifier相关联的服务器上的当前活动数据库发送唯一查询(不支持多个查询)。

不幸的是,对于注入工作,DELETE语法仅通过在FROM子句中指定表删除来支持多个表删除。注入的变量是WHERE的一部分,所以您所能做的最大的损害就是单个指定的表。

与流行的观点相反,您实际上可以从PHP运行多个MySQL语句,只需使用不同的数据库驱动程序模块(如MySQLi )即可。见查询()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1370851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档