你可以将“插入”隐藏到“选择”声明中吗?

时间:2012-03-28 20:38:44

标签: mysql sql-injection

是否可以将“insert”语句(或任何其他更改数据库的语句)隐藏到MySQL“select”语句中?

我问,因为我担心我发现了一个注入漏洞,但是由于只能一次运行一个语句,无论有多少语句,它都可以防止像'; drop database; --这样明显的混乱查询已损坏以包含。但是如果后端正在执行类似select bar from foo where param = '$improperly_escaped_input'的操作,那么我可以输入哪些内容会损害我的数据库吗?

无论如何,都需要纠正漏洞。但是,如果我可以展示一个如何利用它来搞砸数据的例子,那么修复它就会在优先级队列中上升。

1 个答案:

答案 0 :(得分:5)

修改数据只是Sql Injection漏洞的一个方面。即使只具有读取权限,攻击者也可以提升其权限,或使用Blind Sql Injection攻击从数据库中删除最后一点数据。

我想不出一种方法可以在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()可能执行不同的数字   对于给定查询的不同执行的次数取决于如何   优化器选择处理它。