是否可以将“insert”语句(或任何其他更改数据库的语句)隐藏到MySQL“select”语句中?
我问,因为我担心我发现了一个注入漏洞,但是由于只能一次运行一个语句,无论有多少语句,它都可以防止像'; drop database; --
这样明显的混乱查询已损坏以包含。但是如果后端正在执行类似select bar from foo where param = '$improperly_escaped_input'
的操作,那么我可以输入哪些内容会损害我的数据库吗?
无论如何,都需要纠正漏洞。但是,如果我可以展示一个如何利用它来搞砸数据的例子,那么修复它就会在优先级队列中上升。
答案 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()可能执行不同的数字 对于给定查询的不同执行的次数取决于如何 优化器选择处理它。