我正在尝试找到一种方法来在MySQL服务器上使用相同的指令合并选择查询和更新。这可能听起来像是一个重复的问题,但我的需求与我的前辈不同。
我正在寻找单个SQL指令,因为我不能使用事务或将它们分成两部分。目标是绕过仅允许一个选择查询通过的安全措施。这不是非法的,这是针对我大学的安全课程,目标是绕过一个特别容易受到SQL注入的定制系统。 我可以执行注射并进行任何选择,使用注射登录等等,但这部分更新仍然是一个挑战。
我尝试了所有可以成像的方法,寻找混合它们的方法,我甚至考虑在内部查询上添加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允许这样的事情 - 这是罕见的,但存在。总之,整个事情似乎必须要完成。
答案 0 :(得分:1)
我不熟悉MySQL
,但根据SQL Server
经验,我可以告诉您,您无法合并 SELECT
和 {{1单个查询中的语句。
此外 - 如果您尝试使用 UPDATE
UPDATE
,任何现代数据库系统都应足够聪明以防止您>声明,从而绕过你的数据库权限。
我确信如果你将它与SELECT查询捆绑在一起,MySQL不会愚蠢地允许你进行更新 - 不是说它是可能的。
因此,在我看来 - 你可能在这里追逐一个不允许/不可能的死胡同。