2012-03-28 39 views
3

是否有可能将“插入”语句(或其他任何改变数据库的语句)潜入MySQL“select”语句中?你可以偷偷“插入”到“选择”语句?

我问,因为我担心我已经发现了一个注入漏洞,但是由于只能够一次运行一条语句,所以它可以从明显的混乱中受到保护,例如'; drop database; --,无论查询有多少条语句已被破坏以包含。但是如果后端正在执行类似select bar from foo where param = '$improperly_escaped_input'的东西,有什么我可以输入会危及我的数据库吗?

无论如何,都需要纠正漏洞。但是,如果我能够展示如何利用这些数据来解决这个问题,那么修复它就会进入优先级队列。

+1

您如何避免一次运行多个陈述? – 2012-03-28 20:44:25

+1

无论数据是否可以修改,它都可能是一个漏洞。如果人们可以改变查询来访问除自己以外的数据,或者修改权限查询以始终返回true,那么您仍然会遇到麻烦。 – 2012-03-28 20:48:38

回答

5

修改数据只是Sql注入漏洞的一个方面。即使只有读权限,攻击者也可以提升他们的权限,或者使用攻击来从数据库中抓取每一个数据。

我想不出一个办法来解决我的问题,即在select语句中修改数据......但是,are you sure that you're only able to run a single command at a time

无论如何,其他攻击媒介应该足以构成威胁来提高问题的优先级。

编辑:Data modification is allowed in MySql sub-queries

的MySQL允许子查询指具有 修改数据的副作用,如将行插入表的存储的功能。对于 例如,如果f()的插入行,以下查询可以修改数据:

SELECT ... WHERE x IN (SELECT f() ...);

此行为是非标准 (不是由SQL标准允许的)。在MySQL中,它可能会产生 不确定的结果,因为对于给定查询的不同执行,f()可能会执行不同的次数 ,具体取决于优化程序选择如何处理它的 。

+1

PHP的mysql_query的文档说它只允许一个查询(http://php.net/manual/en/function.mysql-query.php),而且我自己的实验表明使用分号创建第二个语句并不会'工作。但是你是对的,挖掘数据的可能性足以让我强烈争论早日处理这个问题。 – BlairHippo 2012-03-28 20:52:42

+0

好,详细,答案。 – 2012-03-28 20:56:09

+0

@BlairHippo嗯...我对MySql doc的回答中的链接与PHP文档冲突,并提供了一个用于执行多个语句的'mysql_query'的示例......但我没有任何证据。 .. – 2012-03-28 20:56:32