我正在尝试找到一种方法,在 MySQL 服务器上使用相同的指令合并选择查询和更新。这听起来像是一个重复的问题,但我的需求与我的前任不同。
我实际上正在寻找单个 SQL 指令,因为我不能使用事务或将它们一分为二。目标是绕过只允许一个选择查询通过的安全措施。这不是为了任何违法行为,这是为了我大学的安全类(class),目标是绕过一个定制的系统,该系统特别容易受到 SQL 注入(inject)的攻击。 我可以执行注入(inject)并进行任何选择,使用注入(inject)登录等等,但是这部分更新是一个挑战。
我尝试了我能想到的一切,寻找一种混合它们的方法,我什至想过在内部查询上放置一个 Update 语句,但语法显然是错误的。
有什么想法吗?如果不可能,我们非常欢迎提供有关如何攻击目标和生成更新的建议。
这是一个远景,显然是错误的,但我认为这可能有助于理解我想要实现的目标:
SELECT *
FROM user
WHERE (name = 'admin') and exists (
UPDATE user
SET pass='test'
WHERE name='peter');-- OR email = 'admin') AND pass = ’t’..
目标:
$sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender,
FROM USERS_TABLE
WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’");
更新:我接受了更接近“不可能”的答案。但对此事的进一步搜索得出的结论是,这更多是关于用于连接器的 API,而不是 DBMS 安全功能本身,这实际上是因为 DBMS 以及可接受的用途和语法。
关于在 SELECT 上嵌入 UPDATE 语句的方法的问题,我发现这是不可能的 - 至少在我的知识范围内是不可能的。
关于攻击,当程序员使用允许这种事情的 API 时,可能会使用堆栈语句——这种情况很少见,但确实存在。结论是,整个事情似乎必须完成。
最佳答案
我不熟悉MySQL
但来 self 的 SQL Server
经验 我可以告诉你,你不能结合 SELECT
和 UPDATE
语句都在一个查询中。
此外 - 任何现代数据库系统都应该足够智能,以防止您试图潜入数据库 UPDATE
使用 SELECT
声明,从而规避您的数据库权限。
如果您将 MySQL 与 SELECT 查询捆绑在一起,我相信 MySQL 不会愚蠢地允许您进行更新 - 并不是说这是可能的。
因此在我看来 - 你可能正在追逐这里的死胡同,这是不允许/不可能的。
关于mysql - 查询中的 SELECT 和 UPDATE 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29982102/